From 8bcc4e4373e44dfa4ac1fd8ed70c2b53f26f9237 Mon Sep 17 00:00:00 2001 From: Michel Wilhelm Date: Wed, 5 Feb 2025 10:04:42 -0300 Subject: [PATCH] Problemas resolvidos --- Makefile | 4 +-- app/openv.py | 37 ++++++++++++++++++++++ app/settings.py | 28 ++++++++-------- game/migrations/0001_initial.py | 3 +- game/migrations/0002_auto_20201106_0225.py | 3 +- game/migrations/0003_gameevent.py | 3 +- game/migrations/0007_auto_20201107_0130.py | 8 ++--- game/models.py | 5 ++- 8 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 app/openv.py diff --git a/Makefile b/Makefile index bd4bdc4..378810b 100644 --- a/Makefile +++ b/Makefile @@ -7,8 +7,6 @@ help: @echo "⭐️ help : Exibe esta mensagem" @echo "⭐️ run : Executa a aplicação fora do docker" @echo "⭐️ run-worker : Executa Celery" - @echo "⭐️ blue : Executa blue" - @echo "⭐️ isort : Executa isort" @echo "⭐️ docker-run : Levanta toda a aplicação utilizando Docker" @echo "⭐️ docker-run-app : Levanta apenas a aplicação utilizando Docker" @echo "⭐️ docker-run-worker : Levanta apenas o Celery utilizando Docker" @@ -18,7 +16,7 @@ help: @echo "⭐️ collectstatic : Atualiza os arquivos estáticos no bucket" @echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――" -run: +run-dev: @uv run python manage.py runserver 0.0.0.0:7788 celery: diff --git a/app/openv.py b/app/openv.py new file mode 100644 index 0000000..0a891b3 --- /dev/null +++ b/app/openv.py @@ -0,0 +1,37 @@ +from typing import Optional + +from onepasswordconnectsdk.client import Client, new_client_from_environment +from onepasswordconnectsdk.models import Item, Vault + + +class OnePassword: + connect_client: Client = new_client_from_environment() + vault_title: Optional[str] + item_title: str = 'mines' + vault: Optional[Vault] = None + item: Optional[Item] = None + + def __init__(self, scope: str, item_title=None): + if item_title: + self.item_title = item_title + self.vault_title = scope.lower() + + def get_vault(self) -> Vault: + if self.vault: + return self.vault + self.vault = self.connect_client.get_vault_by_title(self.vault_title) + return self.vault + + def get_item(self) -> Item: + if self.item: + return self.item + vault = self.get_vault() + self.item = self.connect_client.get_item_by_title(self.item_title, vault.id) + return self.item + + def get(self, field: str, default_value=None) -> str | None: + item = self.get_item() + for f in item.fields: + if f.label == field: + return f.value + return default_value diff --git a/app/settings.py b/app/settings.py index 535e3ba..0192cc0 100644 --- a/app/settings.py +++ b/app/settings.py @@ -1,16 +1,18 @@ +import os from pathlib import Path import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration -from .utils import get_op_config +from app.openv import OnePassword -op_config = get_op_config() +SCOPE = os.environ['SCOPE'] +OP_ITEM_TITLE = os.environ.get('OP_ITEM_TITLE', 'mines') -SCOPE = op_config['settings.SCOPE'] +op_env = OnePassword(SCOPE, OP_ITEM_TITLE) sentry_sdk.init( - dsn=op_config['settings.SENTRY_DSN'], + dsn=op_env.get('settings.SENTRY_DSN'), integrations=[DjangoIntegration()], environment=SCOPE, send_default_pii=False, @@ -21,12 +23,12 @@ sentry_sdk.init( BASE_DIR = Path(__file__).resolve().parent.parent # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = op_config['settings.SECRET_KEY'] +SECRET_KEY = op_env.get('settings.SECRET_KEY') # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = op_config.get('settings.DEBUG', '0') in ['1', 'true'] +DEBUG = op_env.get('settings.DEBUG', '0') in ['1', 'true'] -ALLOWED_HOSTS = op_config.get('settings.ALLOWED_HOSTS', '127.0.0.1,localhost').split(',') +ALLOWED_HOSTS = op_env.get('settings.ALLOWED_HOSTS', '127.0.0.1,localhost').split(',') # Application definition INSTALLED_APPS = [ @@ -82,11 +84,11 @@ AUTH_USER_MODEL = 'core.User' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', - 'NAME': op_config['database.name'], - 'USER': op_config['database.user'], - 'PASSWORD': op_config['database.password'], - 'HOST': op_config['database.host'], - 'PORT': op_config['database.port'], + 'NAME': op_env.get('database.name'), + 'USER': op_env.get('database.user'), + 'PASSWORD': op_env.get('database.password'), + 'HOST': op_env.get('database.host'), + 'PORT': op_env.get('database.port'), 'OPTIONS': {'charset': 'utf8mb4'}, } } @@ -108,7 +110,7 @@ AUTH_PASSWORD_VALIDATORS = [ LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'America/Sao_Paulo' USE_I18N = True diff --git a/game/migrations/0001_initial.py b/game/migrations/0001_initial.py index a8ada78..2d7b8f2 100644 --- a/game/migrations/0001_initial.py +++ b/game/migrations/0001_initial.py @@ -1,6 +1,5 @@ # Generated by Django 3.1.3 on 2020-11-05 03:03 -import django_mysql.models from django.db import migrations, models import internal.utils @@ -46,7 +45,7 @@ class Migration(migrations.Migration): ), ( 'board', - django_mysql.models.JSONField( + models.JSONField( default=internal.utils.empty_list, verbose_name='Generated board', ), diff --git a/game/migrations/0002_auto_20201106_0225.py b/game/migrations/0002_auto_20201106_0225.py index 9c2a982..4a1e911 100644 --- a/game/migrations/0002_auto_20201106_0225.py +++ b/game/migrations/0002_auto_20201106_0225.py @@ -1,6 +1,5 @@ # Generated by Django 3.1.3 on 2020-11-06 02:25 -import django_mysql.models from django.db import migrations, models import game.models @@ -36,7 +35,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='game', name='board', - field=django_mysql.models.JSONField( + field=models.JSONField( default=internal.utils.empty_list, help_text='Whe generated board game', verbose_name='Generated board', diff --git a/game/migrations/0003_gameevent.py b/game/migrations/0003_gameevent.py index 366d121..f06424b 100644 --- a/game/migrations/0003_gameevent.py +++ b/game/migrations/0003_gameevent.py @@ -1,7 +1,6 @@ # Generated by Django 3.1.3 on 2020-11-06 03:54 import django.db.models.deletion -import django_mysql.models from django.db import migrations, models import game.models @@ -49,7 +48,7 @@ class Migration(migrations.Migration): ), ( 'metadata', - django_mysql.models.JSONField( + models.JSONField( default=internal.utils.empty_object, help_text='Some usefull event metadata', verbose_name='Event metadata', diff --git a/game/migrations/0007_auto_20201107_0130.py b/game/migrations/0007_auto_20201107_0130.py index 1cb624a..61e6b2f 100644 --- a/game/migrations/0007_auto_20201107_0130.py +++ b/game/migrations/0007_auto_20201107_0130.py @@ -1,7 +1,5 @@ # Generated by Django 3.1.3 on 2020-11-07 01:30 - -import django_mysql.models -from django.db import migrations +from django.db import migrations, models import internal.utils @@ -15,7 +13,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='game', name='board_progress', - field=django_mysql.models.JSONField( + field=models.JSONField( default=internal.utils.empty_list, help_text='This board is updated at each GameEvent recorded', verbose_name='Progress board', @@ -24,7 +22,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='game', name='board', - field=django_mysql.models.JSONField( + field=models.JSONField( default=internal.utils.empty_list, help_text='The generated board game', verbose_name='Generated board', diff --git a/game/models.py b/game/models.py index 426a208..04a6655 100644 --- a/game/models.py +++ b/game/models.py @@ -1,7 +1,6 @@ from enum import IntEnum from django.db import models -from django_mysql.models import JSONField from internal.utils import empty_list @@ -33,8 +32,8 @@ class Game(models.Model): cols = models.PositiveIntegerField('Board cols', default=10, help_text="Board's total columns") mines = models.PositiveIntegerField('Mines on board', default=5, help_text="Board's total placed mines") - board = JSONField('Generated board', default=empty_list, help_text='The generated board game') - board_progress = JSONField( + board = models.JSONField('Generated board', default=empty_list, help_text='The generated board game') + board_progress = models.JSONField( 'Progress board', default=empty_list, help_text='This board is updated at each GameEvent recorded',