nlbone 0.6.17__tar.gz → 0.6.19__tar.gz

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 (104) hide show
  1. {nlbone-0.6.17 → nlbone-0.6.19}/PKG-INFO +1 -1
  2. {nlbone-0.6.17 → nlbone-0.6.19}/pyproject.toml +1 -1
  3. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/audit.py +10 -3
  4. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/query_builder.py +3 -1
  5. nlbone-0.6.19/src/nlbone/adapters/repositories/outbox_repo.py +20 -0
  6. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/config/settings.py +2 -0
  7. nlbone-0.6.19/src/nlbone/core/application/command_bus.py +25 -0
  8. nlbone-0.6.19/src/nlbone/interfaces/jobs/dispatch_outbox.py +19 -0
  9. nlbone-0.6.19/src/nlbone/utils/__init__.py +0 -0
  10. {nlbone-0.6.17 → nlbone-0.6.19}/.gitignore +0 -0
  11. {nlbone-0.6.17 → nlbone-0.6.19}/LICENSE +0 -0
  12. {nlbone-0.6.17 → nlbone-0.6.19}/README.md +0 -0
  13. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/__init__.py +0 -0
  14. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/__init__.py +0 -0
  15. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/auth/__init__.py +0 -0
  16. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/auth/keycloak.py +0 -0
  17. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/auth/token_provider.py +0 -0
  18. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/cache/__init__.py +0 -0
  19. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/cache/async_redis.py +0 -0
  20. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/cache/memory.py +0 -0
  21. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/cache/pubsub_listener.py +0 -0
  22. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/cache/redis.py +0 -0
  23. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/__init__.py +0 -0
  24. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/__init__.py +0 -0
  25. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/base.py +0 -0
  26. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/engine.py +0 -0
  27. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/repository.py +0 -0
  28. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/schema.py +0 -0
  29. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/postgres/uow.py +0 -0
  30. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/redis/__init__.py +0 -0
  31. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/db/redis/client.py +0 -0
  32. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/__init__.py +0 -0
  33. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/pricing/__init__.py +0 -0
  34. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/pricing/pricing_service.py +0 -0
  35. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/uploadchi/__init__.py +0 -0
  36. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/uploadchi/uploadchi.py +0 -0
  37. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/http_clients/uploadchi/uploadchi_async.py +0 -0
  38. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/messaging/__init__.py +0 -0
  39. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/messaging/event_bus.py +0 -0
  40. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/messaging/redis.py +0 -0
  41. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/percolation/__init__.py +0 -0
  42. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/adapters/percolation/connection.py +0 -0
  43. {nlbone-0.6.17/src/nlbone/config → nlbone-0.6.19/src/nlbone/adapters/repositories}/__init__.py +0 -0
  44. {nlbone-0.6.17/src/nlbone/core → nlbone-0.6.19/src/nlbone/config}/__init__.py +0 -0
  45. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/config/logging.py +0 -0
  46. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/container.py +0 -0
  47. {nlbone-0.6.17/src/nlbone/core/application → nlbone-0.6.19/src/nlbone/core}/__init__.py +0 -0
  48. {nlbone-0.6.17/src/nlbone/core/application/services → nlbone-0.6.19/src/nlbone/core/application}/__init__.py +0 -0
  49. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/application/base_worker.py +0 -0
  50. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/application/events.py +0 -0
  51. {nlbone-0.6.17/src/nlbone/core/domain → nlbone-0.6.19/src/nlbone/core/application/services}/__init__.py +0 -0
  52. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/application/services.py +0 -0
  53. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/application/use_case.py +0 -0
  54. {nlbone-0.6.17/src/nlbone/interfaces → nlbone-0.6.19/src/nlbone/core/domain}/__init__.py +0 -0
  55. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/domain/base.py +0 -0
  56. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/domain/events.py +0 -0
  57. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/domain/models.py +0 -0
  58. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/__init__.py +0 -0
  59. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/auth.py +0 -0
  60. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/cache.py +0 -0
  61. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/event_bus.py +0 -0
  62. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/files.py +0 -0
  63. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/messaging.py +0 -0
  64. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/repo.py +0 -0
  65. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/core/ports/uow.py +0 -0
  66. {nlbone-0.6.17/src/nlbone/interfaces/api → nlbone-0.6.19/src/nlbone/interfaces}/__init__.py +0 -0
  67. {nlbone-0.6.17/src/nlbone/interfaces/cli → nlbone-0.6.19/src/nlbone/interfaces/api}/__init__.py +0 -0
  68. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/__init__.py +0 -0
  69. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/assembler.py +0 -0
  70. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/default_field_rules/__init__.py +0 -0
  71. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/default_field_rules/image_field_rules.py +0 -0
  72. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/field_registry.py +0 -0
  73. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/additional_filed/resolver.py +0 -0
  74. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/dependencies/__init__.py +0 -0
  75. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/dependencies/async_auth.py +0 -0
  76. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/dependencies/auth.py +0 -0
  77. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/dependencies/db.py +0 -0
  78. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/dependencies/uow.py +0 -0
  79. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/exception_handlers.py +0 -0
  80. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/exceptions.py +0 -0
  81. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/middleware/__init__.py +0 -0
  82. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/middleware/access_log.py +0 -0
  83. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/middleware/add_request_context.py +0 -0
  84. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/middleware/authentication.py +0 -0
  85. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/pagination/__init__.py +0 -0
  86. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/pagination/offset_base.py +0 -0
  87. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/routers.py +0 -0
  88. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/schema/__init__.py +0 -0
  89. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/schema/adaptive_schema.py +0 -0
  90. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/schema/base_response_model.py +0 -0
  91. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/api/schemas.py +0 -0
  92. {nlbone-0.6.17/src/nlbone/interfaces/jobs → nlbone-0.6.19/src/nlbone/interfaces/cli}/__init__.py +0 -0
  93. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/cli/init_db.py +0 -0
  94. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/cli/main.py +0 -0
  95. {nlbone-0.6.17/src/nlbone/utils → nlbone-0.6.19/src/nlbone/interfaces/jobs}/__init__.py +0 -0
  96. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/interfaces/jobs/sync_tokens.py +0 -0
  97. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/types.py +0 -0
  98. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/cache.py +0 -0
  99. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/cache_keys.py +0 -0
  100. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/cache_registry.py +0 -0
  101. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/context.py +0 -0
  102. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/http.py +0 -0
  103. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/redactor.py +0 -0
  104. {nlbone-0.6.17 → nlbone-0.6.19}/src/nlbone/utils/time.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.6.17
