Melhorias gerais no projeto como alterações de imports, nomes, e criação de singleton para configuração extra do ORM via init geral como timezone

---

- 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;

---
This commit is contained in:
2026-01-21 22:15:36 -03:00
parent 9896f3fa3a
commit 0ecb6e3530
12 changed files with 74 additions and 36 deletions
+3 -1
View File
@@ -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
+6 -4
View File
@@ -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
+3 -1
View File
@@ -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:
+27
View File
@@ -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"]
+7 -6
View File
@@ -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"
+11 -11
View File
@@ -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:
+2 -2
View File
@@ -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]):
@@ -7,7 +7,7 @@ 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,
@@ -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"]
__all__ = ["DatabaseClient"]
@@ -1,3 +1,3 @@
class DatabasesContainer:
"Classe base para criação de Container de Databases Notion"
pass
-3
View File
@@ -1,3 +0,0 @@
from ...orm.mapping.database import NotionDatabase
from ...orm.mapping.registry import DatabaseRegistry
from ...schemas.orm.database.DatabasesContainer import DatabasesContainer
+4
View File
@@ -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
+4 -1
View File
@@ -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"