nlbone 0.1.2__py3-none-any.whl → 0.1.23__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.
Files changed (59) hide show
  1. nlbone/adapters/db/sqlalchemy/engine.py +118 -0
  2. {src/nlbone → nlbone}/config/settings.py +3 -3
  3. nlbone/interfaces/api/dependencies.py +16 -0
  4. {nlbone-0.1.2.dist-info → nlbone-0.1.23.dist-info}/METADATA +2 -1
  5. nlbone-0.1.23.dist-info/RECORD +57 -0
  6. nlbone-0.1.2.dist-info/RECORD +0 -56
  7. src/nlbone/utils/__init__.py +0 -0
  8. {src → nlbone}/__init__.py +0 -0
  9. {src/nlbone → nlbone/adapters}/__init__.py +0 -0
  10. {src/nlbone → nlbone}/adapters/auth/__init__.py +0 -0
  11. {src/nlbone → nlbone}/adapters/auth/keycloak.py +0 -0
  12. {src/nlbone/adapters → nlbone/adapters/db}/__init__.py +0 -0
  13. {src/nlbone → nlbone}/adapters/db/memory.py +0 -0
  14. {src/nlbone → nlbone}/adapters/db/postgres.py +0 -0
  15. {src/nlbone → nlbone}/adapters/db/query_builder.py +0 -0
  16. {src/nlbone → nlbone}/adapters/db/sqlalchemy/__init__.py +0 -0
  17. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/__init__.py +0 -0
  18. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/builder.py +0 -0
  19. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/coercion.py +0 -0
  20. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/filters.py +0 -0
  21. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/ordering.py +0 -0
  22. {src/nlbone → nlbone}/adapters/db/sqlalchemy/query/types.py +0 -0
  23. {src/nlbone/adapters/db → nlbone/adapters/http_clients}/__init__.py +0 -0
  24. {src/nlbone → nlbone}/adapters/http_clients/email_gateway.py +0 -0
  25. {src/nlbone/adapters/http_clients → nlbone/adapters/messaging}/__init__.py +0 -0
  26. {src/nlbone → nlbone}/adapters/messaging/redis.py +0 -0
  27. {src/nlbone/adapters/messaging → nlbone/config}/__init__.py +0 -0
  28. {src/nlbone → nlbone}/config/logging.py +0 -0
  29. {src/nlbone/config → nlbone/core}/__init__.py +0 -0
  30. {src/nlbone/core → nlbone/core/application}/__init__.py +0 -0
  31. {src/nlbone → nlbone}/core/application/services.py +0 -0
  32. {src/nlbone/core/application → nlbone/core/application/use_cases}/__init__.py +0 -0
  33. {src/nlbone → nlbone}/core/application/use_cases/register_user.py +0 -0
  34. {src/nlbone/core/application/use_cases → nlbone/core/domain}/__init__.py +0 -0
  35. {src/nlbone → nlbone}/core/domain/events.py +0 -0
  36. {src/nlbone → nlbone}/core/domain/models.py +0 -0
  37. {src/nlbone → nlbone}/core/ports/__init__.py +0 -0
  38. {src/nlbone → nlbone}/core/ports/auth.py +0 -0
  39. {src/nlbone → nlbone}/core/ports/messaging.py +0 -0
  40. {src/nlbone → nlbone}/core/ports/repo.py +0 -0
  41. {src/nlbone → nlbone}/core/{__init__.py} +0 -0
  42. {src/nlbone/core/domain → nlbone/di}/__init__.py +0 -0
  43. {src/nlbone → nlbone}/di/container.py +0 -0
  44. {src/nlbone/di → nlbone/interfaces}/__init__.py +0 -0
  45. {src/nlbone/interfaces → nlbone/interfaces/api}/__init__.py +0 -0
  46. {src/nlbone → nlbone}/interfaces/api/exceptions.py +0 -0
  47. {src/nlbone → nlbone}/interfaces/api/pagination/__init__.py +0 -0
  48. {src/nlbone → nlbone}/interfaces/api/pagination/offset_base.py +0 -0
  49. {src/nlbone → nlbone}/interfaces/api/routers.py +0 -0
  50. {src/nlbone → nlbone}/interfaces/api/schemas.py +0 -0
  51. {src/nlbone/interfaces/api → nlbone/interfaces/cli}/__init__.py +0 -0
  52. {src/nlbone → nlbone}/interfaces/cli/main.py +0 -0
  53. {src/nlbone/interfaces/cli → nlbone/interfaces/jobs}/__init__.py +0 -0
  54. {src/nlbone → nlbone}/interfaces/jobs/sync_tokens.py +0 -0
  55. {src/nlbone → nlbone}/types.py +0 -0
  56. {src/nlbone/interfaces/jobs → nlbone/utils}/__init__.py +0 -0
  57. {src/nlbone → nlbone}/utils/time.py +0 -0
  58. {nlbone-0.1.2.dist-info → nlbone-0.1.23.dist-info}/WHEEL +0 -0
  59. {nlbone-0.1.2.dist-info → nlbone-0.1.23.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,118 @@
1
+ from contextlib import asynccontextmanager, contextmanager
2
+ from typing import Generator, Optional, Any, AsyncGenerator
3
+
4
+ from sqlalchemy import create_engine, text
5
+ from sqlalchemy.engine import Engine
6
+ from sqlalchemy.orm import Session, sessionmaker
7
+
8
+ from sqlalchemy.ext.asyncio import (
9
+ AsyncEngine,
10
+ AsyncSession,
11
+ async_sessionmaker,
12
+ create_async_engine,
13
+ )
14
+
15
+ from nlbone.config.settings import get_settings
16
+
17
+ _settings = get_settings()
18
+
19
+ ASYNC_DSN: str = _settings.POSTGRES_DB_DSN
20
+
21
+ if "+asyncpg" in ASYNC_DSN:
22
+ SYNC_DSN: str = ASYNC_DSN.replace("+asyncpg", "+psycopg")
23
+ else:
24
+ SYNC_DSN = ASYNC_DSN
25
+
26
+ _async_engine: Optional[AsyncEngine] = None
27
+ _async_session_factory: Optional[async_sessionmaker[AsyncSession]] = None
28
+
29
+ _sync_engine: Optional[Engine] = None
30
+ _sync_session_factory: Optional[sessionmaker[Session]] = None
31
+
32
+
33
+ def init_async_engine(echo: Optional[bool] = None) -> AsyncEngine:
34
+ global _async_engine, _async_session_factory
35
+ if _async_engine is not None:
36
+ return _async_engine
37
+
38
+ _async_engine = create_async_engine(
39
+ ASYNC_DSN,
40
+ echo=_settings.DEBUG if echo is None else echo,
41
+ pool_pre_ping=True,
42
+ pool_size=5,
43
+ max_overflow=10,
44
+ )
45
+ _async_session_factory = async_sessionmaker(
46
+ bind=_async_engine,
47
+ expire_on_commit=False,
48
+ autoflush=False,
49
+ )
50
+ return _async_engine
51
+
52
+
53
+ @asynccontextmanager
54
+ async def async_session() -> AsyncGenerator[AsyncSession, Any]:
55
+ if _async_session_factory is None:
56
+ init_async_engine()
57
+ assert _async_session_factory is not None
58
+ session = _async_session_factory()
59
+ try:
60
+ yield session
61
+ await session.commit()
62
+ except Exception:
63
+ await session.rollback()
64
+ raise
65
+ finally:
66
+ await session.close()
67
+
68
+
69
+ async def async_ping() -> None:
70
+ eng = init_async_engine()
71
+ async with eng.connect() as conn:
72
+ await conn.execute(text("SELECT 1"))
73
+
74
+
75
+ def init_sync_engine(echo: Optional[bool] = None) -> Engine:
76
+ global _sync_engine, _sync_session_factory
77
+ if _sync_engine is not None:
78
+ return _sync_engine
79
+
80
+ _sync_engine = create_engine(
81
+ SYNC_DSN,
82
+ echo=_settings.DEBUG if echo is None else echo,
83
+ pool_pre_ping=True,
84
+ pool_size=5,
85
+ max_overflow=10,
86
+ future=True,
87
+ )
88
+ _sync_session_factory = sessionmaker(
89
+ bind=_sync_engine,
90
+ autocommit=False,
91
+ autoflush=False,
92
+ expire_on_commit=False,
93
+ future=True,
94
+ )
95
+ return _sync_engine
96
+
97
+
98
+ @contextmanager
99
+ def sync_session() -> Generator[Session, None, None]:
100
+ if _sync_session_factory is None:
101
+ init_sync_engine()
102
+ assert _sync_session_factory is not None
103
+ s = _sync_session_factory()
104
+ try:
105
+ yield s
106
+ s.commit()
107
+ except Exception:
108
+ s.rollback()
109
+ raise
110
+ finally:
111
+ s.close()
112
+
113
+
114
+ def sync_ping() -> None:
115
+ """Health check برای اتصال sync."""
116
+ eng = init_sync_engine()
117
+ with eng.connect() as conn:
118
+ conn.execute(text("SELECT 1"))
@@ -12,7 +12,7 @@ class Settings(BaseSettings):
12
12
  ENV: Literal["local", "dev", "staging", "prod"] = Field(default="local")
13
13
  DEBUG: bool = Field(default=False)
14
14
  LOG_LEVEL: Literal["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"] = Field(default="INFO")
15
- LOG_JSON: bool = Field(default=True) # اگر False باشد، فرمت متنی ساده می‌شود.
15
+ LOG_JSON: bool = Field(default=True)
16
16
 
17
17
  # ---------------------------
18
18
  # HTTP / Timeouts
@@ -30,10 +30,10 @@ class Settings(BaseSettings):
30
30
  # ---------------------------
31
31
  # Database
32
32
  # ---------------------------
33
- DB_DSN: str = Field(default="postgresql+asyncpg://user:pass@localhost:5432/nlbone")
33
+ POSTGRES_DB_DSN: str = Field(default="postgresql+asyncpg://user:pass@localhost:5432/nlbone")
34
34
 
35
35
  # ---------------------------
36
- # Messaging / Cache (نمونه)
36
+ # Messaging / Cache
37
37
  # ---------------------------
38
38
  REDIS_URL: str = Field(default="redis://localhost:6379/0")
39
39
 
@@ -0,0 +1,16 @@
1
+ from __future__ import annotations
2
+ from typing import AsyncGenerator, Generator
3
+
4
+ from sqlalchemy.orm import Session
5
+ from sqlalchemy.ext.asyncio import AsyncSession
6
+
7
+ from nlbone.adapters.db.sqlalchemy.engine import async_session, sync_session
8
+
9
+
10
+ async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
11
+ async with async_session() as s:
12
+ yield s
13
+
14
+ def get_session() -> Generator[Session, None, None]:
15
+ with sync_session() as s:
16
+ yield s
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.1.2
3
+ Version: 0.1.23
4
4
  Summary: Backbone package for interfaces and infrastructure in Python projects
5
5
  Author-email: Amir Hosein Kahkbazzadeh <a.khakbazzadeh@gmail.com>
6
6
  License: MIT
@@ -21,6 +21,7 @@ Requires-Dist: pre-commit>=3.7; extra == 'dev'
21
21
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
22
22
  Requires-Dist: pytest>=8.0; extra == 'dev'
23
23
  Requires-Dist: ruff>=0.5; extra == 'dev'
24
+ Requires-Dist: tomli; extra == 'dev'
24
25
  Requires-Dist: twine; extra == 'dev'
25
26
  Description-Content-Type: text/markdown
26
27
 
@@ -0,0 +1,57 @@
1
+ nlbone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ nlbone/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ nlbone/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nlbone/adapters/auth/__init__.py,sha256=Eh9kWjY1I8vi17gK0oOzBLJwJX_GFuUcJIN7cLU6lJg,41
5
+ nlbone/adapters/auth/keycloak.py,sha256=W5siUCFtOANDHZH9eDHsXIQ5cC6BDTk_Zv5mh3STSGo,2416
6
+ nlbone/adapters/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ nlbone/adapters/db/memory.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ nlbone/adapters/db/postgres.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ nlbone/adapters/db/query_builder.py,sha256=qL2Ppe39X7pnKpHfWZZanxfEKqQW3grZv5bQLS52mfU,6066
10
+ nlbone/adapters/db/sqlalchemy/__init__.py,sha256=bq_dIuk4JqT-68k6p0aMb7DY2GqcsvvsuZT5uZDuTBU,127
11
+ nlbone/adapters/db/sqlalchemy/engine.py,sha256=baEByNlB8NFuGVnMMz7xJqNa1_1E7DbLJ0vUo9vFarg,3045
12
+ nlbone/adapters/db/sqlalchemy/query/__init__.py,sha256=9SFkoNkklaji6kZt_Nl6X6vqMFE92GiqW36Zezr5PuE,129
13
+ nlbone/adapters/db/sqlalchemy/query/builder.py,sha256=AzUX2MlfrMGY-EITzVJoq9naM5sTL9h9yzI7cCeEBRk,886
14
+ nlbone/adapters/db/sqlalchemy/query/coercion.py,sha256=uYClfEuew_W4r-vbwj2c5MVpayejhpOMl6h4iUrMotQ,2142
15
+ nlbone/adapters/db/sqlalchemy/query/filters.py,sha256=GL6r2l8zY-9Ys6Ge6slI0FTZ8NUrYZzbvd5OwHFyJCg,2421
16
+ nlbone/adapters/db/sqlalchemy/query/ordering.py,sha256=THbuxZmoFZzJIa28KfDQ6ioS88MVvwLBb9iIj6QnEGM,490
17
+ nlbone/adapters/db/sqlalchemy/query/types.py,sha256=M2j6SOSyFkLuyXq4kvPYgZQYz5TKCBe3osoIIN1yfBI,287
18
+ nlbone/adapters/http_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ nlbone/adapters/http_clients/email_gateway.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ nlbone/adapters/messaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ nlbone/adapters/messaging/redis.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ nlbone/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ nlbone/config/logging.py,sha256=68WRQejEpL6eHEY_cOgdlOjndKc-RWth0n4YmXnceC8,5041
24
+ nlbone/config/settings.py,sha256=f9zIRsWce8v8ZFI0dd4vBY9O-Oo7TKEBDT4wOA8bKcs,1791
25
+ nlbone/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ nlbone/core/{__init__.py},sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ nlbone/core/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ nlbone/core/application/services.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ nlbone/core/application/use_cases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ nlbone/core/application/use_cases/register_user.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ nlbone/core/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ nlbone/core/domain/events.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ nlbone/core/domain/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ nlbone/core/ports/__init__.py,sha256=J24ldeLIQ_AWqKpdNbtaEWq4-G4cyWx8XEG0Dt6keao,29
35
+ nlbone/core/ports/auth.py,sha256=v2NiH8FzKXZ1MabzQxaK7AQvnt-GQindYIki90swTE4,492
36
+ nlbone/core/ports/messaging.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ nlbone/core/ports/repo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ nlbone/di/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ nlbone/di/container.py,sha256=7-lcrH1q9NmNLY7VMpLfPJZYKsvNuXP2U6gOYcCwgPo,304
40
+ nlbone/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ nlbone/interfaces/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ nlbone/interfaces/api/dependencies.py,sha256=IqDVq1lcCCxd22FBUg523lVANM_j71BYAQtsbrHc4M8,465
43
+ nlbone/interfaces/api/exceptions.py,sha256=OczR1FND2nbCngwbfgaPrgDbDaz4Pc47mFSHgtL7tW8,313
44
+ nlbone/interfaces/api/routers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ nlbone/interfaces/api/schemas.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ nlbone/interfaces/api/pagination/__init__.py,sha256=fdTqy5efdYIcUWbK1mVPQMieGd3HV1lZ8vmIhhsuUKs,58
47
+ nlbone/interfaces/api/pagination/offset_base.py,sha256=W0SJ0rHLMIqoyiPEAjnoKqY57LBXEyT5J-_5bS8r-NY,4535
48
+ nlbone/interfaces/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ nlbone/interfaces/cli/main.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ nlbone/interfaces/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ nlbone/interfaces/jobs/sync_tokens.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ nlbone/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ nlbone/utils/time.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ nlbone-0.1.23.dist-info/METADATA,sha256=3hwLuYJE0xbwf5ZZXeubHEO9F45CT4FDiCgMdklj81w,2226
55
+ nlbone-0.1.23.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
56
+ nlbone-0.1.23.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ nlbone-0.1.23.dist-info/RECORD,,
@@ -1,56 +0,0 @@
1
- src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- src/nlbone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- src/nlbone/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- src/nlbone/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- src/nlbone/adapters/auth/__init__.py,sha256=Eh9kWjY1I8vi17gK0oOzBLJwJX_GFuUcJIN7cLU6lJg,41
6
- src/nlbone/adapters/auth/keycloak.py,sha256=W5siUCFtOANDHZH9eDHsXIQ5cC6BDTk_Zv5mh3STSGo,2416
7
- src/nlbone/adapters/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- src/nlbone/adapters/db/memory.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- src/nlbone/adapters/db/postgres.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- src/nlbone/adapters/db/query_builder.py,sha256=qL2Ppe39X7pnKpHfWZZanxfEKqQW3grZv5bQLS52mfU,6066
11
- src/nlbone/adapters/db/sqlalchemy/__init__.py,sha256=bq_dIuk4JqT-68k6p0aMb7DY2GqcsvvsuZT5uZDuTBU,127
12
- src/nlbone/adapters/db/sqlalchemy/query/__init__.py,sha256=9SFkoNkklaji6kZt_Nl6X6vqMFE92GiqW36Zezr5PuE,129
13
- src/nlbone/adapters/db/sqlalchemy/query/builder.py,sha256=AzUX2MlfrMGY-EITzVJoq9naM5sTL9h9yzI7cCeEBRk,886
14
- src/nlbone/adapters/db/sqlalchemy/query/coercion.py,sha256=uYClfEuew_W4r-vbwj2c5MVpayejhpOMl6h4iUrMotQ,2142
15
- src/nlbone/adapters/db/sqlalchemy/query/filters.py,sha256=GL6r2l8zY-9Ys6Ge6slI0FTZ8NUrYZzbvd5OwHFyJCg,2421
16
- src/nlbone/adapters/db/sqlalchemy/query/ordering.py,sha256=THbuxZmoFZzJIa28KfDQ6ioS88MVvwLBb9iIj6QnEGM,490
17
- src/nlbone/adapters/db/sqlalchemy/query/types.py,sha256=M2j6SOSyFkLuyXq4kvPYgZQYz5TKCBe3osoIIN1yfBI,287
18
- src/nlbone/adapters/http_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- src/nlbone/adapters/http_clients/email_gateway.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- src/nlbone/adapters/messaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- src/nlbone/adapters/messaging/redis.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- src/nlbone/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- src/nlbone/config/logging.py,sha256=68WRQejEpL6eHEY_cOgdlOjndKc-RWth0n4YmXnceC8,5041
24
- src/nlbone/config/settings.py,sha256=N3o7FWAEx_aYyOzmoRH6muq4K39rQC-mWJJuHz6Ps90,1864
25
- src/nlbone/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- src/nlbone/core/{__init__.py},sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- src/nlbone/core/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- src/nlbone/core/application/services.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- src/nlbone/core/application/use_cases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- src/nlbone/core/application/use_cases/register_user.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- src/nlbone/core/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- src/nlbone/core/domain/events.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- src/nlbone/core/domain/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- src/nlbone/core/ports/__init__.py,sha256=J24ldeLIQ_AWqKpdNbtaEWq4-G4cyWx8XEG0Dt6keao,29
35
- src/nlbone/core/ports/auth.py,sha256=v2NiH8FzKXZ1MabzQxaK7AQvnt-GQindYIki90swTE4,492
36
- src/nlbone/core/ports/messaging.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- src/nlbone/core/ports/repo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- src/nlbone/di/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- src/nlbone/di/container.py,sha256=7-lcrH1q9NmNLY7VMpLfPJZYKsvNuXP2U6gOYcCwgPo,304
40
- src/nlbone/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- src/nlbone/interfaces/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- src/nlbone/interfaces/api/exceptions.py,sha256=OczR1FND2nbCngwbfgaPrgDbDaz4Pc47mFSHgtL7tW8,313
43
- src/nlbone/interfaces/api/routers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- src/nlbone/interfaces/api/schemas.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- src/nlbone/interfaces/api/pagination/__init__.py,sha256=fdTqy5efdYIcUWbK1mVPQMieGd3HV1lZ8vmIhhsuUKs,58
46
- src/nlbone/interfaces/api/pagination/offset_base.py,sha256=W0SJ0rHLMIqoyiPEAjnoKqY57LBXEyT5J-_5bS8r-NY,4535
47
- src/nlbone/interfaces/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- src/nlbone/interfaces/cli/main.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- src/nlbone/interfaces/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- src/nlbone/interfaces/jobs/sync_tokens.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- src/nlbone/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- src/nlbone/utils/time.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- nlbone-0.1.2.dist-info/METADATA,sha256=Ey3sUSL1921_N38W4BaMZGU3m0X7YK2WnOu2aKYPc1Q,2188
54
- nlbone-0.1.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
55
- nlbone-0.1.2.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- nlbone-0.1.2.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes