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"