documente_shared 0.1.185b4__tar.gz → 0.1.186__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.185b4 → documente_shared-0.1.186}/PKG-INFO +2 -1
  2. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/query_params.py +0 -0
  3. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/constants.py +4 -1
  4. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/document.py +1 -5
  5. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_case_item.py +0 -4
  6. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/documente_client.py +28 -0
  7. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/pyproject.toml +2 -1
  8. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/uv.lock +12 -1
  9. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/.github/workflows/publish.yml +0 -0
  10. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/.gitignore +0 -0
  11. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/.vscode/settings.json +0 -0
  12. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/Dockerfile +0 -0
  13. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/Makefile +0 -0
  14. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/README.md +0 -0
  15. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/__init__.py +0 -0
  16. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/cases.py +0 -0
  17. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/docker-compose.yml +0 -0
  18. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/__init__.py +0 -0
  19. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/__init__.py +0 -0
  20. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/dates.py +0 -0
  21. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/digest.py +0 -0
  22. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/exceptions.py +0 -0
  23. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/files.py +0 -0
  24. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/json.py +0 -0
  25. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/logging.py +0 -0
  26. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/numbers.py +0 -0
  27. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/payloads.py +0 -0
  28. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/retry_utils.py +1 -1
  29. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/time_utils.py +0 -0
  30. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/application/timezone.py +0 -0
  31. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/__init__.py +0 -0
  32. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/base_enum.py +0 -0
  33. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/__init__.py +0 -0
  34. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/document_metadata.py +0 -0
  35. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/document_type.py +0 -0
  36. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/in_memory_document.py +0 -0
  37. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_case.py +0 -0
  38. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_case_filters.py +0 -0
  39. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_case_item_filters.py +0 -0
  40. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_documents.py +0 -0
  41. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_event.py +0 -0
  42. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/processing_record.py +0 -0
  43. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/scaling.py +0 -0
  44. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/workspace.py +0 -0
  45. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/workspace_document.py +0 -0
  46. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/entities/workspace_document_page.py +0 -0
  47. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/__init__.py +0 -0
  48. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/circular_oficio.py +0 -0
  49. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/common.py +0 -0
  50. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/document.py +0 -0
  51. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/document_type_record.py +0 -0
  52. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/processing_case.py +0 -0
  53. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/processing_case_validator.py +0 -0
  54. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/enums/workspace.py +0 -0
  55. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/exceptions.py +0 -0
  56. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/filters/__init__.py +0 -0
  57. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/filters/document_type.py +0 -0
  58. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/filters/workspace.py +0 -0
  59. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/filters/workspace_document.py +0 -0
  60. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/filters/workspace_document_page.py +0 -0
  61. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/helpers/__init__.py +0 -0
  62. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/helpers/dicts.py +0 -0
  63. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/helpers/encoding.py +0 -0
  64. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/helpers/lists.py +0 -0
  65. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/helpers/values.py +0 -0
  66. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/interfaces/__init__.py +0 -0
  67. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/interfaces/queue.py +0 -0
  68. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/interfaces/scaling.py +0 -0
  69. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/pagination/__init__.py +0 -0
  70. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/pagination/entities.py +0 -0
  71. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/pagination/response.py +0 -0
  72. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/__init__.py +0 -0
  73. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/document.py +0 -0
  74. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/document_type.py +0 -0
  75. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/processing_case.py +0 -0
  76. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/processing_case_item.py +0 -0
  77. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/processing_record.py +0 -0
  78. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/workspace.py +0 -0
  79. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/workspace_document.py +0 -0
  80. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/domain/repositories/workspace_document_page.py +0 -0
  81. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/__init__.py +0 -0
  82. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/batch_queue.py +0 -0
  83. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/dynamo_table.py +0 -0
  84. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/lambdas.py +0 -0
  85. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/__init__.py +0 -0
  86. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/dynamo_document.py +0 -0
  87. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/dynamo_processing_case.py +0 -0
  88. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/dynamo_processing_case_item.py +0 -0
  89. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_document.py +0 -0
  90. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_document_type.py +0 -0
  91. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_processing_case.py +0 -0
  92. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_processing_case_item.py +0 -0
  93. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_processing_record.py +0 -0
  94. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_workspace.py +0 -0
  95. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_workspace_document.py +0 -0
  96. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/http_workspace_document_page.py +0 -0
  97. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/mem_document.py +0 -0
  98. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/mem_processing_case.py +0 -0
  99. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/mem_processing_case_item.py +0 -0
  100. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/repositories/mem_processing_record.py +0 -0
  101. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/s3_bucket.py +0 -0
  102. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/services/__init__.py +0 -0
  103. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/services/http_scaling.py +0 -0
  104. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/infrastructure/sqs_queue.py +0 -0
  105. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/presentation/__init__.py +0 -0
  106. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/documente_shared/presentation/presenters.py +0 -0
  107. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/publish.sh +0 -0
  108. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/__init__.py +0 -0
  109. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/__init__.py +0 -0
  110. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/application/__init__.py +0 -0
  111. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/application/test_files.py +0 -0
  112. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/application/test_payloads.py +0 -0
  113. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/conftest.py +0 -0
  114. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/__init__.py +0 -0
  115. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/entities/__init__.py +0 -0
  116. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/entities/test_in_memory_document.py +0 -0
  117. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/entities/test_processing_case.py +0 -0
  118. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/entities/test_processing_case_item.py +0 -0
  119. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/entities/test_processing_record.py +0 -0
  120. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/domain/enums/test_processing_case_validator.py +0 -0
  121. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/infrastructure/__init__.py +0 -0
  122. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/infrastructure/repositories/__init__.py +0 -0
  123. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documente_shared/infrastructure/repositories/test_http_processing_record.py +0 -0
  124. {documente_shared-0.1.185b4 → documente_shared-0.1.186}/tests/documents.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documente_shared
