nlbone 0.6.0__py3-none-any.whl → 0.6.9__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 (39) hide show
  1. nlbone/adapters/__init__.py +1 -0
  2. nlbone/adapters/auth/keycloak.py +1 -1
  3. nlbone/adapters/auth/token_provider.py +1 -1
  4. nlbone/adapters/cache/async_redis.py +18 -8
  5. nlbone/adapters/cache/memory.py +21 -11
  6. nlbone/adapters/cache/pubsub_listener.py +3 -0
  7. nlbone/adapters/cache/redis.py +23 -8
  8. nlbone/adapters/db/__init__.py +0 -1
  9. nlbone/adapters/db/postgres/audit.py +14 -11
  10. nlbone/adapters/db/postgres/query_builder.py +103 -86
  11. nlbone/adapters/db/redis/client.py +1 -4
  12. nlbone/adapters/http_clients/__init__.py +2 -2
  13. nlbone/adapters/http_clients/pricing/__init__.py +1 -1
  14. nlbone/adapters/http_clients/pricing/pricing_service.py +40 -20
  15. nlbone/adapters/http_clients/uploadchi/__init__.py +1 -1
  16. nlbone/adapters/http_clients/uploadchi/uploadchi.py +12 -12
  17. nlbone/adapters/http_clients/uploadchi/uploadchi_async.py +14 -15
  18. nlbone/adapters/percolation/__init__.py +1 -1
  19. nlbone/adapters/percolation/connection.py +2 -1
  20. nlbone/config/logging.py +54 -24
  21. nlbone/container.py +14 -9
  22. nlbone/core/application/base_worker.py +1 -1
  23. nlbone/core/domain/models.py +4 -2
  24. nlbone/core/ports/cache.py +25 -9
  25. nlbone/interfaces/api/dependencies/auth.py +26 -0
  26. nlbone/interfaces/api/pagination/offset_base.py +14 -12
  27. nlbone/interfaces/cli/init_db.py +1 -1
  28. nlbone/interfaces/cli/main.py +6 -5
  29. nlbone/utils/cache.py +10 -0
  30. nlbone/utils/cache_keys.py +6 -0
  31. nlbone/utils/cache_registry.py +5 -2
  32. nlbone/utils/http.py +1 -1
  33. nlbone/utils/redactor.py +2 -1
  34. nlbone/utils/time.py +1 -1
  35. {nlbone-0.6.0.dist-info → nlbone-0.6.9.dist-info}/METADATA +1 -1
  36. {nlbone-0.6.0.dist-info → nlbone-0.6.9.dist-info}/RECORD +39 -39
  37. {nlbone-0.6.0.dist-info → nlbone-0.6.9.dist-info}/WHEEL +0 -0
  38. {nlbone-0.6.0.dist-info → nlbone-0.6.9.dist-info}/entry_points.txt +0 -0
  39. {nlbone-0.6.0.dist-info → nlbone-0.6.9.dist-info}/licenses/LICENSE +0 -0
nlbone/utils/cache.py CHANGED
@@ -4,17 +4,20 @@ import json
4
4
  from typing import Any, Callable, Iterable, Optional
5
5
 
6
6
  from makefun import wraps as mf_wraps
7
+
7
8
  from nlbone.utils.cache_registry import get_cache
8
9
 
9
10
  try:
10
11
  from pydantic import BaseModel # v1/v2
11
12
  except Exception: # pragma: no cover
13
+
12
14
  class BaseModel: # minimal fallback
13
15
  pass
14
16
 
15
17
 
16
18
  # -------- helpers --------
17
19
 
20
+
18
21
  def _bind(func: Callable, args, kwargs):
19
22
  sig = inspect.signature(func)
20
23
  bound = sig.bind_partial(*args, **kwargs)
@@ -79,6 +82,7 @@ def _run_maybe_async(func: Callable, *args, **kwargs):
79
82
 
80
83
  # -------- cache decorators --------
81
84
 
