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:
@@ -2,6 +2,7 @@ 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 .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
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from .config import ORMConfig as _config
|
||||
from .common import Common as _common
|
||||
from .parsers import Parser as _parser
|
||||
from .mapping import Mapping as _mapping
|
||||
@@ -6,6 +7,7 @@ from .repositories import repo as _repositories
|
||||
class _NotionOrm:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.config = _config
|
||||
self.common = _common
|
||||
self.parser = _parser
|
||||
self.mapping = _mapping
|
||||
|
||||
@@ -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:
|
||||
|
||||
Executable
+27
@@ -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"]
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -1,3 +0,0 @@
|
||||
from ...orm.mapping.database import NotionDatabase
|
||||
from ...orm.mapping.registry import DatabaseRegistry
|
||||
from ...schemas.orm.database.DatabasesContainer import DatabasesContainer
|
||||
Executable
+4
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user