3
- Version: 0.1.185b4
3
+ Version: 0.1.186
4
4
  Summary: Shared utilities for LlamitAI projects
5
5
  Author-email: Tech <tech@llamitai.com>
6
6
  License: MIT
@@ -11,6 +11,7 @@ Requires-Dist: pydantic>=2.12.5
11
11
  Requires-Dist: requests>=2.32.5
12
12
  Requires-Dist: sentry-sdk>=2.52.0
13
13
  Requires-Dist: structlog>=25.5.0
14
+ Requires-Dist: tenacity>=9.1.4
14
15
  Requires-Dist: unidecode>=1.4.0
15
16
  Description-Content-Type: text/markdown
16
17
 
@@ -7,4 +7,7 @@ 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
@@ -54,7 +54,6 @@ class DocumentProcessing(object):
54
54
  metadata: Optional[dict] = None
55
55
  document_size: Optional[Decimal] = None
56
56
  document_pages: Optional[int] = None
57
- ocr_render_text: Optional[str] = None
58
57
  metadata_items: Optional[List[DocumentProcessingMetadata]] = None
59
58
 
60
59
  def __post_init__(self):
@@ -303,7 +302,6 @@ class DocumentProcessing(object):
303
302
  if self.document_size else None
304
303
  ),
305
304
  'document_pages': self.document_pages,
306
- 'ocr_render_text': self.ocr_render_text,
307
305
  }
308
306
 
309
307
  @property
@@ -365,7 +363,6 @@ class DocumentProcessing(object):
365
363
  'document_size',
366
364
  'document_pages',
367
365
  'completed_at',
368
- 'ocr_render_text',
369
366
  ]
370
367
  for _property in instance_properties:
371
368
  property_value = getattr(new_instance, _property)
@@ -424,7 +421,6 @@ class DocumentProcessing(object):
424
421
  Decimal(data.get('document_size'))
425
422
  if data.get('document_size') else None
426
423
  ),
427
- document_pages=data.get('document_pages'),
428
- ocr_render_text=data.get('ocr_render_text'),
424
+ document_pages=data.get('document_pages')
429
425
  )
430
426
 
@@ -32,7 +32,6 @@ class ProcessingCaseItem(object):
32
32
  completed_at: Optional[datetime] = None
33
33
  feedback: Optional[list | dict] = None
34
34
  metadata: Optional[dict] = None
35
- ocr_render_text: Optional[str] = None
36
35
 
37
36
  def __post_init__(self):
38
37
  self.feedback = self.feedback or []
@@ -108,7 +107,6 @@ class ProcessingCaseItem(object):
108
107
  'completed_at',
109
108
  'feedback',
110
109
  'metadata',
111
- 'ocr_render_text',
112
110
  ]
113
111
  for _property in instance_properties:
114
112
  property_value = getattr(new_instance, _property)
@@ -207,7 +205,6 @@ class ProcessingCaseItem(object):
207
205
  self.completed_at.isoformat()
208
206
  if self.completed_at else None
209
207
  ),
210
- 'ocr_render_text': self.ocr_render_text,
211
208
  }
212
209
 
213
210
  @property
@@ -286,7 +283,6 @@ class ProcessingCaseItem(object):
286
283
  feedback=data.get('feedback'),
287
284
  metadata=data.get('metadata', {}),
288
285
  completed_at=get_datetime_from_data(input_datetime=data.get('completed_at')),
289
- ocr_render_text=data.get('ocr_render_text'),
290
286
  )
291
287
 
292
288
  @classmethod
