nlbone 0.9.4__tar.gz → 0.9.6__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 (123) hide show
  1. {nlbone-0.9.4 → nlbone-0.9.6}/PKG-INFO +1 -1
  2. {nlbone-0.9.4 → nlbone-0.9.6}/pyproject.toml +1 -1
  3. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/pricing/pricing_service.py +18 -6
  4. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/auth.py +21 -2
  5. {nlbone-0.9.4 → nlbone-0.9.6}/.gitignore +0 -0
  6. {nlbone-0.9.4 → nlbone-0.9.6}/LICENSE +0 -0
  7. {nlbone-0.9.4 → nlbone-0.9.6}/README.md +0 -0
  8. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/__init__.py +0 -0
  9. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/__init__.py +0 -0
  10. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/auth/__init__.py +0 -0
  11. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/auth/auth_service.py +0 -0
  12. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/auth/keycloak.py +0 -0
  13. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/auth/token_provider.py +0 -0
  14. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/cache/__init__.py +0 -0
  15. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/cache/async_redis.py +0 -0
  16. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/cache/memory.py +0 -0
  17. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/cache/pubsub_listener.py +0 -0
  18. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/cache/redis.py +0 -0
  19. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/__init__.py +0 -0
  20. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/__init__.py +0 -0
  21. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/audit.py +0 -0
  22. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/base.py +0 -0
  23. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/engine.py +0 -0
  24. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/query_builder.py +0 -0
  25. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/repository.py +0 -0
  26. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/schema.py +0 -0
  27. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/types.py +0 -0
  28. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/postgres/uow.py +0 -0
  29. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/redis/__init__.py +0 -0
  30. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/db/redis/client.py +0 -0
  31. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/__init__.py +0 -0
  32. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/pricing/__init__.py +0 -0
  33. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/uploadchi/__init__.py +0 -0
  34. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/uploadchi/uploadchi.py +0 -0
  35. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/http_clients/uploadchi/uploadchi_async.py +0 -0
  36. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/i18n/__init__.py +0 -0
  37. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/i18n/engine.py +0 -0
  38. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/i18n/loaders.py +0 -0
  39. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/i18n/locales/fa-IR.json +0 -0
  40. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/messaging/__init__.py +0 -0
  41. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/messaging/event_bus.py +0 -0
  42. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/messaging/rabbitmq.py +0 -0
  43. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/outbox/__init__.py +0 -0
  44. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/outbox/outbox_consumer.py +0 -0
  45. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/outbox/outbox_repo.py +0 -0
  46. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/percolation/__init__.py +0 -0
  47. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/percolation/connection.py +0 -0
  48. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/repositories/__init__.py +0 -0
  49. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/snowflake.py +0 -0
  50. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/ticketing/__init__.py +0 -0
  51. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/adapters/ticketing/client.py +0 -0
  52. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/config/__init__.py +0 -0
  53. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/config/logging.py +0 -0
  54. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/config/settings.py +0 -0
  55. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/container.py +0 -0
  56. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/__init__.py +0 -0
  57. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/__init__.py +0 -0
  58. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/base_worker.py +0 -0
  59. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/bus.py +0 -0
  60. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/di.py +0 -0
  61. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/registry.py +0 -0
  62. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/services/__init__.py +0 -0
  63. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/application/use_case.py +0 -0
  64. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/domain/__init__.py +0 -0
  65. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/domain/base.py +0 -0
  66. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/domain/models.py +0 -0
  67. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/__init__.py +0 -0
  68. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/auth.py +0 -0
  69. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/cache.py +0 -0
  70. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/event_bus.py +0 -0
  71. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/files.py +0 -0
  72. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/outbox.py +0 -0
  73. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/repository.py +0 -0
  74. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/translation.py +0 -0
  75. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/core/ports/uow.py +0 -0
  76. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/__init__.py +0 -0
  77. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/__init__.py +0 -0
  78. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/__init__.py +0 -0
  79. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/assembler.py +0 -0
  80. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/default_field_rules/__init__.py +0 -0
  81. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/default_field_rules/image_field_rules.py +0 -0
  82. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/field_registry.py +0 -0
  83. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/additional_filed/resolver.py +0 -0
  84. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/__init__.py +0 -0
  85. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/async_auth.py +0 -0
  86. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/client_credential.py +0 -0
  87. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/db.py +0 -0
  88. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/dependencies/uow.py +0 -0
  89. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/exception_handlers.py +0 -0
  90. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/exceptions.py +0 -0
  91. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/middleware/__init__.py +0 -0
  92. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/middleware/access_log.py +0 -0
  93. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/middleware/add_request_context.py +0 -0
  94. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/middleware/authentication.py +0 -0
  95. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/pagination/__init__.py +0 -0
  96. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/pagination/offset_base.py +0 -0
  97. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/routers.py +0 -0
  98. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/schema/__init__.py +0 -0
  99. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/schema/adaptive_schema.py +0 -0
  100. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/schema/base_response_model.py +0 -0
  101. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/api/schemas.py +0 -0
  102. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/cli/__init__.py +0 -0
  103. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/cli/crypto.py +0 -0
  104. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/cli/init_db.py +0 -0
  105. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/cli/main.py +0 -0
  106. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/cli/ticket.py +0 -0
  107. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/jobs/__init__.py +0 -0
  108. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/jobs/dispatch_outbox.py +0 -0
  109. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/interfaces/jobs/sync_tokens.py +0 -0
  110. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/types.py +0 -0
  111. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/__init__.py +0 -0
  112. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/cache.py +0 -0
  113. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/cache_keys.py +0 -0
  114. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/cache_registry.py +0 -0
  115. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/context.py +0 -0
  116. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/crypto.py +0 -0
  117. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/flatten_dict.py +0 -0
  118. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/flatten_sqlalchemy_result.py +0 -0
  119. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/http.py +0 -0
  120. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/normalize_mobile.py +0 -0
  121. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/read_files.py +0 -0
  122. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/redactor.py +0 -0
  123. {nlbone-0.9.4 → nlbone-0.9.6}/src/nlbone/utils/time.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.9.4
