maleo-database 0.0.9__py3-none-any.whl → 0.0.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,7 @@ from .pooling import (
33
33
  )
34
34
 
35
35
 
36
- class BaseDatabaseConfig(
36
+ class BaseConfig(
37
37
  BaseModel, Generic[ConnectionConfigT, PoolingConfigT, AdditionalConfigT]
38
38
  ):
39
39
  """Base configuration for database."""
@@ -44,8 +44,8 @@ class BaseDatabaseConfig(
44
44
  additional: AdditionalConfigT = Field(..., description="Additional config")
45
45
 
46
46
 
47
- class MySQLDatabaseConfig(
48
- BaseDatabaseConfig[
47
+ class MySQLConfig(
48
+ BaseConfig[
49
49
  MySQLConnectionConfig,
50
50
  MySQLPoolingConfig,
51
51
  None,
@@ -72,8 +72,8 @@ class MySQLDatabaseConfig(
72
72
  return create_sync_engine(url, **self.engine_kwargs)
73
73
 
74
74
 
75
- class PostgreSQLDatabaseConfig(
76
- BaseDatabaseConfig[
75
+ class PostgreSQLConfig(
76
+ BaseConfig[
77
77
  PostgreSQLConnectionConfig,
78
78
  PostgreSQLPoolingConfig,
79
79
  None,
@@ -100,8 +100,8 @@ class PostgreSQLDatabaseConfig(
100
100
  return create_sync_engine(url, **self.engine_kwargs)
101
101
 
102
102
 
103
- class SQLiteDatabaseConfig(
104
- BaseDatabaseConfig[
103
+ class SQLiteConfig(
104
+ BaseConfig[
105
105
  SQLiteConnectionConfig,
106
106
  SQLitePoolingConfig,
107
107
  None,
@@ -128,8 +128,8 @@ class SQLiteDatabaseConfig(
128
128
  return create_sync_engine(url, **self.engine_kwargs)
129
129
 
130
130
 
131
- class SQLServerDatabaseConfig(
132
- BaseDatabaseConfig[
131
+ class SQLServerConfig(
132
+ BaseConfig[
133
133
  SQLServerConnectionConfig,
134
134
  SQLServerPoolingConfig,
135
135
  None,
@@ -158,15 +158,15 @@ class SQLServerDatabaseConfig(
158
158
 
159
159
  SQLConfigT = TypeVar(
160
160
  "SQLConfigT",
161
- PostgreSQLDatabaseConfig,
162
- MySQLDatabaseConfig,
163
- SQLiteDatabaseConfig,
164
- SQLServerDatabaseConfig,
161
+ PostgreSQLConfig,
162
+ MySQLConfig,
163
+ SQLiteConfig,
164
+ SQLServerConfig,
165
165
  )
166
166
 
167
167
 
168
- class ElasticsearchDatabaseConfig(
169
- BaseDatabaseConfig[
168
+ class ElasticsearchConfig(
169
+ BaseConfig[
170
170
  ElasticsearchConnectionConfig,
171
171
  ElasticsearchPoolingConfig,
172
172
  None,
@@ -204,8 +204,8 @@ class ElasticsearchDatabaseConfig(
204
204
  return Elasticsearch(hosts, **self.client_kwargs)
205
205
 
206
206
 
207
- class MongoDBDatabaseConfig(
208
- BaseDatabaseConfig[
207
+ class MongoDBConfig(
208
+ BaseConfig[
209
209
  MongoDBConnectionConfig,
210
210
  MongoDBPoolingConfig,
211
211
  None,
@@ -233,8 +233,8 @@ class MongoDBDatabaseConfig(
233
233
  return MongoClient(url, **self.client_kwargs)
234
234
 
235
235
 
236
- class RedisDatabaseConfig(
237
- BaseDatabaseConfig[
236
+ class RedisConfig(
237
+ BaseConfig[
238
238
  RedisConnectionConfig,
239
239
  RedisPoolingConfig,
240
240
  RedisAdditionalConfig,
@@ -260,19 +260,31 @@ class RedisDatabaseConfig(
260
260
 
261
261
  NoSQLConfigT = TypeVar(
262
262
  "NoSQLConfigT",
263
- ElasticsearchDatabaseConfig,
264
- MongoDBDatabaseConfig,
265
- RedisDatabaseConfig,
263
+ ElasticsearchConfig,
264
+ MongoDBConfig,
265
+ RedisConfig,
266
266
  )
267
267
 
268
268
 
269
- ConfigT = TypeVar(
270
- "ConfigT",
271
- PostgreSQLDatabaseConfig,
272
- MySQLDatabaseConfig,
273
- SQLiteDatabaseConfig,
274
- SQLServerDatabaseConfig,
275
- MongoDBDatabaseConfig,
276
- RedisDatabaseConfig,
277
- ElasticsearchDatabaseConfig,
269
+ DatabaseConfigT = TypeVar(
270
+ "DatabaseConfigT",
271
+ PostgreSQLConfig,
272
+ MySQLConfig,
273
+ SQLiteConfig,
274
+ SQLServerConfig,
275
+ MongoDBConfig,
276
+ RedisConfig,
277
+ ElasticsearchConfig,
278
278
  )
279
+
280
+
281
+ # * This class is left empty to be overridden in the future when defining configuration
282
+ class Config(BaseModel):
283
+ pass
284
+
285
+
286
+ ConfigT = TypeVar("ConfigT", bound=Config)
287
+
288
+
289
+ class ConfigMixin(BaseModel, Generic[ConfigT]):
290
+ database: ConfigT = Field(..., description="Databases config")
@@ -3,21 +3,7 @@ from typing import Optional, TypeVar, Union
3
3
  from maleo.enums.cache import Origin, Layer
4
4
  from maleo.enums.expiration import Expiration
5
5
  from maleo.types.base.string import OptionalString
6
-
7
-
8
- class RedisCacheNamespaces(BaseModel):
9
- base: str = Field(..., description="Base Redis's namespace")
10
-
11
- def create(
12
- self,
13
- *ext: str,
14
- origin: Origin,
15
- layer: Layer,
16
- base_override: OptionalString = None,
17
- ) -> str:
18
- return ":".join(
19
- [self.base if base_override is None else base_override, origin, layer, *ext]
20
- )
6
+ from maleo.utils.cache import build_namespace as build_namespace_utils
21
7
 
22
8
 
23
9
  class BaseAdditionalConfig(BaseModel):
@@ -31,6 +17,18 @@ class RedisAdditionalConfig(BaseAdditionalConfig):
31
17
  ttl: Union[float, int] = Field(
32
18
  Expiration.EXP_15MN.value, description="Time to live"
33
19
  )
34
- namespaces: RedisCacheNamespaces = Field(
35
- ..., description="Redis cache's namepsaces"
36
- )
20
+ base_namespace: str = Field(..., description="Base namespace")
21
+
22
+ def build_namespace(
23
+ self,
24
+ *ext: str,
25
+ base: OptionalString = None,
26
+ client: OptionalString = None,
27
+ origin: Origin,
28
+ layer: Layer,
29
+ sep: str = ":",
30
+ ) -> str:
31
+ base = base or self.base_namespace
32
+ return build_namespace_utils(
33
+ *ext, base=base, client=client, origin=origin, layer=layer, sep=sep
34
+ )
@@ -31,14 +31,14 @@ from maleo.schemas.operation.system import (
31
31
  from maleo.schemas.response import NoDataResponse
32
32
  from maleo.types.base.uuid import OptionalUUID
33
33
  from ..config import (
34
- MySQLDatabaseConfig,
35
- PostgreSQLDatabaseConfig,
36
- SQLiteDatabaseConfig,
37
- SQLServerDatabaseConfig,
34
+ MySQLConfig,
35
+ PostgreSQLConfig,
36
+ SQLiteConfig,
37
+ SQLServerConfig,
38
38
  SQLConfigT,
39
- ElasticsearchDatabaseConfig,
40
- MongoDBDatabaseConfig,
41
- RedisDatabaseConfig,
39
+ ElasticsearchConfig,
40
+ MongoDBConfig,
41
+ RedisConfig,
42
42
  NoSQLConfigT,
43
43
  ConfigT,
44
44
  )
@@ -251,19 +251,19 @@ class SQLDatabaseManager(DatabaseManager[SQLConfigT], Generic[SQLConfigT]):
251
251
  await self._engine_manager.dispose()
252
252
 
253
253
 
254
- class MySQLDatabaseManager(SQLDatabaseManager[MySQLDatabaseConfig]):
254
+ class MySQLDatabaseManager(SQLDatabaseManager[MySQLConfig]):
255
255
  pass
256
256
 
257
257
 
258
- class PostgreSQLDatabaseManager(SQLDatabaseManager[PostgreSQLDatabaseConfig]):
258
+ class PostgreSQLDatabaseManager(SQLDatabaseManager[PostgreSQLConfig]):
259
259
  pass
260
260
 
261
261
 
262
- class SQLiteDatabaseManager(SQLDatabaseManager[SQLiteDatabaseConfig]):
262
+ class SQLiteDatabaseManager(SQLDatabaseManager[SQLiteConfig]):
263
263
  pass
264
264
 
265
265
 
266
- class SQLServerDatabaseManager(SQLDatabaseManager[SQLServerDatabaseConfig]):
266
+ class SQLServerDatabaseManager(SQLDatabaseManager[SQLServerConfig]):
267
267
  pass
268
268
 
269
269
 
@@ -361,20 +361,18 @@ class NoSQLDatabaseManager(
361
361
 
362
362
 
363
363
  class ElasticsearchDatabaseManager(
364
- NoSQLDatabaseManager[ElasticsearchDatabaseConfig, AsyncElasticsearch, Elasticsearch]
364
+ NoSQLDatabaseManager[ElasticsearchConfig, AsyncElasticsearch, Elasticsearch]
365
365
  ):
366
366
  pass
367
367
 
368
368
 
369
369
  class MongoDBDatabaseManager(
370
- NoSQLDatabaseManager[MongoDBDatabaseConfig, AsyncIOMotorClient, MongoClient]
370
+ NoSQLDatabaseManager[MongoDBConfig, AsyncIOMotorClient, MongoClient]
371
371
  ):
372
372
  pass
373
373
 
374
374
 
375
- class RedisDatabaseManager(
376
- NoSQLDatabaseManager[RedisDatabaseConfig, AsyncRedis, SyncRedis]
377
- ):
375
+ class RedisDatabaseManager(NoSQLDatabaseManager[RedisConfig, AsyncRedis, SyncRedis]):
378
376
  pass
379
377
 
380
378
 
@@ -3,11 +3,12 @@ from motor.motor_asyncio import AsyncIOMotorClient
3
3
  from pymongo import MongoClient
4
4
  from redis.asyncio import Redis as AsyncRedis
5
5
  from redis import Redis as SyncRedis
6
- from typing import Generic, Literal, Tuple, TypeVar, Union, overload
6
+ from typing import Generic, Literal, Optional, Tuple, TypeVar, Union, overload
7
+ from maleo.types.base.string import ListOfStrings
7
8
  from ..config import (
8
- ElasticsearchDatabaseConfig,
9
- MongoDBDatabaseConfig,
10
- RedisDatabaseConfig,
9
+ ElasticsearchConfig,
10
+ MongoDBConfig,
11
+ RedisConfig,
11
12
  NoSQLConfigT,
12
13
  )
13
14
  from ..enums import Connection
@@ -59,19 +60,39 @@ class ClientManager(
59
60
 
60
61
 
61
62
  class ElasticsearchClientManager(
62
- ClientManager[ElasticsearchDatabaseConfig, AsyncElasticsearch, Elasticsearch]
63
+ ClientManager[ElasticsearchConfig, AsyncElasticsearch, Elasticsearch]
63
64
  ):
64
65
  pass
65
66
 
66
67
 
67
68
  class MongoDBClientManager(
68
- ClientManager[MongoDBDatabaseConfig, AsyncIOMotorClient, MongoClient]
69
+ ClientManager[MongoDBConfig, AsyncIOMotorClient, MongoClient]
69
70
  ):
70
71
  pass
71
72
 
72
73
 
73
- class RedisClientManager(ClientManager[RedisDatabaseConfig, AsyncRedis, SyncRedis]):
74
- pass
74
+ class RedisClientManager(ClientManager[RedisConfig, AsyncRedis, SyncRedis]):
75
+ async def async_clear(self, prefixes: Optional[Union[ListOfStrings, str]] = None):
76
+ if prefixes is None:
77
+ prefixes = [self._config.additional.base_namespace]
78
+
79
+ if isinstance(prefixes, str):
80
+ prefixes = [prefixes]
81
+
82
+ for prefix in prefixes:
83
+ async for key in self._async_client.scan_iter(f"{prefix}*"):
84
+ await self._async_client.delete(key)
85
+
86
+ def sync_clear(self, prefixes: Optional[Union[ListOfStrings, str]] = None):
87
+ if prefixes is None:
88
+ prefixes = [self._config.additional.base_namespace]
89
+
90
+ if isinstance(prefixes, str):
91
+ prefixes = [prefixes]
92
+
93
+ for prefix in prefixes:
94
+ for key in self._sync_client.scan_iter(f"{prefix}*"):
95
+ self._sync_client.delete(key)
75
96
 
76
97
 
77
98
  ClientManagerT = TypeVar(
@@ -2,10 +2,10 @@ from sqlalchemy.engine import Engine
2
2
  from sqlalchemy.ext.asyncio import AsyncEngine
3
3
  from typing import Generic, Literal, Tuple, TypeVar, Union, overload
4
4
  from ..config import (
5
- MySQLDatabaseConfig,
6
- PostgreSQLDatabaseConfig,
7
- SQLiteDatabaseConfig,
8
- SQLServerDatabaseConfig,
5
+ MySQLConfig,
6
+ PostgreSQLConfig,
7
+ SQLiteConfig,
8
+ SQLServerConfig,
9
9
  SQLConfigT,
10
10
  )
11
11
  from ..enums import Connection
@@ -39,19 +39,19 @@ class EngineManager(Generic[SQLConfigT]):
39
39
  self._sync_engine.dispose()
40
40
 
41
41
 
42
- class MySQLEngineManager(EngineManager[MySQLDatabaseConfig]):
42
+ class MySQLEngineManager(EngineManager[MySQLConfig]):
43
43
  pass
44
44
 
45
45
 
46
- class PostgreSQLEngineManager(EngineManager[PostgreSQLDatabaseConfig]):
46
+ class PostgreSQLEngineManager(EngineManager[PostgreSQLConfig]):
47
47
  pass
48
48
 
49
49
 
50
- class SQLiteEngineManager(EngineManager[SQLiteDatabaseConfig]):
50
+ class SQLiteEngineManager(EngineManager[SQLiteConfig]):
51
51
  pass
52
52
 
53
53
 
54
- class SQLServerEngineManager(EngineManager[SQLServerDatabaseConfig]):
54
+ class SQLServerEngineManager(EngineManager[SQLServerConfig]):
55
55
  pass
56
56
 
57
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maleo-database
3
- Version: 0.0.9
3
+ Version: 0.0.11
4
4
  Summary: Database package for MaleoSuite
5
5
  Author-email: Agra Bima Yuda <agra@nexmedis.com>
6
6
  License: Proprietary
@@ -44,16 +44,16 @@ Requires-Dist: identify>=2.6.13
44
44
  Requires-Dist: idna>=3.10
45
45
  Requires-Dist: importlib_metadata>=8.7.0
46
46
  Requires-Dist: maleo-constants>=0.0.6
47
- Requires-Dist: maleo-dtos>=0.0.13
47
+ Requires-Dist: maleo-dtos>=0.0.16
48
48
  Requires-Dist: maleo-enums>=0.0.6
49
- Requires-Dist: maleo-exceptions>=0.0.15
50
- Requires-Dist: maleo-logging>=0.0.6
49
+ Requires-Dist: maleo-exceptions>=0.0.17
50
+ Requires-Dist: maleo-logging>=0.0.7
51
51
  Requires-Dist: maleo-mixins>=0.0.13
52
- Requires-Dist: maleo-schemas>=0.0.17
52
+ Requires-Dist: maleo-schemas>=0.0.19
53
53
  Requires-Dist: maleo-types-base>=0.0.2
54
54
  Requires-Dist: maleo-types-controllers>=0.0.1
55
55
  Requires-Dist: maleo-types-enums>=0.0.4
56
- Requires-Dist: maleo-utils>=0.0.4
56
+ Requires-Dist: maleo-utils>=0.0.5
57
57
  Requires-Dist: motor>=3.7.1
58
58
  Requires-Dist: mypy_extensions>=1.1.0
59
59
  Requires-Dist: nodeenv>=1.9.1
@@ -1,14 +1,14 @@
1
1
  maleo/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  maleo/database/dtos.py,sha256=DArPtSXzPJd896i-t4OmoqBP1mW-it8NVxvfWq7wq8Y,220
3
3
  maleo/database/enums.py,sha256=vUPlePELTC30el9rUglQpc7ZYBVMKp3SiRHCZre9oQE,1693
4
- maleo/database/config/__init__.py,sha256=6OK2FPbBiZdaEqhQ_Uu8g3h0jfwOvtwjoU8jZVdR70c,8607
5
- maleo/database/config/additional.py,sha256=kCamg5Z_FfbZBq_06QwGOjee8wOrL1wTIVlO60xNqWU,1060
4
+ maleo/database/config/__init__.py,sha256=4ReeRmScxTgZ2622oJXhPBAzlDUJKrAYxCoX08T-OhQ,8677
5
+ maleo/database/config/additional.py,sha256=8uTEQDoKjAlXif-1njKuicIT07H_slTWr9pE0OENAU0,1098
6
6
  maleo/database/config/connection.py,sha256=oMHIaom9PsGW0BpXW90bhuoFLNPsgQU4Fb8BateYjR4,22903
7
7
  maleo/database/config/identifier.py,sha256=b1MjhoKl3h7xJe1eVIj1wjvYH9BrjHzKnjzdjaEaTeQ,626
8
8
  maleo/database/config/pooling.py,sha256=Ms_7HjTrYathov2ef91L2rL7Ldgpr1p-7Fqg-1hv7m4,11556
9
- maleo/database/managers/__init__.py,sha256=-rGAmqpPoNLaWeW7jEnINl7Dh3SbSu79PFNeifTvdHI,13710
10
- maleo/database/managers/client.py,sha256=7C3PvOmWVvKJJdC81XK7q9pL9ZnvE02LRET46TR3Ojo,2272
11
- maleo/database/managers/engine.py,sha256=OYXxDhldbSevXDqod9joqXWaYgQ-NgF4YKPfUR5o9rM,1789
9
+ maleo/database/managers/__init__.py,sha256=8gXorOSWy8YxCWj3rS0PETvmcfMS4N-8ugeGLFElHr4,13592
10
+ maleo/database/managers/client.py,sha256=uUnXyOvm3X9V6vz1H8dR78cOpgM8DkZNaQC2aKAc2Sw,3079
11
+ maleo/database/managers/engine.py,sha256=aF7JCjSYujodbn2QQrT_OeLX-WjUdIv5cBgWtvLgHI0,1725
12
12
  maleo/database/managers/session.py,sha256=QCyw1Um0xTmEGCHxX3kQ6z7Q_L2TT8Eq3_8NcpKIsxE,19000
13
13
  maleo/database/orm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  maleo/database/orm/base.py,sha256=qdRK_TQqDoZ1hANvm1mJDiblqFr77J1IhBnlENr7RK8,229
@@ -19,8 +19,8 @@ maleo/database/orm/models/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
19
19
  maleo/database/orm/models/mixins/identifier.py,sha256=jICVsLUFw_f7TV_aX4KTTs_ycH35MRtRj5boTqctmZo,425
20
20
  maleo/database/orm/models/mixins/status.py,sha256=Jzithn-Hl2ct1AqboGZSXrA35aaQEDvqtaB8oL7KIyo,376
21
21
  maleo/database/orm/models/mixins/timestamp.py,sha256=TWqBTBvgSxcPsK0m7ggVrkHqzlqCM-2Zox7TAwCxd0I,1500
22
- maleo_database-0.0.9.dist-info/licenses/LICENSE,sha256=aftGsecnk7TWVX-7KW94FqK4Syy6YSZ8PZEF7EcIp3M,2621
23
- maleo_database-0.0.9.dist-info/METADATA,sha256=Q4z2ym27XApDkrDUBtG14dcIDYyunJYe1qVbm1FKZh8,3836
24
- maleo_database-0.0.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
- maleo_database-0.0.9.dist-info/top_level.txt,sha256=3Tpd1siVsfYoeI9FEOJNYnffx_shzZ3wsPpTvz5bljc,6
26
- maleo_database-0.0.9.dist-info/RECORD,,
22
+ maleo_database-0.0.11.dist-info/licenses/LICENSE,sha256=aftGsecnk7TWVX-7KW94FqK4Syy6YSZ8PZEF7EcIp3M,2621
23
+ maleo_database-0.0.11.dist-info/METADATA,sha256=GXvfEMFO40BEclJarNFIoIRjyHhfGBN63z3rPkjxsoc,3837
24
+ maleo_database-0.0.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
+ maleo_database-0.0.11.dist-info/top_level.txt,sha256=3Tpd1siVsfYoeI9FEOJNYnffx_shzZ3wsPpTvz5bljc,6
26
+ maleo_database-0.0.11.dist-info/RECORD,,