documente_shared 0.1.201__tar.gz → 0.1.202__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 (130) hide show
  1. {documente_shared-0.1.201 → documente_shared-0.1.202}/PKG-INFO +1 -1
  2. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/uif_registry.py +16 -0
  3. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/helpers/values.py +20 -5
  4. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/uif_registry.py +1 -0
  5. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_uif_registry.py +3 -0
  6. {documente_shared-0.1.201 → documente_shared-0.1.202}/pyproject.toml +1 -1
  7. {documente_shared-0.1.201 → documente_shared-0.1.202}/uv.lock +1 -1
  8. {documente_shared-0.1.201 → documente_shared-0.1.202}/.claude/commands/commit.md +0 -0
  9. {documente_shared-0.1.201 → documente_shared-0.1.202}/.github/workflows/publish.yml +0 -0
  10. {documente_shared-0.1.201 → documente_shared-0.1.202}/.gitignore +0 -0
  11. {documente_shared-0.1.201 → documente_shared-0.1.202}/.vscode/settings.json +0 -0
  12. {documente_shared-0.1.201 → documente_shared-0.1.202}/Dockerfile +0 -0
  13. {documente_shared-0.1.201 → documente_shared-0.1.202}/Makefile +0 -0
  14. {documente_shared-0.1.201 → documente_shared-0.1.202}/README.md +0 -0
  15. {documente_shared-0.1.201 → documente_shared-0.1.202}/__init__.py +0 -0
  16. {documente_shared-0.1.201 → documente_shared-0.1.202}/cases.py +0 -0
  17. {documente_shared-0.1.201 → documente_shared-0.1.202}/docker-compose.yml +0 -0
  18. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/__init__.py +0 -0
  19. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/__init__.py +0 -0
  20. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/dates.py +0 -0
  21. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/digest.py +0 -0
  22. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/exceptions.py +0 -0
  23. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/files.py +0 -0
  24. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/json.py +0 -0
  25. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/logging.py +0 -0
  26. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/numbers.py +0 -0
  27. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/payloads.py +0 -0
  28. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/query_params.py +0 -0
  29. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/retry_utils.py +0 -0
  30. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/time_utils.py +0 -0
  31. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/application/timezone.py +0 -0
  32. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/__init__.py +0 -0
  33. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/base_enum.py +0 -0
  34. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/constants.py +0 -0
  35. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/__init__.py +0 -0
  36. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/document.py +0 -0
  37. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/document_metadata.py +0 -0
  38. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/document_type.py +0 -0
  39. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/in_memory_document.py +0 -0
  40. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/layout.py +0 -0
  41. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_case.py +0 -0
  42. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_case_filters.py +0 -0
  43. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_case_item.py +0 -0
  44. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_case_item_filters.py +0 -0
  45. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_documents.py +0 -0
  46. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_event.py +0 -0
  47. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/processing_record.py +0 -0
  48. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/scaling.py +0 -0
  49. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/workspace.py +0 -0
  50. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/workspace_document.py +0 -0
  51. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/entities/workspace_document_page.py +0 -0
  52. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/__init__.py +0 -0
  53. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/circular_oficio.py +0 -0
  54. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/common.py +0 -0
  55. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/document.py +0 -0
  56. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/document_type_record.py +0 -0
  57. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/processing_case.py +0 -0
  58. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/processing_case_validator.py +0 -0
  59. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/vnext.py +0 -0
  60. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/enums/workspace.py +0 -0
  61. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/exceptions.py +0 -0
  62. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/filters/__init__.py +0 -0
  63. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/filters/document_type.py +0 -0
  64. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/filters/workspace.py +0 -0
  65. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/filters/workspace_document.py +0 -0
  66. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/filters/workspace_document_page.py +0 -0
  67. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/helpers/__init__.py +0 -0
  68. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/helpers/dicts.py +0 -0
  69. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/helpers/encoding.py +0 -0
  70. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/helpers/lists.py +0 -0
  71. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/interfaces/__init__.py +0 -0
  72. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/interfaces/queue.py +0 -0
  73. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/interfaces/scaling.py +0 -0
  74. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/pagination/__init__.py +0 -0
  75. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/pagination/entities.py +0 -0
  76. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/pagination/response.py +0 -0
  77. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/__init__.py +0 -0
  78. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/document.py +0 -0
  79. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/document_type.py +0 -0
  80. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/processing_case.py +0 -0
  81. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/processing_case_item.py +0 -0
  82. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/processing_record.py +0 -0
  83. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/workspace.py +0 -0
  84. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/workspace_document.py +0 -0
  85. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/domain/repositories/workspace_document_page.py +0 -0
  86. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/__init__.py +0 -0
  87. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/batch_queue.py +0 -0
  88. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/documente_client.py +0 -0
  89. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/dynamo_table.py +0 -0
  90. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/lambdas.py +0 -0
  91. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/__init__.py +0 -0
  92. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/dynamo_document.py +0 -0
  93. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/dynamo_processing_case.py +0 -0
  94. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/dynamo_processing_case_item.py +0 -0
  95. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_document.py +0 -0
  96. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_document_type.py +0 -0
  97. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_processing_case.py +0 -0
  98. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_processing_case_item.py +0 -0
  99. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_processing_record.py +0 -0
  100. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_workspace.py +0 -0
  101. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_workspace_document.py +0 -0
  102. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/http_workspace_document_page.py +0 -0
  103. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/mem_document.py +0 -0
  104. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/mem_processing_case.py +0 -0
  105. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/mem_processing_case_item.py +0 -0
  106. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/repositories/mem_processing_record.py +0 -0
  107. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/s3_bucket.py +0 -0
  108. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/services/__init__.py +0 -0
  109. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/services/http_scaling.py +0 -0
  110. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/infrastructure/sqs_queue.py +0 -0
  111. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/presentation/__init__.py +0 -0
  112. {documente_shared-0.1.201 → documente_shared-0.1.202}/documente_shared/presentation/presenters.py +0 -0
  113. {documente_shared-0.1.201 → documente_shared-0.1.202}/publish.sh +0 -0
  114. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/__init__.py +0 -0
  115. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/__init__.py +0 -0
  116. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/application/__init__.py +0 -0
  117. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/application/test_files.py +0 -0
  118. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/application/test_payloads.py +0 -0
  119. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/conftest.py +0 -0
  120. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/__init__.py +0 -0
  121. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/entities/__init__.py +0 -0
  122. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/entities/test_in_memory_document.py +0 -0
  123. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/entities/test_processing_case.py +0 -0
  124. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/entities/test_processing_case_item.py +0 -0
  125. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/entities/test_processing_record.py +0 -0
  126. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/domain/enums/test_processing_case_validator.py +0 -0
  127. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/infrastructure/__init__.py +0 -0
  128. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/infrastructure/repositories/__init__.py +0 -0
  129. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documente_shared/infrastructure/repositories/test_http_processing_record.py +0 -0
  130. {documente_shared-0.1.201 → documente_shared-0.1.202}/tests/documents.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: documente_shared
