nlbone 0.8.3__tar.gz → 0.8.4__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.8.3 → nlbone-0.8.4}/PKG-INFO +1 -1
  2. {nlbone-0.8.3 → nlbone-0.8.4}/pyproject.toml +1 -1
  3. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/pagination/offset_base.py +48 -25
  4. {nlbone-0.8.3 → nlbone-0.8.4}/.gitignore +0 -0
  5. {nlbone-0.8.3 → nlbone-0.8.4}/LICENSE +0 -0
  6. {nlbone-0.8.3 → nlbone-0.8.4}/README.md +0 -0
  7. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/__init__.py +0 -0
  8. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/__init__.py +0 -0
  9. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/auth/__init__.py +0 -0
  10. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/auth/auth_service.py +0 -0
  11. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/auth/keycloak.py +0 -0
  12. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/auth/token_provider.py +0 -0
  13. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/cache/__init__.py +0 -0
  14. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/cache/async_redis.py +0 -0
  15. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/cache/memory.py +0 -0
  16. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/cache/pubsub_listener.py +0 -0
  17. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/cache/redis.py +0 -0
  18. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/__init__.py +0 -0
  19. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/__init__.py +0 -0
  20. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/audit.py +0 -0
  21. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/base.py +0 -0
  22. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/engine.py +0 -0
  23. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/query_builder.py +0 -0
  24. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/repository.py +0 -0
  25. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/schema.py +0 -0
  26. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/types.py +0 -0
  27. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/postgres/uow.py +0 -0
  28. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/redis/__init__.py +0 -0
  29. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/db/redis/client.py +0 -0
  30. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/__init__.py +0 -0
  31. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/pricing/__init__.py +0 -0
  32. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/pricing/pricing_service.py +0 -0
  33. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/uploadchi/__init__.py +0 -0
  34. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/uploadchi/uploadchi.py +0 -0
  35. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/http_clients/uploadchi/uploadchi_async.py +0 -0
  36. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/i18n/__init__.py +0 -0
  37. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/i18n/engine.py +0 -0
  38. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/i18n/loaders.py +0 -0
  39. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/i18n/locales/fa-IR.json +0 -0
  40. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/messaging/__init__.py +0 -0
  41. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/messaging/event_bus.py +0 -0
  42. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/messaging/rabbitmq.py +0 -0
  43. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/outbox/__init__.py +0 -0
  44. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/outbox/outbox_consumer.py +0 -0
  45. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/outbox/outbox_repo.py +0 -0
  46. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/percolation/__init__.py +0 -0
  47. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/percolation/connection.py +0 -0
  48. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/repositories/__init__.py +0 -0
  49. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/snowflake.py +0 -0
  50. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/ticketing/__init__.py +0 -0
  51. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/adapters/ticketing/client.py +0 -0
  52. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/config/__init__.py +0 -0
  53. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/config/logging.py +0 -0
  54. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/config/settings.py +0 -0
  55. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/container.py +0 -0
  56. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/__init__.py +0 -0
  57. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/__init__.py +0 -0
  58. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/base_worker.py +0 -0
  59. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/bus.py +0 -0
  60. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/di.py +0 -0
  61. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/registry.py +0 -0
  62. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/services/__init__.py +0 -0
  63. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/application/use_case.py +0 -0
  64. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/domain/__init__.py +0 -0
  65. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/domain/base.py +0 -0
  66. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/domain/models.py +0 -0
  67. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/__init__.py +0 -0
  68. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/auth.py +0 -0
  69. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/cache.py +0 -0
  70. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/event_bus.py +0 -0
  71. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/files.py +0 -0
  72. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/outbox.py +0 -0
  73. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/repository.py +0 -0
  74. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/translation.py +0 -0
  75. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/core/ports/uow.py +0 -0
  76. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/__init__.py +0 -0
  77. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/__init__.py +0 -0
  78. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/__init__.py +0 -0
  79. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/assembler.py +0 -0
  80. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/default_field_rules/__init__.py +0 -0
  81. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/default_field_rules/image_field_rules.py +0 -0
  82. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/field_registry.py +0 -0
  83. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/additional_filed/resolver.py +0 -0
  84. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/__init__.py +0 -0
  85. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/async_auth.py +0 -0
  86. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/auth.py +0 -0
  87. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/client_credential.py +0 -0
  88. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/db.py +0 -0
  89. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/dependencies/uow.py +0 -0
  90. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/exception_handlers.py +0 -0
  91. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/exceptions.py +0 -0
  92. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/middleware/__init__.py +0 -0
  93. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/middleware/access_log.py +0 -0
  94. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/middleware/add_request_context.py +0 -0
  95. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/middleware/authentication.py +0 -0
  96. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/pagination/__init__.py +0 -0
  97. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/routers.py +0 -0
  98. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/schema/__init__.py +0 -0
  99. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/schema/adaptive_schema.py +0 -0
  100. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/schema/base_response_model.py +0 -0
  101. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/api/schemas.py +0 -0
  102. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/cli/__init__.py +0 -0
  103. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/cli/crypto.py +0 -0
  104. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/cli/init_db.py +0 -0
  105. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/cli/main.py +0 -0
  106. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/cli/ticket.py +0 -0
  107. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/jobs/__init__.py +0 -0
  108. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/jobs/dispatch_outbox.py +0 -0
  109. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/interfaces/jobs/sync_tokens.py +0 -0
  110. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/types.py +0 -0
  111. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/__init__.py +0 -0
  112. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/cache.py +0 -0
  113. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/cache_keys.py +0 -0
  114. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/cache_registry.py +0 -0
  115. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/context.py +0 -0
  116. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/crypto.py +0 -0
  117. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/flatten_dict.py +0 -0
  118. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/flatten_sqlalchemy_result.py +0 -0
  119. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/http.py +0 -0
  120. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/normalize_mobile.py +0 -0
  121. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/read_files.py +0 -0
  122. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/redactor.py +0 -0
  123. {nlbone-0.8.3 → nlbone-0.8.4}/src/nlbone/utils/time.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.8.3
