From 0ecb6e3530b2e5f0842e0545195fbe93729222b9 Mon Sep 17 00:00:00 2001 From: Kralot Date: Wed, 21 Jan 2026 22:15:36 -0300 Subject: [PATCH] =?UTF-8?q?Melhorias=20gerais=20no=20projeto=20como=20alte?= =?UTF-8?q?ra=C3=A7=C3=B5es=20de=20imports,=20nomes,=20e=20cria=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20singleton=20para=20configura=C3=A7=C3=A3o=20extr?= =?UTF-8?q?a=20do=20ORM=20via=20init=20geral=20como=20`timezone`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- - Muda nome de `Database` para `DatabaseClient` em `orm.respositories.databases`; - Importa `DatabaseClient` em `types.orm` para facilitar uso pelo usuário; - Define `BaseModelSdk` como base para `NotionDatabase` em `orm.mapping.database` no lugar de `BaseModel` original; - Muda imports de models Database em `notion.types.orm` para `notion.types.orm.databases` e remove 'Database' dos nomes; - Muda nome da func `get_database_id` para `id` em `orm.mapping.database`; - Muda nome da func `get_notion_field_name` para `field_name` em `orm.mapping.database`; - Muda nome da func `get_all_mappings` para `mappings` em `orm.mapping.database`; - Cria `orm.config` para configuração de timezone e afins e inicializa singleton no init do pacote com `ORMConfig.configure(timezone = timezone)`; - Altera link de 'Repository' do `pyproject.toml` para o GitHub; --- --- notion/__init__.py | 4 ++- notion/orm/__init__.py | 10 ++++--- notion/orm/common/SetProperty.py | 4 ++- notion/orm/config/__init__.py | 27 +++++++++++++++++++ notion/orm/mapping/database.py | 13 ++++----- notion/orm/mapping/registry.py | 24 ++++++++--------- notion/orm/repositories/__init__.py | 4 +-- notion/orm/repositories/databases/__init__.py | 10 +++---- .../orm/database/DatabasesContainer.py | 2 +- notion/types/orm/__init__.py | 3 --- notion/types/orm/databases/__init__.py | 4 +++ pyproject.toml | 5 +++- 12 files changed, 74 insertions(+), 36 deletions(-) create mode 100755 notion/orm/config/__init__.py create mode 100755 notion/types/orm/databases/__init__.py diff --git a/notion/__init__.py b/notion/__init__.py index 49e12c7..ef2afa3 100755 --- a/notion/__init__.py +++ b/notion/__init__.py @@ -2,7 +2,8 @@ from typing import Type, TypeVar, Generic, Union, Literal from .auth import headers as _headers from .schemas.orm.database.DatabasesContainer import DatabasesContainer as _DatabasesContainer from .orm.repositories import _Repositories -from .client import Client as _Client +from .orm.config import ORMConfig +from .client import Client as _Client TContainer = TypeVar('TContainer', bound = _DatabasesContainer) @@ -33,6 +34,7 @@ class Notion(Generic[TContainer]): _Client.configure(headers) self.client = _Client.get_instance() + ORMConfig.configure(timezone = timezone) self.orm = _ORM(databases_container = orm_container) self.DatabasesContainer = _DatabasesContainer diff --git a/notion/orm/__init__.py b/notion/orm/__init__.py index 112527d..a961eaf 100755 --- a/notion/orm/__init__.py +++ b/notion/orm/__init__.py @@ -1,11 +1,13 @@ -from .common import Common as _common -from .parsers import Parser as _parser -from .mapping import Mapping as _mapping -from .repositories import repo as _repositories +from .config import ORMConfig as _config +from .common import Common as _common +from .parsers import Parser as _parser +from .mapping import Mapping as _mapping +from .repositories import repo as _repositories class _NotionOrm: def __init__(self) -> None: + self.config = _config self.common = _common self.parser = _parser self.mapping = _mapping diff --git a/notion/orm/common/SetProperty.py b/notion/orm/common/SetProperty.py index 50927fc..df78556 100755 --- a/notion/orm/common/SetProperty.py +++ b/notion/orm/common/SetProperty.py @@ -1,6 +1,7 @@ from typing import Dict, Any, Union, Optional, Literal, List, TYPE_CHECKING from datetime import datetime, date from pydantic import validate_call +from ..config import ORMConfig if TYPE_CHECKING: from ..repositories.pages.CreatePage import CreatePage @@ -43,8 +44,9 @@ class SetProperty: def start_date(self, name : str, value : Optional[Union[date, datetime]], - timezone : str = "Etc/UTC" + timezone : Optional[str] = None ): + timezone = timezone if timezone is not None else ORMConfig.get_timezone() if value is None: return self._CreatePage if type(value) == date: diff --git a/notion/orm/config/__init__.py b/notion/orm/config/__init__.py new file mode 100755 index 0000000..8fb385a --- /dev/null +++ b/notion/orm/config/__init__.py @@ -0,0 +1,27 @@ +from typing import Optional + +class ORMConfig: + + "Configuração global do ORM" + + _timezone: str = "Etc/UTC" + _configured: bool = False + + @classmethod + def configure(cls, + timezone : str = "Etc/UTC" + ): + + "Configura o ORM" + + cls._timezone = timezone + cls._configured = True + + @classmethod + def get_timezone(cls) -> str: + + "Retorna a timezone configurada" + + return cls._timezone + +__all__ = ["ORMConfig"] \ No newline at end of file diff --git a/notion/orm/mapping/database.py b/notion/orm/mapping/database.py index b48c2ef..93620e7 100755 --- a/notion/orm/mapping/database.py +++ b/notion/orm/mapping/database.py @@ -1,5 +1,6 @@ from typing import Dict, Any, Optional, Callable, ClassVar, TypeVar, Type -from pydantic import BaseModel, field_validator +from pydantic import field_validator +from ...schemas.dto import BaseModelSdk T = TypeVar('T', bound='NotionDatabase') @@ -42,7 +43,7 @@ class NotionConfigMeta: self.transformers.update(transformers_config) -class NotionDatabaseMeta(type(BaseModel)): +class NotionDatabaseMeta(type(BaseModelSdk)): "Metaclass que processa a classe e injeta funcionalidades do Notion" @@ -81,7 +82,7 @@ class NotionDatabaseMeta(type(BaseModel)): return cls -class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta): +class NotionDatabase(BaseModelSdk, metaclass = NotionDatabaseMeta): """ Classe base para schemas de databases do Notion. @@ -164,7 +165,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta): return cls(**result) @classmethod - def get_database_id(cls) -> str: + def id(cls) -> str: "Retorna o nome da database no Notion" @@ -174,7 +175,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta): return cls.__name__ @classmethod - def get_notion_field_name(cls, + def field_name(cls, python_field : str ) -> Optional[str]: @@ -186,7 +187,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta): return None @classmethod - def get_all_mappings(cls) -> Dict[str, str]: + def mappings(cls) -> Dict[str, str]: "Retorna todos os mappings field_python -> field_notion" diff --git a/notion/orm/mapping/registry.py b/notion/orm/mapping/registry.py index 923a118..7e0728b 100755 --- a/notion/orm/mapping/registry.py +++ b/notion/orm/mapping/registry.py @@ -17,9 +17,19 @@ class DatabaseRegistry: "Registra uma database no registry" - db_name = database_class.get_database_id() + db_name = database_class.id() cls._databases[db_name] = database_class - + + @classmethod + def auto_register(cls, + *database_classes : Type[_NotionDatabase] + ) -> None: + + "Registra múltiplas databases de uma vez" + + for db_class in database_classes: + cls.register(db_class) + @classmethod def get(cls, database_id : str @@ -62,16 +72,6 @@ class DatabaseRegistry: return list(cls._databases.keys()) - @classmethod - def auto_register(cls, - *database_classes : Type[_NotionDatabase] - ) -> None: - - "Registra múltiplas databases de uma vez" - - for db_class in database_classes: - cls.register(db_class) - @classmethod def generate_literal_type(cls) -> str: diff --git a/notion/orm/repositories/__init__.py b/notion/orm/repositories/__init__.py index 6846f7e..47461d7 100755 --- a/notion/orm/repositories/__init__.py +++ b/notion/orm/repositories/__init__.py @@ -12,8 +12,8 @@ class DatabasesRepo(Generic[TContainer]): @staticmethod def generic(database_id : str): - from .databases import Database - return Database.generic(database_id) + from .databases import DatabaseClient + return DatabaseClient.generic(database_id) class _Repositories(Generic[TContainer]): diff --git a/notion/orm/repositories/databases/__init__.py b/notion/orm/repositories/databases/__init__.py index 48fe71f..60142aa 100755 --- a/notion/orm/repositories/databases/__init__.py +++ b/notion/orm/repositories/databases/__init__.py @@ -7,8 +7,8 @@ from .SearchPageProperty import SearchPageProperty as _SearchPageProperty TDB = TypeVar('TDB', bound = _NotionDatabase) -class Database(Generic[TDB]): - +class DatabaseClient(Generic[TDB]): + def __init__(self, database_id : str, generic_response : bool = False @@ -45,13 +45,13 @@ class Database(Generic[TDB]): ) @staticmethod - def generic(database_id : str) -> 'Database[_NotionDatabase]': + def generic(database_id : str) -> 'DatabaseClient[_NotionDatabase]': "Acessa database sem schema definido" - return Database( + return DatabaseClient( database_id = database_id, generic_response = True ) -__all__ = ["Database"] \ No newline at end of file +__all__ = ["DatabaseClient"] \ No newline at end of file diff --git a/notion/schemas/orm/database/DatabasesContainer.py b/notion/schemas/orm/database/DatabasesContainer.py index e8c65a1..2ba3996 100755 --- a/notion/schemas/orm/database/DatabasesContainer.py +++ b/notion/schemas/orm/database/DatabasesContainer.py @@ -1,3 +1,3 @@ class DatabasesContainer: - + "Classe base para criação de Container de Databases Notion" pass \ No newline at end of file diff --git a/notion/types/orm/__init__.py b/notion/types/orm/__init__.py index 9eb1595..e69de29 100755 --- a/notion/types/orm/__init__.py +++ b/notion/types/orm/__init__.py @@ -1,3 +0,0 @@ -from ...orm.mapping.database import NotionDatabase -from ...orm.mapping.registry import DatabaseRegistry -from ...schemas.orm.database.DatabasesContainer import DatabasesContainer \ No newline at end of file diff --git a/notion/types/orm/databases/__init__.py b/notion/types/orm/databases/__init__.py new file mode 100755 index 0000000..79b32df --- /dev/null +++ b/notion/types/orm/databases/__init__.py @@ -0,0 +1,4 @@ +from ....orm.mapping.database import NotionDatabase as NotionDatabase +from ....orm.mapping.registry import DatabaseRegistry as Registry +from ....schemas.orm.database.DatabasesContainer import DatabasesContainer as Container +from ....orm.repositories.databases import DatabaseClient as Client diff --git a/pyproject.toml b/pyproject.toml index 525d8b8..d780181 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,9 @@ requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" +[tool.setuptools] +packages = ["notion"] + [project] name = "sdk-notion" version = "0.1.0" @@ -19,4 +22,4 @@ dependencies = [ [project.urls] Homepage = "https://github.com/riguettodev/sdk-notion" -Repository = "https://git.kralot.cloud/Kralot/sdk-notion" +Repository = "https://github.com/riguettodev/sdk-notion"