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:
+3
-1
@@ -2,7 +2,8 @@ from typing import Type, TypeVar, Generic, Union, Literal
|
|||||||
from .auth import headers as _headers
|
from .auth import headers as _headers
|
||||||
from .schemas.orm.database.DatabasesContainer import DatabasesContainer as _DatabasesContainer
|
from .schemas.orm.database.DatabasesContainer import DatabasesContainer as _DatabasesContainer
|
||||||
from .orm.repositories import _Repositories
|
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)
|
TContainer = TypeVar('TContainer', bound = _DatabasesContainer)
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ class Notion(Generic[TContainer]):
|
|||||||
_Client.configure(headers)
|
_Client.configure(headers)
|
||||||
self.client = _Client.get_instance()
|
self.client = _Client.get_instance()
|
||||||
|
|
||||||
|
ORMConfig.configure(timezone = timezone)
|
||||||
self.orm = _ORM(databases_container = orm_container)
|
self.orm = _ORM(databases_container = orm_container)
|
||||||
|
|
||||||
self.DatabasesContainer = _DatabasesContainer
|
self.DatabasesContainer = _DatabasesContainer
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
from .common import Common as _common
|
from .config import ORMConfig as _config
|
||||||
from .parsers import Parser as _parser
|
from .common import Common as _common
|
||||||
from .mapping import Mapping as _mapping
|
from .parsers import Parser as _parser
|
||||||
from .repositories import repo as _repositories
|
from .mapping import Mapping as _mapping
|
||||||
|
from .repositories import repo as _repositories
|
||||||
|
|
||||||
class _NotionOrm:
|
class _NotionOrm:
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
self.config = _config
|
||||||
self.common = _common
|
self.common = _common
|
||||||
self.parser = _parser
|
self.parser = _parser
|
||||||
self.mapping = _mapping
|
self.mapping = _mapping
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from typing import Dict, Any, Union, Optional, Literal, List, TYPE_CHECKING
|
from typing import Dict, Any, Union, Optional, Literal, List, TYPE_CHECKING
|
||||||
from datetime import datetime, date
|
from datetime import datetime, date
|
||||||
from pydantic import validate_call
|
from pydantic import validate_call
|
||||||
|
from ..config import ORMConfig
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..repositories.pages.CreatePage import CreatePage
|
from ..repositories.pages.CreatePage import CreatePage
|
||||||
@@ -43,8 +44,9 @@ class SetProperty:
|
|||||||
def start_date(self,
|
def start_date(self,
|
||||||
name : str,
|
name : str,
|
||||||
value : Optional[Union[date, datetime]],
|
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:
|
if value is None:
|
||||||
return self._CreatePage
|
return self._CreatePage
|
||||||
if type(value) == date:
|
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 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')
|
T = TypeVar('T', bound='NotionDatabase')
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ class NotionConfigMeta:
|
|||||||
|
|
||||||
self.transformers.update(transformers_config)
|
self.transformers.update(transformers_config)
|
||||||
|
|
||||||
class NotionDatabaseMeta(type(BaseModel)):
|
class NotionDatabaseMeta(type(BaseModelSdk)):
|
||||||
|
|
||||||
"Metaclass que processa a classe e injeta funcionalidades do Notion"
|
"Metaclass que processa a classe e injeta funcionalidades do Notion"
|
||||||
|
|
||||||
@@ -81,7 +82,7 @@ class NotionDatabaseMeta(type(BaseModel)):
|
|||||||
|
|
||||||
return cls
|
return cls
|
||||||
|
|
||||||
class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta):
|
class NotionDatabase(BaseModelSdk, metaclass = NotionDatabaseMeta):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Classe base para schemas de databases do Notion.
|
Classe base para schemas de databases do Notion.
|
||||||
@@ -164,7 +165,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta):
|
|||||||
return cls(**result)
|
return cls(**result)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_database_id(cls) -> str:
|
def id(cls) -> str:
|
||||||
|
|
||||||
"Retorna o nome da database no Notion"
|
"Retorna o nome da database no Notion"
|
||||||
|
|
||||||
@@ -174,7 +175,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta):
|
|||||||
return cls.__name__
|
return cls.__name__
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_notion_field_name(cls,
|
def field_name(cls,
|
||||||
python_field : str
|
python_field : str
|
||||||
) -> Optional[str]:
|
) -> Optional[str]:
|
||||||
|
|
||||||
@@ -186,7 +187,7 @@ class NotionDatabase(BaseModel, metaclass = NotionDatabaseMeta):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_all_mappings(cls) -> Dict[str, str]:
|
def mappings(cls) -> Dict[str, str]:
|
||||||
|
|
||||||
"Retorna todos os mappings field_python -> field_notion"
|
"Retorna todos os mappings field_python -> field_notion"
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,19 @@ class DatabaseRegistry:
|
|||||||
|
|
||||||
"Registra uma database no registry"
|
"Registra uma database no registry"
|
||||||
|
|
||||||
db_name = database_class.get_database_id()
|
db_name = database_class.id()
|
||||||
cls._databases[db_name] = database_class
|
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
|
@classmethod
|
||||||
def get(cls,
|
def get(cls,
|
||||||
database_id : str
|
database_id : str
|
||||||
@@ -62,16 +72,6 @@ class DatabaseRegistry:
|
|||||||
|
|
||||||
return list(cls._databases.keys())
|
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
|
@classmethod
|
||||||
def generate_literal_type(cls) -> str:
|
def generate_literal_type(cls) -> str:
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ class DatabasesRepo(Generic[TContainer]):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def generic(database_id : str):
|
def generic(database_id : str):
|
||||||
from .databases import Database
|
from .databases import DatabaseClient
|
||||||
return Database.generic(database_id)
|
return DatabaseClient.generic(database_id)
|
||||||
|
|
||||||
class _Repositories(Generic[TContainer]):
|
class _Repositories(Generic[TContainer]):
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ from .SearchPageProperty import SearchPageProperty as _SearchPageProperty
|
|||||||
|
|
||||||
TDB = TypeVar('TDB', bound = _NotionDatabase)
|
TDB = TypeVar('TDB', bound = _NotionDatabase)
|
||||||
|
|
||||||
class Database(Generic[TDB]):
|
class DatabaseClient(Generic[TDB]):
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
database_id : str,
|
database_id : str,
|
||||||
generic_response : bool = False
|
generic_response : bool = False
|
||||||
@@ -45,13 +45,13 @@ class Database(Generic[TDB]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def generic(database_id : str) -> 'Database[_NotionDatabase]':
|
def generic(database_id : str) -> 'DatabaseClient[_NotionDatabase]':
|
||||||
|
|
||||||
"Acessa database sem schema definido"
|
"Acessa database sem schema definido"
|
||||||
|
|
||||||
return Database(
|
return DatabaseClient(
|
||||||
database_id = database_id,
|
database_id = database_id,
|
||||||
generic_response = True
|
generic_response = True
|
||||||
)
|
)
|
||||||
|
|
||||||
__all__ = ["Database"]
|
__all__ = ["DatabaseClient"]
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
class DatabasesContainer:
|
class DatabasesContainer:
|
||||||
|
"Classe base para criação de Container de Databases Notion"
|
||||||
pass
|
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"]
|
requires = ["setuptools>=61.0"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[tool.setuptools]
|
||||||
|
packages = ["notion"]
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "sdk-notion"
|
name = "sdk-notion"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -19,4 +22,4 @@ dependencies = [
|
|||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/riguettodev/sdk-notion"
|
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