3
+ Version: 0.8.4
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.8.3"
7
+ version = "0.8.4"
8
8
  description = "Backbone package for interfaces and infrastructure in Python projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,7 @@
1
1
  import json
2
+ import re
2
3
  from math import ceil
3
- from typing import Any, List, Optional
4
+ from typing import Any, List, Optional, Dict, Union
4
5
 
5
6
  from fastapi import Query
6
7
 
@@ -53,36 +54,58 @@ class PaginateRequest:
53
54
  return result
54
55
 
55
56
  @staticmethod
56
- def _parse_filters(filters: str) -> dict[str, Any]:
57
+ def _parse_filters(filters: str) -> Dict[str, Any]:
57
58
  if not filters:
58
59
  return {}
59
- # JSON object or array
60
- try:
61
- if filters.strip().startswith(("{", "[")):
62
- data = json.loads(filters)
60
+
61
+ stripped_filters = filters.strip()
62
+
63
+ if stripped_filters.startswith(("{", "[")):
64
+ try:
65
+ data = json.loads(stripped_filters)
63
66
  return dict(data) if isinstance(data, dict) else {"$": data}
64
- except Exception:
65
- pass
67
+ except (json.JSONDecodeError, TypeError):
68
+ pass
69
+
70
+ pattern = re.compile(r"(?P<key>[^:,]+):\s*(?P<value>\[.*?\]|[^,]+)")
71
+ filters_dict: Dict[str, Any] = {}
72
+
73
+ for match in pattern.finditer(stripped_filters):
74
+ key = match.group("key").strip().strip("'\"")
75
+ value_raw = match.group("value").strip()
76
+
77
+ filters_dict[key] = PaginateRequest._process_value(value_raw)
66
78
 
67
- # CSV key:value pairs
68
- filters_dict: dict[str, Any] = {}
69
- for part in filters.split(","):
70
- part = part.strip()
71
- if not part or ":" not in part:
72
- continue
73
- key, value = part.split(":", 1)
74
- key = key.strip().strip("'\"")
75
- value_raw = value.strip().strip("'\"")
76
- # cast common primitives
77
- if value_raw.isdigit():
78
- value_cast: Any = int(value_raw)
79
- elif value_raw.lower() in {"true", "false"}:
80
- value_cast = value_raw.lower() == "true"
81
- else:
82
- value_cast = value_raw
83
- filters_dict[key] = value_cast
84
79
  return filters_dict
85
80
 
81
+ @staticmethod
82
+ def _process_value(value: str) -> Any:
83
+ if value.startswith("[") and value.endswith("]"):
84
+ content = value[1:-1]
85
+ if not content.strip():
86
+ return []
87
+ return [PaginateRequest._cast_primitive(item.strip()) for item in content.split(",")]
88
+
89
+ return PaginateRequest._cast_primitive(value)
90
+
91
+ @staticmethod
92
+ def _cast_primitive(value: str) -> Union[int, float, bool, str]:
93
+ clean_value = value.strip("'\"")
94
+ lower_value = clean_value.lower()
95
+
96
+ if lower_value == "true":
97
+ return True
98
+ if lower_value == "false":
99
+ return False
100
+
101
+ if clean_value.isdigit():
102
+ return int(clean_value)
103
+
104
+ try:
105
+ return float(clean_value)
106
+ except ValueError:
107
+ return clean_value
108
+
86
109
  def remove_deleted(self, deleted_at_field: str = "deleted_at"):
87
110
  self.filters = self.filters | {"deleted_at": None}
88
111
 
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