documente_shared 0.1.183__tar.gz → 0.1.185b0__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 (124) hide show
  1. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/PKG-INFO +1 -1
  2. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/query_params.py +0 -0
  3. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/retry_utils.py +20 -0
  4. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/constants.py +6 -1
  5. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/document.py +5 -1
  6. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/documente_client.py +23 -0
  7. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/pyproject.toml +1 -1
  8. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/uv.lock +1 -1
  9. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/.github/workflows/publish.yml +0 -0
  10. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/.gitignore +0 -0
  11. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/.vscode/settings.json +0 -0
  12. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/Dockerfile +0 -0
  13. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/Makefile +0 -0
  14. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/README.md +0 -0
  15. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/__init__.py +0 -0
  16. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/cases.py +0 -0
  17. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/docker-compose.yml +0 -0
  18. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/__init__.py +0 -0
  19. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/__init__.py +0 -0
  20. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/dates.py +0 -0
  21. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/digest.py +0 -0
  22. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/exceptions.py +0 -0
  23. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/files.py +0 -0
  24. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/json.py +0 -0
  25. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/logging.py +0 -0
  26. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/numbers.py +0 -0
  27. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/payloads.py +0 -0
  28. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/time_utils.py +0 -0
  29. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/application/timezone.py +0 -0
  30. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/__init__.py +0 -0
  31. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/base_enum.py +0 -0
  32. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/__init__.py +0 -0
  33. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/document_metadata.py +0 -0
  34. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/document_type.py +0 -0
  35. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/in_memory_document.py +0 -0
  36. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_case.py +0 -0
  37. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_case_filters.py +0 -0
  38. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_case_item.py +0 -0
  39. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_case_item_filters.py +0 -0
  40. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_documents.py +0 -0
  41. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_event.py +0 -0
  42. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/processing_record.py +0 -0
  43. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/scaling.py +0 -0
  44. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/workspace.py +0 -0
  45. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/workspace_document.py +0 -0
  46. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/entities/workspace_document_page.py +0 -0
  47. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/__init__.py +0 -0
  48. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/circular_oficio.py +0 -0
  49. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/common.py +0 -0
  50. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/document.py +0 -0
  51. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/document_type_record.py +0 -0
  52. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/processing_case.py +0 -0
  53. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/processing_case_validator.py +0 -0
  54. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/enums/workspace.py +0 -0
  55. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/exceptions.py +0 -0
  56. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/filters/__init__.py +0 -0
  57. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/filters/document_type.py +0 -0
  58. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/filters/workspace.py +0 -0
  59. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/filters/workspace_document.py +0 -0
  60. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/filters/workspace_document_page.py +0 -0
  61. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/helpers/__init__.py +0 -0
  62. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/helpers/dicts.py +0 -0
  63. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/helpers/encoding.py +0 -0
  64. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/helpers/lists.py +0 -0
  65. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/helpers/values.py +0 -0
  66. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/interfaces/__init__.py +0 -0
  67. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/interfaces/queue.py +0 -0
  68. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/interfaces/scaling.py +0 -0
  69. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/pagination/__init__.py +0 -0
  70. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/pagination/entities.py +0 -0
  71. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/pagination/response.py +0 -0
  72. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/__init__.py +0 -0
  73. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/document.py +0 -0
  74. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/document_type.py +0 -0
  75. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/processing_case.py +0 -0
  76. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/processing_case_item.py +0 -0
  77. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/processing_record.py +0 -0
  78. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/workspace.py +0 -0
  79. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/workspace_document.py +0 -0
  80. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/domain/repositories/workspace_document_page.py +0 -0
  81. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/__init__.py +0 -0
  82. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/batch_queue.py +0 -0
  83. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/dynamo_table.py +0 -0
  84. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/lambdas.py +0 -0
  85. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/__init__.py +0 -0
  86. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/dynamo_document.py +0 -0
  87. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/dynamo_processing_case.py +0 -0
  88. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/dynamo_processing_case_item.py +0 -0
  89. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_document.py +0 -0
  90. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_document_type.py +0 -0
  91. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_processing_case.py +0 -0
  92. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_processing_case_item.py +0 -0
  93. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_processing_record.py +0 -0
  94. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_workspace.py +0 -0
  95. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_workspace_document.py +0 -0
  96. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/http_workspace_document_page.py +0 -0
  97. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/mem_document.py +0 -0
  98. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/mem_processing_case.py +0 -0
  99. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/mem_processing_case_item.py +0 -0
  100. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/repositories/mem_processing_record.py +0 -0
  101. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/s3_bucket.py +0 -0
  102. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/services/__init__.py +0 -0
  103. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/services/http_scaling.py +0 -0
  104. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/infrastructure/sqs_queue.py +0 -0
  105. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/presentation/__init__.py +0 -0
  106. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/documente_shared/presentation/presenters.py +0 -0
  107. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/publish.sh +0 -0
  108. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/__init__.py +0 -0
  109. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/__init__.py +0 -0
  110. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/application/__init__.py +0 -0
  111. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/application/test_files.py +0 -0
  112. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/application/test_payloads.py +0 -0
  113. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/conftest.py +0 -0
  114. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/__init__.py +0 -0
  115. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/entities/__init__.py +0 -0
  116. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/entities/test_in_memory_document.py +0 -0
  117. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/entities/test_processing_case.py +0 -0
  118. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/entities/test_processing_case_item.py +0 -0
  119. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/entities/test_processing_record.py +0 -0
  120. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/domain/enums/test_processing_case_validator.py +0 -0
  121. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/infrastructure/__init__.py +0 -0
  122. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/infrastructure/repositories/__init__.py +0 -0
  123. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documente_shared/infrastructure/repositories/test_http_processing_record.py +0 -0
  124. {documente_shared-0.1.183 → documente_shared-0.1.185b0}/tests/documents.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documente_shared