3
+ Version: 0.6.19
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "nlbone"
7
- version = "0.6.17"
7
+ version = "0.6.19"
8
8
  description = "Backbone package for interfaces and infrastructure in Python projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -8,11 +8,13 @@ from sqlalchemy import event
8
8
  from sqlalchemy import inspect as sa_inspect
9
9
  from sqlalchemy.orm import Session as SASession
10
10
 
11
+ from nlbone.config.settings import get_settings
11
12
  from nlbone.core.domain.models import AuditLog
12
13
  from nlbone.utils.context import current_context_dict
13
14
 
15
+ setting = get_settings()
14
16
  DEFAULT_EXCLUDE = {"updated_at", "created_at"}
15
- DEFAULT_ENABLED = False
17
+ DEFAULT_ENABLED = setting.AUDIT_DEFAULT_ENABLE
16
18
  DEFAULT_OPS = {"INSERT", "UPDATE", "DELETE"}
17
19
 
18
20
 
@@ -24,12 +26,17 @@ def _get_ops_for(obj) -> set[str]:
24
26
 
25
27
 
26
28
  def _is_audit_disabled(obj) -> bool:
27
- if not DEFAULT_ENABLED:
28
- return True
29
29
  if getattr(obj, "__audit_disable__", False):
30
30
  return True