3
- Version: 0.1.201
3
+ Version: 0.1.202
4
4
  Summary: Shared utilities for LlamitAI projects
5
5
  Author-email: Tech <tech@llamitai.com>
6
6
  License: MIT
@@ -1,8 +1,10 @@
1
+ import json
1
2
  from dataclasses import dataclass, field
2
3
  from datetime import date, datetime
3
4
  from decimal import Decimal
4
5
  from uuid import UUID, uuid4
5
6
 
7
+ from documente_shared.application.digest import get_file_digest
6
8
  from documente_shared.application.payloads import camel_to_snake, snake_to_camel
7
9
  from documente_shared.domain.helpers.values import (
8
10
  optional_date,
@@ -12,6 +14,8 @@ from documente_shared.domain.helpers.values import (
12
14
  optional_uuid,
13
15
  )
14
16
 
17
+ INSTANCE_FIELDS = frozenset({"uuid", "created_at"})
18
+
15
19
 
16
20
  @dataclass
17
21
  class UIFRegistry:
@@ -41,6 +45,18 @@ class UIFRegistry:
41
45
  def is_identifiable(self) -> bool:
42
46
  return bool(self.full_name)
43
47
 
48
+ @property
49
+ def business_fields(self) -> dict:
50
+ return {
51
+ field_name: value
52
+ for field_name, value in self.to_dict.items()
53
+ if field_name not in INSTANCE_FIELDS
54
+ }
55
+
56
+ @property
57
+ def digest(self) -> str:
58
+ return get_file_digest(json.dumps(self.business_fields, sort_keys=True).encode())
59
+
44
60
  @property
45
61
  def to_dict(self) -> dict:
46
62
  return {
@@ -1,3 +1,4 @@
1
+ from contextlib import suppress
1
2
  from datetime import date, datetime
2
3
  from decimal import Decimal, InvalidOperation
3
4
  from uuid import UUID
@@ -31,17 +32,31 @@ def optional_uuid(input_value: object | None = None) -> UUID | None:
31
32
  return None
32
33
 
33
34
 
34
- def optional_date(input_value: object | None = None) -> date | None:
35
+ def _date_from_formats(raw_value: str, formats: tuple[str, ...]) -> date | None:
36
+ for date_format in formats:
37
+ with suppress(ValueError):
38
+ return datetime.strptime(raw_value, date_format).date() # noqa: DTZ007
39
+ return None
40
+
41
+
42
+ def optional_date(
43
+ input_value: object | None = None,
44
+ formats: tuple[str, ...] = (),
45
+ ) -> date | None:
35
46
  if input_value is None:
36
47
  return None
37
48
  if isinstance(input_value, datetime):
38
49
  return input_value.date()
39
50
  if isinstance(input_value, date):
40
51
  return input_value
41
- try:
42
- return date.fromisoformat(str(input_value))
43
- except ValueError:
44
- return None
52
+
53
+ raw_value = str(input_value).strip()
54
+ parsed_date = _date_from_formats(raw_value, formats)
55
+ if parsed_date:
56
+ return parsed_date
57
+ with suppress(ValueError):
58
+ return date.fromisoformat(raw_value)
59
+ return None
45
60
 
46
61
 
47
62
  def optional_datetime(input_value: object | None = None) -> datetime | None:
@@ -9,5 +9,6 @@ class UIFRegistryRepository(ABC):
9
9
  self,
10
10
  document_digest: str,
11
11
  registries: list[UIFRegistry],
12
+ replace: bool = True,
12
13
  ) -> list[UIFRegistry]:
13
14
  raise NotImplementedError
@@ -22,15 +22,18 @@ class HttpUIFRegistryRepository(
22
22
  self,
23
23
  document_digest: str,
24
24
  registries: list[UIFRegistry],
25
+ replace: bool = True,
25
26
  ) -> list[UIFRegistry]:
26
27
  payload = {
27
28
  "document_digest": document_digest,
28
29
  "registries": [registry.to_payload for registry in registries],
30
+ "replace": replace,
29
31
  }
30
32
  logger.info(
31
33
  "[shared.uif_registry.persisting]",
32
34
  document_digest=document_digest,
33
35
  registries=len(registries),
36
+ replace=replace,
34
37
  )
35
38
  response: Response = self.session.post(
36
39
  url=f"{self.api_url}/v1/documents/uif-registry/",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "documente_shared"
3
- version = "0.1.201"
3
+ version = "0.1.202"
4
4
  description = "Shared utilities for LlamitAI projects"
5
5
  authors = [{ name = "Tech", email = "tech@llamitai.com" }]
6
6
  license = { text = "MIT" }
@@ -154,7 +154,7 @@ wheels = [
154
154
 
155
155
  [[package]]
156
156
  name = "documente-shared"
157
- version = "0.1.201"
157
+ version = "0.1.202"
158
158
  source = { editable = "." }
159
159
  dependencies = [
160
160
  { name = "boto3" },