From 91e5577cb230740cb8315f87f17f16472996d4e5 Mon Sep 17 00:00:00 2001 From: trisongz <4735784+trisongz@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:33:07 -0600 Subject: [PATCH] stage changes --- lazyops/libs/abcs/configs/ctx.py | 1 + lazyops/libs/abcs/sql/database/base.py | 16 ++++++------ lazyops/libs/abcs/sql/database/types.py | 33 +++++++++++++++++++------ lazyops/version.py | 2 +- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/lazyops/libs/abcs/configs/ctx.py b/lazyops/libs/abcs/configs/ctx.py index b484113..2bc917d 100644 --- a/lazyops/libs/abcs/configs/ctx.py +++ b/lazyops/libs/abcs/configs/ctx.py @@ -272,6 +272,7 @@ def get_app_default_file( configs_path = configs_path or self.config_path defaults_path = configs_path.joinpath('defaults') suffix = suffix or 'json' + suffix = suffix.lstrip('.') if name is not None: if defaults_path.joinpath(f'{name}-{app_env.name}.{suffix}').exists(): return defaults_path.joinpath(f'{name}-{app_env.name}.{suffix}') diff --git a/lazyops/libs/abcs/sql/database/base.py b/lazyops/libs/abcs/sql/database/base.py index 066fb0e..33aaac6 100644 --- a/lazyops/libs/abcs/sql/database/base.py +++ b/lazyops/libs/abcs/sql/database/base.py @@ -47,7 +47,7 @@ class PostgresConfig(BaseModel): superuser_url: Optional[PostgresDsn] = None engine_poolclass: Optional[Union[Type[Union[NullPool, AsyncAdaptedQueuePool]], str]] = 'sqlalchemy.pool.AsyncAdaptedQueuePool' - engine_json_serializer: Optional[Union[Type[Callable], str]] = 'json' + engine_json_serializer: Optional[Union[Callable, str]] = 'json' engine_kwargs: Optional[Dict[str, Any]] = Field(default_factory = dict) engine_rw_kwargs: Optional[Dict[str, Any]] = Field(default_factory = dict) @@ -170,6 +170,7 @@ def get_engine_kwargs(self, readonly: Optional[bool] = False, verbose: Optional[ kwargs['json_serializer'] = self.engine_json_serializer if self.engine_poolclass: kwargs['poolclass'] = self.engine_poolclass + # logger.info(kwargs, prefix = 'Engine KWargs') return kwargs def get_session_kwargs(self, readonly: Optional[bool] = False, **session_kwargs) -> Dict[str, Any]: @@ -183,6 +184,7 @@ def get_session_kwargs(self, readonly: Optional[bool] = False, **session_kwargs) if readonly else update_dict(kwargs, self.session_rw_kwargs) ) + # logger.info(kwargs, prefix = 'Session KWargs') return kwargs @@ -296,13 +298,13 @@ def sql_template(self) -> 'SQLTemplates': """ Returns the SQL Templates """ - if not self._sql: + if not self._sql_template: from .templates import SQLTemplates - self._sql = SQLTemplates( + self._sql_template = SQLTemplates( settings = self.settings, **self._sql_template_kwargs ) - return self._sql + return self._sql_template @property def settings(self) -> 'AppSettings': @@ -312,7 +314,7 @@ def settings(self) -> 'AppSettings': # assert self._settings, 'The settings must be set' if self._settings is None: from lazyops.libs.abcs.configs.lazy import get_module_settings - self._settings = get_module_settings(self.__module__.__name__) + self._settings = get_module_settings(self.__module__) return self._settings def is_verbose_for(self, method: str) -> bool: @@ -367,7 +369,7 @@ def session_rw(self) -> async_sessionmaker[AsyncSession]: class_ = AsyncSession, **self.config.get_session_kwargs( readonly = False, - verbose = self.is_verbose_for('postgres_url'), + # verbose = self.is_verbose_for('postgres_url'), **self._kwargs ) ) @@ -383,7 +385,7 @@ def session_ro(self) -> async_sessionmaker[AsyncSession]: self._session_ro = async_sessionmaker( self.engine_ro, class_ = AsyncSession, **self.config.get_session_kwargs( readonly = True, - verbose = self.is_verbose_for('postgres_readonly_warning'), + # verbose = self.is_verbose_for('postgres_readonly_warning'), **self._kwargs ) ) diff --git a/lazyops/libs/abcs/sql/database/types.py b/lazyops/libs/abcs/sql/database/types.py index 78a0af7..84d68bc 100644 --- a/lazyops/libs/abcs/sql/database/types.py +++ b/lazyops/libs/abcs/sql/database/types.py @@ -271,11 +271,19 @@ def __init__( * `auto_commit`: Whether or not to auto commit (True by default. Use False to allow for batch operations) """ self.model = model - self.schema = schema + self.defer_attrs = defer_attrs or [] self.auto_commit = auto_commit + self._schema = schema self._logger: Optional['Logger'] = None self._kwargs = kwargs + self._post_init(**kwargs) + + def _post_init(self, **kwargs): + """ + Post-Init + """ + pass @property @@ -454,6 +462,17 @@ async def get_count( Create Operations """ + def prepare_encoded_object( + self, + obj_in: SourceSchemaType, + method: str, + **kwargs, + ) -> Dict[str, Any]: + """ + Encodes the object + """ + return jsonable_encoder(obj_in, **kwargs) + async def create( self, db: AsyncSession, @@ -463,7 +482,7 @@ async def create( """ Creates an object """ - obj_in_data = jsonable_encoder(obj_in) + obj_in_data = self.prepare_encoded_object(obj_in, method = 'create') db_obj = self.model(**obj_in_data) # type: ignore if hasattr(db_obj, 'created_at'): db_obj.created_at = datetime.datetime.now(datetime.timezone.utc) @@ -485,7 +504,7 @@ async def create_if_not_exists( """ Creates an object if it does not exist """ - values = jsonable_encoder(obj_in, exclude = exclude_attrs, **kwargs) + values = self.prepare_encoded_object(obj_in, method = 'create_if_not_exists', exclude = exclude_attrs, **kwargs) stmt = insert(self.model).values( **values ).on_conflict_do_nothing( @@ -511,7 +530,7 @@ async def upsert( Upserts an object """ index_elements = index_elements or ['id'] - values = jsonable_encoder(obj_in, exclude = exclude_attrs, **kwargs) + values = self.prepare_encoded_object(obj_in, method = 'upsert', exclude = exclude_attrs, **kwargs) stmt = insert(self.model).values( **values ).on_conflict_do_update( @@ -523,7 +542,7 @@ async def upsert( await db.commit() - async def upsert_multi( + async def upsert_many( self, db: AsyncSession, *, @@ -547,10 +566,10 @@ async def upsert_bulk( Upserts multiple objects """ for i in range(0, len(objs_in), batch_size): - await self.upsert_multi(db, objs_in = objs_in[i:i+batch_size]) + await self.upsert_many(db, objs_in = objs_in[i:i+batch_size]) - async def upsert_multi_with_idx( + async def upsert_many_with_idx( self, db: AsyncSession, *, diff --git a/lazyops/version.py b/lazyops/version.py index a2a6a54..4736bc6 100644 --- a/lazyops/version.py +++ b/lazyops/version.py @@ -1 +1 @@ -VERSION = '0.2.74' +VERSION = '0.2.75'