3
+ Version: 0.9.6
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.9.4"
7
+ version = "0.9.6"
8
8
  description = "Backbone package for interfaces and infrastructure in Python projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,3 +1,4 @@
1
+ import json
1
2
  from decimal import Decimal
2
3
  from enum import Enum
3
4
  from typing import Any, Dict, List, Literal, Optional, Union
@@ -66,13 +67,20 @@ class CalculatePriceOut(RootModel[Union[List[PricingRule], Dict[str, PricingRule
66
67
  pass
67
68
 
68
69
 
70
+ class DecimalEncoder(json.JSONEncoder):
71
+ def default(self, obj):
72
+ if isinstance(obj, Decimal):
73
+ return float(obj)
74
+ return super(DecimalEncoder, self).default(obj)
75
+
76
+
69
77
  class PricingService:
70
78
  def __init__(
71
- self,
72
- token_provider: ClientTokenProvider,
73
- base_url: Optional[str] = None,
74
- timeout_seconds: Optional[float] = None,
75
- client: httpx.Client | None = None,
79
+ self,
80
+ token_provider: ClientTokenProvider,
81
+ base_url: Optional[str] = None,
82
+ timeout_seconds: Optional[float] = None,
83
+ client: httpx.Client | None = None,
76
84
  ) -> None:
77
85
  s = get_settings()
78
86
  self._base_url = normalize_https_base(base_url or str(s.PRICING_SERVICE_URL), enforce_https=False)
@@ -81,7 +89,11 @@ class PricingService:
81
89
  self._token_provider = token_provider
82
90
 
83
91
  def calculate(self, items: list[CalculatePriceIn], response: Literal["list", "dict"] = "dict") -> CalculatePriceOut:
84
- body = {"items": [i.model_dump() for i in items]}
92
+ body = json.dumps(
93
+ {"items": [i.model_dump() for i in items]},
94
+ cls=DecimalEncoder
95
+ )
96
+ body = json.loads(body)
85
97
 
86
98
  r = self._client.post(
87
99
  f"{self._base_url}/price/calculate",
@@ -65,11 +65,11 @@ def user_authenticated(func):
65
65
 
66
66
 
67
67
  def user_has_access_func(*, permissions=None):
68
- if bypass_authz():
69
- return True
70
68
  request = current_request()
71
69
  if not current_user_id():
72
70
  raise UnauthorizedException()
71
+ if bypass_authz():
72
+ return True
73
73
  if not get_auth_service().has_access(request.state.token, permissions=permissions):
74
74
  raise ForbiddenException(f"Forbidden {permissions}")
75
75
  return True
@@ -111,3 +111,22 @@ def client_or_user_has_access(*, permissions=None, client_permissions=None):
111
111
  return wrapper
112
112
 
113
113
  return decorator
114
+
115
+
116
+ def is_permitted_user(permissions=None):
117
+ def check_permissions():
118
+ try:
119
+ if bypass_authz():
120
+ return True
121
+ request = current_request()
122
+ if not current_user_id():
123
+ raise UnauthorizedException()
124
+ if not get_auth_service().has_access(request.state.token, permissions=permissions):
125
+ raise ForbiddenException(f"Forbidden {permissions}")
126
+ return True
127
+ except ForbiddenException:
128
+ return False
129
+ except UnauthorizedException:
130
+ return False
131
+
132
+ return check_permissions
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