3
- Version: 0.1.183
3
+ Version: 0.1.185b0
4
4
  Summary: Shared utilities for LlamitAI projects
5
5
  Author-email: Tech <tech@llamitai.com>
6
6
  License: MIT
@@ -2,11 +2,31 @@ import time
2
2
  import random
3
3
  from functools import wraps
4
4
  from typing import Optional, Callable
5
+ from urllib3.util.retry import Retry
5
6
  import structlog
6
7
 
7
8
  logger = structlog.get_logger()
8
9
 
9
10
 
11
+ class HttpRetry(Retry):
12
+ def increment(self, method=None, url=None, response=None, error=None, **kwargs):
13
+ if response is not None:
14
+ logger.warning(
15
+ "[shared.http.retry]",
16
+ method=method,
17
+ url=url,
18
+ status_code=response.status,
19
+ )
20
+ elif error is not None:
21
+ logger.warning(
22
+ "[shared.http.retry_connection_error]",
23
+ method=method,
24
+ url=url,
25
+ error=str(error),
26
+ )
27
+ return super().increment(method=method, url=url, response=response, error=error, **kwargs)
28
+
29
+
10
30
  def retry_on_size_integrity(base_delay: float = 0.8, max_retries: int = 3):
11
31
  def decorator(func: Callable):
12
32
  @wraps(func)
@@ -7,4 +7,9 @@ la_paz_tz = ZoneInfo("America/La_Paz")
7
7
  DOCUMENTE_API_URL = environ.get("DOCUMENTE_API_URL")
8
8
  DOCUMENTE_API_KEY = environ.get("DOCUMENTE_API_KEY")
9
9
 
10
- DEFAULT_PAGINATION_PAGE_SIZE = 50
10
+ DEFAULT_PAGINATION_PAGE_SIZE = 50
11
+
12
+ HTTP_RETRY_TOTAL = 3
13
+ HTTP_RETRY_BACKOFF_FACTOR = 0.5
14
+ HTTP_RETRY_BACKOFF_JITTER = 0.25
15
+ HTTP_RETRY_STATUS_FORCELIST = frozenset([429, 500, 502, 503, 504])
@@ -36,6 +36,7 @@ class DocumentProcessing(object):
36
36
  processed_csv_path: Optional[str] = None
37
37
  processed_csv_bytes: Optional[bytes] = None
38
38
  processed_xlsx_path: Optional[str] = None
39
+ processed_digest: str | None = None
39
40
  processed_xlsx_bytes: Optional[bytes] = None