85
+
82
86
  def cached(
83
87
  *,
84
88
  ttl: int,
@@ -94,10 +98,12 @@ def cached(
94
98
  - Works with sync/async cache backends (CachePort / AsyncCachePort).
95
99
  - `key` & `tags` are string templates, e.g. "file:{file_id}".
96
100
  """
101
+
97
102
  def deco(func: Callable):
98
103
  is_async_func = asyncio.iscoroutinefunction(func)
99
104
 
100
105
  if is_async_func:
106
+
101
107
  @mf_wraps(func)
102
108
  async def aw(*args, **kwargs):
103
109
  cache = (cache_resolver or get_cache)()
@@ -165,10 +171,12 @@ def invalidate_by_tags(tags_builder: Callable[..., Iterable[str]]):
165
171
  Invalidate computed tags after function finishes.
166
172
  Works with sync or async functions and cache backends.
167
173
  """
174
+
168
175
  def deco(func: Callable):
169
176
  is_async_func = asyncio.iscoroutinefunction(func)
170
177
 
171
178
  if is_async_func:
179
+
172
180
  @mf_wraps(func)
173
181
  async def aw(*args, **kwargs):
174
182
  out = await func(*args, **kwargs)
@@ -179,6 +187,7 @@ def invalidate_by_tags(tags_builder: Callable[..., Iterable[str]]):
179
187
  else:
180
188
  cache.invalidate_tags(tags)
181
189
  return out
190
+
182
191
  return aw
183
192
 
184
193
  @mf_wraps(func)
@@ -191,6 +200,7 @@ def invalidate_by_tags(tags_builder: Callable[..., Iterable[str]]):
191
200
  else:
192
201
  cache.invalidate_tags(tags)
193
202
  return out
203
+
194
204
  return sw
195
205
 
196
206
  return deco
@@ -3,21 +3,26 @@ import json
3
3
  import random
4
4
  from typing import Any, Mapping
5
5
 
6
+
6
7
  def _stable_params(params: Mapping[str, Any]) -> str:
7
8
  return json.dumps(params, sort_keys=True, separators=(",", ":"))
8
9
 
10
+
9
11
  def make_key(ns: str, *parts: str) -> str:
10
12
  safe_parts = [p.replace(" ", "_") for p in parts if p]
11
13
  return f"{ns}:{':'.join(safe_parts)}" if safe_parts else f"{ns}:root"
12
14
 
15
+
13
16
  def make_param_key(ns: str, base: str, params: Mapping[str, Any]) -> str:
14
17
  payload = _stable_params(params)
15
18
  digest = hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16]
16
19
  return f"{ns}:{base}:{digest}"
17
20
 
21
+
18
22
  def tag_entity(ns: str, entity_id: Any) -> str:
19
23
  return f"{ns}:{entity_id}"
20
24
 
25
+
21
26
  def tag_list(ns: str, **filters) -> str:
22
27
  if not filters:
23
28
  return f"{ns}:list"
@@ -25,6 +30,7 @@ def tag_list(ns: str, **filters) -> str:
25
30
  digest = hashlib.md5(payload.encode("utf-8")).hexdigest()[:12]
26
31
  return f"{ns}:list:{digest}"
27
32
 
33
+
28
34
  def ttl_with_jitter(base_ttl: int, *, jitter_ratio: float = 0.1) -> int:
29
35
  jitter = int(base_ttl * jitter_ratio)
30
36
  return base_ttl + random.randint(-jitter, jitter)
@@ -1,5 +1,5 @@
1
- from typing import Callable, Optional, TypeVar
2
1
  from contextvars import ContextVar
2
+ from typing import Callable, Optional, TypeVar
3
3
 
4
4
  T = TypeVar("T")
5
5
 
@@ -7,17 +7,20 @@ _global_resolver: Optional[Callable[[], T]] = None
7
7
 
8
8
  _ctx_resolver: ContextVar[Optional[Callable[[], T]]] = ContextVar("_ctx_resolver", default=None)
9
9
 
10
+
10
11
  def set_cache_resolver(fn: Callable[[], T]) -> None:
11
12
  """Set process-wide cache resolver (e.g., lambda: container.cache())."""
12
13
  global _global_resolver
13
14
  _global_resolver = fn
14
15
 
16
+
15
17
  def set_context_cache_resolver(fn: Optional[Callable[[], T]]) -> None:
16
18
  """Override resolver in current context (useful in tests/background tasks)."""
17
19
  _ctx_resolver.set(fn)
18
20
 
21
+
19
22
  def get_cache() -> T:
20
23
  fn = _ctx_resolver.get() or _global_resolver
21
24
  if fn is None:
22
25
  raise RuntimeError("Cache resolver not configured. Call set_cache_resolver(...) first.")
23
- return fn()
26
+ return fn()
nlbone/utils/http.py CHANGED
@@ -10,7 +10,7 @@ def auth_headers(token: str | None) -> dict[str, str]:
10
10
 
11
11
 
12
12
  def build_list_query(
13
- limit: int, offset: int, filters: dict[str, Any] | None, sort: list[tuple[str, str]] | None
13
+ limit: int, offset: int, filters: dict[str, Any] | None, sort: list[tuple[str, str]] | None
14
14
  ) -> dict[str, Any]:
15
15
  q: dict[str, Any] = {"limit": limit, "offset": offset}
16
16
  if filters:
nlbone/utils/redactor.py CHANGED
@@ -5,6 +5,7 @@ from typing import Any
5
5
 
6
6
  SENSITIVE_KEYS = {"password", "token", "access_token", "refresh_token", "secret", "card_number", "cvv", "pan"}
7
7
 
8
+
8
9
  class PiiRedactor(logging.Filter):
9
10
  def _redact_in_obj(self, obj: Any):
10
11
  if isinstance(obj, dict):
@@ -29,4 +30,4 @@ class PiiRedactor(logging.Filter):
29
30
  record.msg = self._redact_in_obj(record.msg)
30
31
  except Exception:
31
32
  pass
32
- return True
33
+ return True
nlbone/utils/time.py CHANGED
@@ -30,7 +30,7 @@ class TimeUtility:
30
30
 
31
31
  @classmethod
32
32
  def get_past_datetime(
33
- cls, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
33
+ cls, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
34
34
  ) -> datetime:
35
35
  delta = timedelta(
36
36
  days=days,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.6.0
3
+ Version: 0.6.9
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
@@ -1,43 +1,43 @@
1
1
  nlbone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- nlbone/container.py,sha256=hOkc8F6Zx4fP5HxRp_uBYQyxhi6QYRAIqUPFEYd18aQ,3361
2
+ nlbone/container.py,sha256=VPGkfQO0HS4SbQy2ja3HVKyuMjD94p5ZmDPSqYHGhNo,3317
3
3
  nlbone/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- nlbone/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nlbone/adapters/__init__.py,sha256=NzUmk4XPyp3GJOw7VSE86xkQMZLtG3MrOoXLeoB551M,41
5
5
  nlbone/adapters/auth/__init__.py,sha256=hkDHvsFhw_UiOHG9ZSMqjiAhK4wumEforitveSZswVw,42
6
- nlbone/adapters/auth/keycloak.py,sha256=dfAxODiARfR8y3FKoWNo9fjfb6QyWd_Qr7AbJ0E78AM,2729
7
- nlbone/adapters/auth/token_provider.py,sha256=NhqjqTUsoZO4gbK-cybs0OkKydFN7CPTxAiypEw081o,1433
6
+ nlbone/adapters/auth/keycloak.py,sha256=j5KWMXGZN4Sey34I-dbaHrPG37hAaDPs4Utcra6UgWY,2730
7
+ nlbone/adapters/auth/token_provider.py,sha256=vL2Hk6HXnBbpk40Tq1wpqak5QQ7KEQf3nRquT0N8V4Q,1433
8
8
  nlbone/adapters/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- nlbone/adapters/cache/async_redis.py,sha256=E61tpBwAElMoGgyJ8CWO5G81n7u1-Wi_kVRDoh5rJuM,6206
10
- nlbone/adapters/cache/memory.py,sha256=lRJqMdD2lbojndQ_dJ7AulfhSYY_uqjgXvd4ZT_J8co,3655
11
- nlbone/adapters/cache/pubsub_listener.py,sha256=2y6DbWsERXlMOkmJSJMg8hNU9MTGwR7BhwQRveivh50,1457
12
- nlbone/adapters/cache/redis.py,sha256=gMNfUIk1HkeXVBmtAtVchcr59ll06E4wam9rGWAhalM,4535
13
- nlbone/adapters/db/__init__.py,sha256=saW-wN4E0NZ2_ldi-nrm5AgsH7EULNSa62lYMwfy1oo,252
9
+ nlbone/adapters/cache/async_redis.py,sha256=vvu5w4ANx0BVRHL95RAMGsD8CcaC-tSBMbCius2cuNc,6212
10
+ nlbone/adapters/cache/memory.py,sha256=y8M4erHQXApiSMAqG6Qk4pxEb60hRdu1szPv6iqvO9c,3738
11
+ nlbone/adapters/cache/pubsub_listener.py,sha256=3vfK4O4EzuQQhTsbZ_bweP06o99kDSyHJ5PrfUotUaE,1460
12
+ nlbone/adapters/cache/redis.py,sha256=2Y1DYHBLCrbHTO6O7pw85u3qY6OnCIFTYJ-HBvBs0FM,4608
13
+ nlbone/adapters/db/__init__.py,sha256=0CDSySEk4jJsqmwI0eNuaaLJOJDt8_iSiHBsFdC-L3s,212
14
14
  nlbone/adapters/db/postgres/__init__.py,sha256=6JYJH0xZs3aR-zuyMpRhsdzFugmqz8nprwTQLprqhZc,313
15
- nlbone/adapters/db/postgres/audit.py,sha256=zFzL-pXmfjcp5YLx6vBYczprsJjEPxSYKhQNR3WjKL0,4675
15
+ nlbone/adapters/db/postgres/audit.py,sha256=8f5XOuW7_ybJyy_STam1FNzqmZAAVAu7tmMRUkCGJOM,4594
16
16
  nlbone/adapters/db/postgres/base.py,sha256=kha9xmklzhuQAK8QEkNBn-mAHq8dUKbOM-3abaBpWmQ,71
17
17
  nlbone/adapters/db/postgres/engine.py,sha256=UCegauVB1gvo42ThytYnn5VIcQBwR-5xhcXYFApRFNk,3448
18
- nlbone/adapters/db/postgres/query_builder.py,sha256=U5pqpCfJKuMIxIEHyodoHuPgE8jf53slC1ScKZR5xa4,8653
18
+ nlbone/adapters/db/postgres/query_builder.py,sha256=rJ9J3vl0ikELwq5JujFn7jZYPmF6rM5wHTbIiUHOs1k,9381
19
19
  nlbone/adapters/db/postgres/repository.py,sha256=J_DBE73JhHPYCk90c5-O7lQtZbxDgqjjN9OcWy4Omvs,1660
20
20
  nlbone/adapters/db/postgres/schema.py,sha256=NlE7Rr8uXypsw4oWkdZhZwcIBHQEPIpoHLxcUo98i6s,1039
21
21
  nlbone/adapters/db/postgres/uow.py,sha256=nRxNpY-WoWHpym-XeZ8VHm0MYvtB9wuopOeNdV_ebk8,2088
22
22
  nlbone/adapters/db/redis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- nlbone/adapters/db/redis/client.py,sha256=XAKcmU0lpPvWPMS0fChVQ3iSJfHV1g4bMOCgJaj2bCI,512
24
- nlbone/adapters/http_clients/__init__.py,sha256=Ed75OHxkJ401XNHpfx3pz20e7Z_YFSAoKUct8o-SI9k,150
25
- nlbone/adapters/http_clients/pricing/__init__.py,sha256=RLSnG9mgaw1Qwt5Qsc4SwRCjNiqWeyDpvFY79PlhkFE,81
26
- nlbone/adapters/http_clients/pricing/pricing_service.py,sha256=cdYEF_ZY01QbhSXoifotELdp2n8GyzdKIC_nWHP696E,2568
27
- nlbone/adapters/http_clients/uploadchi/__init__.py,sha256=VjLtgOPvNufoQvNCrwPLwlzJicdfJCZUqBK4VEXNQ3o,104
28
- nlbone/adapters/http_clients/uploadchi/uploadchi.py,sha256=_D6Gv5nj4TJXcEq_YJWut92vEu69LflLTw6m2dlD7C0,4864
29
- nlbone/adapters/http_clients/uploadchi/uploadchi_async.py,sha256=EGFI1ZhfMxotHkORyU1cJVGG4tsFAbnITZViIc3J7vI,4766
23
+ nlbone/adapters/db/redis/client.py,sha256=5SUnwP2-GrueSFimUbiqDvrQsumvIE2aeozk8l-vOfQ,466
24
+ nlbone/adapters/http_clients/__init__.py,sha256=w-Yr9CLuXMU71N0Ada5HbvP1DB53wqeP6B-i5rALlTo,150
25
+ nlbone/adapters/http_clients/pricing/__init__.py,sha256=ElA9NFcAR9u4cqb_w3PPqKU3xGeyjNLQ8veJ0ql2iz0,81
26
+ nlbone/adapters/http_clients/pricing/pricing_service.py,sha256=PDG6CbLg_SL-BsrhNwfyypywcuZIsEyj5mpQGSPH4e4,3300
27
+ nlbone/adapters/http_clients/uploadchi/__init__.py,sha256=uBzEOuVtY22teWW2b36Pitkdk5yVdSqa6xbg22JfTNg,105
28
+ nlbone/adapters/http_clients/uploadchi/uploadchi.py,sha256=ABFiH3bLsxFtB-4Si4SEedE2bMUVz5hWXGwD4RkV3ws,4816
29
+ nlbone/adapters/http_clients/uploadchi/uploadchi_async.py,sha256=PQbVNeaYde5CmgT3vcnQoI1PGeSs9AxHlPFuB8biOmU,4717
30
30
  nlbone/adapters/messaging/__init__.py,sha256=UDAwu3s-JQmOZjWz2Nu0SgHhnkbeOhKDH_zLD75oWMY,40
31
31
  nlbone/adapters/messaging/event_bus.py,sha256=w-NPwDiPMLFPU_enRQCtfQXOALsXfg31u57R8sG_-1U,781
32
32
  nlbone/adapters/messaging/redis.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- nlbone/adapters/percolation/__init__.py,sha256=viq5WZqcSLlRBF5JwuyTD_IZaNWfpKzGJIECgKOWgOw,37
34
- nlbone/adapters/percolation/connection.py,sha256=xZ-OtQVbyQYH83TUizS0UWI85Iic-AhUjiuyzO0e46s,331
33
+ nlbone/adapters/percolation/__init__.py,sha256=0h1Bw7FzxgkDIHxeoyQXSfegrhP6VbpYV4QC8njYdRE,38
34
+ nlbone/adapters/percolation/connection.py,sha256=yuqcboFLsd4FRfywfXatbe8NjVtzyEWHGOZ8OVmmQaI,333
35
35
  nlbone/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- nlbone/config/logging.py,sha256=rGQz9W5ZgUFXBK74TFmTuwx_WMJhD8zPN39zfKVxwnI,4115
36
+ nlbone/config/logging.py,sha256=Ot6Ctf7EQZlW8YNB-uBdleqI6wixn5fH0Eo6QRgNkQk,4358
37
37
  nlbone/config/settings.py,sha256=W3NHZP6yjIyyKiGWNkjlUt_RYFKkcIfMBoKih_z_0Bs,3911
38
38
  nlbone/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  nlbone/core/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- nlbone/core/application/base_worker.py,sha256=uHqglsd33jXl_0kmkFlB4KQ5NdI1wArcOeQmdcifPQc,1192
40
+ nlbone/core/application/base_worker.py,sha256=5brIToSd-vi6tw0ukhHnUZGZhOLq1SQ-NRRy-kp6D24,1193
41
41
  nlbone/core/application/events.py,sha256=eQGLE0aZHuWJsy9J-qRse4CMXOtweH9-2rQ7AIPRMEQ,614
42
42
  nlbone/core/application/services.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  nlbone/core/application/use_case.py,sha256=3GMQZ3CFK5cbLoBNBgohPft6GBq2j9_wr8iKRq_osQA,247
@@ -45,10 +45,10 @@ nlbone/core/application/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
45
45
  nlbone/core/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  nlbone/core/domain/base.py,sha256=5oUfbpaI8juJ28Api8J9IXOSm55VI2bp4QNhA0U8h2Y,1251
47
47
  nlbone/core/domain/events.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- nlbone/core/domain/models.py,sha256=e2ig7PMBBpmc8pdHLNMnXhucMXr9OUq-G7bKGTq9Qj0,1458
48
+ nlbone/core/domain/models.py,sha256=Zn_rwtlzfjOEJZo6HS9M8UsMk-HpMJrHAKn05UA-u2k,1461
49
49
  nlbone/core/ports/__init__.py,sha256=gx-Ubj7h-1vvnu56sNnRqmer7HHfW3rX2WLl-0AX5U0,214
50
50
  nlbone/core/ports/auth.py,sha256=Gh0yQsxx2OD6pDH2_p-khsA-bVoypP1juuqMoSfjZUo,493
51
- nlbone/core/ports/cache.py,sha256=C9exWYPZsppCpkrAMiGfJuf4ehHkibtFfvB1aFbWuO4,2257
51
+ nlbone/core/ports/cache.py,sha256=8pP_z4ta7PNNG8UiSrEF4xMZRm2wLPxISZvdPt7QnxQ,2351
52
52
  nlbone/core/ports/event_bus.py,sha256=_Om1GOOT-F325oV6_LJXtLdx4vu5i7KrpTDD3qPJXU0,325
53
53
  nlbone/core/ports/files.py,sha256=7Ov2ITYRpPwwDTZGCeNVISg8e3A9l08jbOgpTImgfK8,1863
54
54
  nlbone/core/ports/messaging.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -62,7 +62,7 @@ nlbone/interfaces/api/routers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
62
62
  nlbone/interfaces/api/schemas.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  nlbone/interfaces/api/dependencies/__init__.py,sha256=rnYRrFVZCfICQrp_PVFlzNg3BeC57yM08wn2DbOHCfk,359
64
64
  nlbone/interfaces/api/dependencies/async_auth.py,sha256=bfxgBXhp29WqevjTG4jrdPNR-75APm4jKyHdOOtxnp4,1825
65
- nlbone/interfaces/api/dependencies/auth.py,sha256=VcWnEipQr4dqhzGbP0G9a5nJdplnpFG3wm_NlDCb8z4,1765
65
+ nlbone/interfaces/api/dependencies/auth.py,sha256=Tp4_DjJ-7hHWiWdvPaD922DGdauuzDXl5aqALBtk-QM,2750
66
66
  nlbone/interfaces/api/dependencies/db.py,sha256=-UD39J_86UU7ZJs2ZncpdND0yhAG0NeeeALrgSDuuFw,466
67
67
  nlbone/interfaces/api/dependencies/uow.py,sha256=QfLEvLYLNWZJQN1k-0q0hBVtUld3D75P4j39q_RjcnE,1181
68
68
  nlbone/interfaces/api/middleware/__init__.py,sha256=zbX2vaEAfxRMIYwO2MVY_2O6bqG5H9o7HqGpX14U3Is,158
@@ -70,22 +70,22 @@ nlbone/interfaces/api/middleware/access_log.py,sha256=vIkxxxfy2HcjqqKb8XCfGCcSri
70
70
  nlbone/interfaces/api/middleware/add_request_context.py,sha256=av-qs0biOYuF9R6RJOo2eYsFqDL9WRYWcjVakFhbt-w,1834
71
71
  nlbone/interfaces/api/middleware/authentication.py,sha256=ze7vCm492QsX9nPL6A-PqZCmC1C5ZgUE-OWI6fCLpsU,1809
72
72
  nlbone/interfaces/api/pagination/__init__.py,sha256=sWKKQFa2Z-1SlprQOqImOa2c9exq4wueKpUL_9QM7wc,417
73
- nlbone/interfaces/api/pagination/offset_base.py,sha256=B6rHxzDsxQbm-d2snM6tjgnhWyZw7zvs7fcehV0gpa0,3621
73
+ nlbone/interfaces/api/pagination/offset_base.py,sha256=BPG8veDRUA-67Z_JqLQTqT2nqCalxPblzSiQv_HZXUc,3838
74
74
  nlbone/interfaces/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- nlbone/interfaces/cli/init_db.py,sha256=49TmA-LwUsqGVttjU-w2EzZ-vzQCULNlhKP_0sfl1_Y,790
76
- nlbone/interfaces/cli/main.py,sha256=65XXNmH0dX9Lib_yW5iQXo7wp_GRFwx9xXDYgy2LJtY,704
75
+ nlbone/interfaces/cli/init_db.py,sha256=C67n2MsJ1vzkJxC8zfUYOxFdd6mEB_vT9agxN6jWoG8,790
76
+ nlbone/interfaces/cli/main.py,sha256=pNldsTgplVyXa-Hx96dySO2I9gFRi49nDXv7J_dO73s,686
77
77
  nlbone/interfaces/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
78
  nlbone/interfaces/jobs/sync_tokens.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  nlbone/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- nlbone/utils/cache.py,sha256=3sKtWoGBlrEvkg74r4C-Sx8u41OTup_G4s-Q57IaOXg,5921
81
- nlbone/utils/cache_keys.py,sha256=a1yRMUuyRJ2-CswjtgVkLcJAeT2QmThLQ5kQWvpOKL4,1069
82
- nlbone/utils/cache_registry.py,sha256=0csax1-GmKBcsZmQYWI4Bs0X9_BMo6Jdoac-e9Zusv8,819
80
+ nlbone/utils/cache.py,sha256=hVfkR62o5vllDrE_nY4At10wK0It6qpZ45K1xoj10cQ,5931
81
+ nlbone/utils/cache_keys.py,sha256=Y2YSellHTbUOcoaNbl1jaD4r485VU_e4KXsfBWhYTBo,1075
82
+ nlbone/utils/cache_registry.py,sha256=w28sEfUQZAhzCCqVH5TflWQY3nyDXyEcFWt8hkuHRHw,823
83
83
  nlbone/utils/context.py,sha256=MmclJ24BG2uvSTg1IK7J-Da9BhVFDQ5ag4Ggs2FF1_w,1600
84
- nlbone/utils/http.py,sha256=krNfMoD9kTFE_E5yX-0DzgH97H-UgAiKRMXmATlwgIM,876
85
- nlbone/utils/redactor.py,sha256=JbbPs2Qtnz0zHN85BGPYQNWwBigXMSzmMEmmZZOTs_U,1277
86
- nlbone/utils/time.py,sha256=6e0A4_hG1rYDCrWoOklEGVJstBf8j9XSSTT7VNV2K9Y,1272
87
- nlbone-0.6.0.dist-info/METADATA,sha256=402hd-duWpvMKlnSwcgbbYLJQ0OQFgwKtWd9zlfkdB8,2194
88
- nlbone-0.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
89
- nlbone-0.6.0.dist-info/entry_points.txt,sha256=CpIL45t5nbhl1dGQPhfIIDfqqak3teK0SxPGBBr7YCk,59
90
- nlbone-0.6.0.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- nlbone-0.6.0.dist-info/RECORD,,
84
+ nlbone/utils/http.py,sha256=UXUoXgQdTRNT08ho8zl-C5ekfDsD8uf-JiMQ323ooqw,872
85
+ nlbone/utils/redactor.py,sha256=-V4HrHmHwPi3Kez587Ek1uJlgK35qGSrwBOvcbw8Jas,1279
86
+ nlbone/utils/time.py,sha256=DjjyQ9GLsfXoT6NK8RDW2rOlJg3e6sF04Jw6PBUrSvg,1268
87
+ nlbone-0.6.9.dist-info/METADATA,sha256=uE-MksB9505zd0epl9bh3S7QmnanB2hvnoppyU_0mH4,2194
88
+ nlbone-0.6.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
89
+ nlbone-0.6.9.dist-info/entry_points.txt,sha256=CpIL45t5nbhl1dGQPhfIIDfqqak3teK0SxPGBBr7YCk,59
90
+ nlbone-0.6.9.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ nlbone-0.6.9.dist-info/RECORD,,
File without changes