@@ -1,9 +1,27 @@
1
+ import logging
1
2
  from contextlib import contextmanager
2
3
  from dataclasses import dataclass
3
4
  from requests import Response, Session
5
+ from requests.exceptions import ConnectionError, Timeout
4
6
  from typing import Callable, Optional
7
+ from tenacity import (
8
+ retry,
9
+ retry_if_exception_type,
10
+ stop_after_attempt,
11
+ wait_exponential,
12
+ before_sleep_log,
13
+ )
14
+
15
+ import structlog
5
16
 
6
17
  from documente_shared.application.payloads import camel_to_snake
18
+ from documente_shared.domain.constants import (
19
+ HTTP_RETRY_BACKOFF_FACTOR,
20
+ HTTP_RETRY_TOTAL,
21
+ )
22
+
23
+ logger = structlog.get_logger()
24
+ _stdlib_logger = logging.getLogger(__name__)
7
25
 
8
26
 
9
27
  @dataclass
@@ -19,6 +37,16 @@ class DocumenteClientMixin(object):
19
37
  def _get_session(self) -> Session:
20
38
  session = Session()
21
39
  session.headers.update(self.get_common_headers())
40
+ session.request = retry(
41
+ stop=stop_after_attempt(HTTP_RETRY_TOTAL),
42
+ wait=wait_exponential(multiplier=HTTP_RETRY_BACKOFF_FACTOR),
43
+ retry=(
44
+ retry_if_exception_type(ConnectionError)
45
+ | retry_if_exception_type(Timeout)
46
+ ),
47
+ before_sleep=before_sleep_log(_stdlib_logger, logging.WARNING),
48
+ reraise=True,
49
+ )(session.request)
22
50
  return session
23
51
 
24
52
  def get_common_headers(self) -> dict:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "documente_shared"
3
- version = "0.1.185b4"
3
+ version = "0.1.186"
4
4
  description = "Shared utilities for LlamitAI projects"
5
5
  authors = [{ name = "Tech", email = "tech@llamitai.com" }]
6
6
  license = { text = "MIT" }
@@ -14,6 +14,7 @@ dependencies = [
14
14
  "requests>=2.32.5",
15
15
  "structlog>=25.5.0",
16
16
  "pydantic>=2.12.5",
17
+ "tenacity>=9.1.4",
17
18
  ]
18
19
 
19
20
  [dependency-groups]
@@ -138,7 +138,7 @@ wheels = [
138
138
 
139
139
  [[package]]
140
140
  name = "documente-shared"
141
- version = "0.1.185b4"
141
+ version = "0.1.186"
142
142
  source = { editable = "." }
143
143
  dependencies = [
144
144
  { name = "boto3" },
@@ -147,6 +147,7 @@ dependencies = [
147
147
  { name = "requests" },
148
148
  { name = "sentry-sdk" },
149
149
  { name = "structlog" },
150
+ { name = "tenacity" },
150
151
  { name = "unidecode" },
151
152
  ]
152
153
 
@@ -165,6 +166,7 @@ requires-dist = [
165
166
  { name = "requests", specifier = ">=2.32.5" },
166
167
  { name = "sentry-sdk", specifier = ">=2.52.0" },
167
168
  { name = "structlog", specifier = ">=25.5.0" },
169
+ { name = "tenacity", specifier = ">=9.1.4" },
168
170
  { name = "unidecode", specifier = ">=1.4.0" },
169
171
  ]
170
172
 
@@ -604,6 +606,15 @@ wheels = [
604
606
  { url = "https://files.pythonhosted.org/packages/a8/45/a132b9074aa18e799b891b91ad72133c98d8042c70f6240e4c5f9dabee2f/structlog-25.5.0-py3-none-any.whl", hash = "sha256:a8453e9b9e636ec59bd9e79bbd4a72f025981b3ba0f5837aebf48f02f37a7f9f", size = 72510, upload-time = "2025-10-27T08:28:21.535Z" },
605
607
  ]
606
608
 
609
+ [[package]]
610
+ name = "tenacity"
611
+ version = "9.1.4"
612
+ source = { registry = "https://pypi.org/simple" }
613
+ sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" }
614
+ wheels = [
615
+ { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" },
616
+ ]
617
+
607
618
  [[package]]
608
619
  name = "tomli"
609
620
  version = "2.4.0"
@@ -2,11 +2,11 @@ import time
2
2
  import random
3
3
  from functools import wraps
4
4
  from typing import Optional, Callable
5
+
5
6
  import structlog
6
7
 
7
8
  logger = structlog.get_logger()
8
9
 
9
-
10
10
  def retry_on_size_integrity(base_delay: float = 0.8, max_retries: int = 3):
11
11
  def decorator(func: Callable):
12
12
  @wraps(func)