40
41
  processed_json_path: Optional[str] = None
41
42
  processed_json_bytes: Optional[bytes] = None
@@ -275,6 +276,7 @@ class DocumentProcessing(object):
275
276
  'locked_by_admin': self.locked_by_admin,
276
277
  'processed_csv_path': self.processed_csv_path,
277
278
  'processed_xlsx_path': self.processed_xlsx_path,
279
+ 'processed_digest': self.processed_digest,
278
280
  'processed_json_path': self.processed_json_path,
279
281
  'processed_metadata_path': self.processed_metadata_path,
280
282
  'processing_time': (
@@ -343,6 +345,7 @@ class DocumentProcessing(object):
343
345
  'processed_csv_bytes',
344
346
  'processed_xlsx_path',
345
347
  'processed_xlsx_bytes',
348
+ 'processed_digest',
346
349
  'processed_json_path',
347
350
  'processed_json_bytes',
348
351
  'processed_metadata_path',
@@ -358,7 +361,7 @@ class DocumentProcessing(object):
358
361
  'feedback',
359
362
  'metadata',
360
363
  'document_size',
361
- 'document_pages'
364
+ 'document_pages',
362
365
  'completed_at',
363
366
  ]
364
367
  for _property in instance_properties:
@@ -390,6 +393,7 @@ class DocumentProcessing(object):
390
393
  locked_by_admin=data.get('locked_by_admin'),
391
394
  processed_csv_path=data.get('processed_csv_path'),
392
395
  processed_xlsx_path=data.get('processed_xlsx_path'),
396
+ processed_digest=data.get('processed_digest'),
393
397
  processed_json_path=data.get('processed_json_path'),
394
398
  processed_metadata_path=data.get('processed_metadata_path'),
395
399
  processing_time=(
@@ -1,9 +1,21 @@
1
1
  from contextlib import contextmanager
2
2
  from dataclasses import dataclass
3
3
  from requests import Response, Session
4
+ from requests.adapters import HTTPAdapter
4
5
  from typing import Callable, Optional
5
6
 
7
+ import structlog
8
+
6
9
  from documente_shared.application.payloads import camel_to_snake
10
+ from documente_shared.application.retry_utils import HttpRetry
11
+ from documente_shared.domain.constants import (
12
+ HTTP_RETRY_BACKOFF_FACTOR,
13
+ HTTP_RETRY_BACKOFF_JITTER,
14
+ HTTP_RETRY_STATUS_FORCELIST,
15
+ HTTP_RETRY_TOTAL,
16
+ )
17
+
18
+ logger = structlog.get_logger()
7
19
 
8
20
 
9
21
  @dataclass
@@ -19,6 +31,17 @@ class DocumenteClientMixin(object):
19
31
  def _get_session(self) -> Session:
20
32
  session = Session()
21
33
  session.headers.update(self.get_common_headers())
34
+ retry_strategy = HttpRetry(
35
+ total=HTTP_RETRY_TOTAL,
36
+ backoff_factor=HTTP_RETRY_BACKOFF_FACTOR,
37
+ backoff_jitter=HTTP_RETRY_BACKOFF_JITTER,
38
+ status_forcelist=HTTP_RETRY_STATUS_FORCELIST,
39
+ allowed_methods=["GET", "POST", "PUT", "PATCH", "DELETE"],
40
+ raise_on_status=False,
41
+ )
42
+ adapter = HTTPAdapter(max_retries=retry_strategy)
43
+ session.mount("http://", adapter)
44
+ session.mount("https://", adapter)
22
45
  return session
23
46
 
24
47
  def get_common_headers(self) -> dict:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "documente_shared"
3
- version = "0.1.183"
3
+ version = "0.1.185b"
4
4
  description = "Shared utilities for LlamitAI projects"
5
5
  authors = [{ name = "Tech", email = "tech@llamitai.com" }]
6
6
  license = { text = "MIT" }
@@ -138,7 +138,7 @@ wheels = [
138
138
 
139
139
  [[package]]
140
140
  name = "documente-shared"
141
- version = "0.1.183"
141
+ version = "0.1.185b0"
142
142
  source = { editable = "." }
143
143
  dependencies = [
144
144
  { name = "boto3" },