31
+
32
+ if not DEFAULT_ENABLED:
33
+ if hasattr(obj, "__audit_enable__") and getattr(obj, "__audit_enable__"):
34
+ return False
35
+ return True
36
+
31
37
  if hasattr(obj, "__audit_enable__") and not getattr(obj, "__audit_enable__"):
32
38
  return True
39
+
33
40
  return False
34
41
 
35
42
 
@@ -340,8 +340,10 @@ def get_paginated_response(
340
340
  with_count: bool = True,
341
341
  output_cls: Optional[Type] = None,
342
342
  eager_options: Optional[Sequence[LoaderOption]] = None,
343
+ query = None
343
344
  ) -> dict:
344
- query = session.query(entity)
345
+ if not query:
346
+ query = session.query(entity)
345
347
  if eager_options:
346
348
  query = query.options(*eager_options)
347
349
 
@@ -0,0 +1,20 @@
1
+ from typing import List
2
+
3
+ class OutboxRecord(dict):
4
+ pass
5
+
6
+ class OutboxRepository:
7
+ def __init__(self, engine):
8
+ self._engine = engine
9
+
10
+ def add(self, msg) -> None:
11
+ ...
12
+
13
+ def fetch_pending(self, limit: int = 100) -> List[OutboxRecord]:
14
+ ...
15
+
16
+ def mark_sent(self, msg_id: int) -> None:
17
+ ...
18
+
19
+ def schedule_retry(self, msg_id: int, retries: int, backoff_base: int = 2) -> None:
20
+ ...
@@ -43,6 +43,8 @@ class Settings(BaseSettings):
43
43
  LOG_LEVEL: Literal["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"] = Field(default="INFO")
44
44
  LOG_JSON: bool = Field(default=True)
45
45
 
46
+ AUDIT_DEFAULT_ENABLE: bool = False
47
+
46
48
  # ---------------------------
47
49
  # HTTP / Timeouts
48
50
  # ---------------------------
@@ -0,0 +1,25 @@
1
+ from dataclasses import dataclass
2
+ from typing import Protocol, Type, Any, Dict
3
+
4
+
5
+ @dataclass(frozen=True)
6
+ class Command:
7
+ pass
8
+
9
+
10
+ class CommandHandler(Protocol):
11
+ def __call__(self, command: Command) -> Any: ...
12
+
13
+
14
+ class CommandBus:
15
+ def __init__(self) -> None:
16
+ self._handlers: Dict[Type[Command], CommandHandler] = {}
17
+
18
+ def register(self, cmd_type: Type[Command], handler: CommandHandler) -> None:
19
+ self._handlers[cmd_type] = handler
20
+
21
+ def dispatch(self, command: Command) -> Any:
22
+ handler = self._handlers.get(type(command))
23
+ if handler is None:
24
+ raise LookupError(f"No handler registered for {type(command).__name__}")
25
+ return handler(command)
@@ -0,0 +1,19 @@
1
+ from nlbone.adapters.messaging.internal_router import internal_router
2
+ from nlbone.core.ports.event_bus import IntegrationPublisher
3
+
4
+ def run_dispatch_outbox(outbox_repo, publisher: IntegrationPublisher):
5
+ batch = outbox_repo.fetch_pending(limit=200)
6
+ for rec in batch:
7
+ try:
8
+ topic = rec["topic"]
9
+ payload = rec["payload"]
10
+ if topic.startswith("internal."):
11
+ internal_router.handle(topic, payload)
12
+ else:
13
+ publisher.publish(topic, payload)
14
+ outbox_repo.mark_sent(rec["id"])
15
+ except TemporaryError:
16
+ outbox_repo.schedule_retry(rec["id"], rec["retries"])
17
+ except Exception:
18
+ # mark_failed یا retry policy
19
+ outbox_repo.schedule_retry(rec["id"], rec["retries"])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes