documente_shared 0.1.79__tar.gz → 0.1.80__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.

Potentially problematic release.


This version of documente_shared might be problematic. Click here for more details.

Files changed (42) hide show
  1. {documente_shared-0.1.79 → documente_shared-0.1.80}/PKG-INFO +1 -1
  2. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_item.py +38 -4
  3. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/repositories/processing_case.py +1 -1
  4. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_processing_case.py +4 -4
  5. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/http_processing_case.py +10 -5
  6. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/http_processing_case_item.py +4 -4
  7. {documente_shared-0.1.79 → documente_shared-0.1.80}/pyproject.toml +1 -1
  8. {documente_shared-0.1.79 → documente_shared-0.1.80}/README.md +0 -0
  9. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/__init__.py +0 -0
  10. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/__init__.py +0 -0
  11. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/digest.py +0 -0
  12. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/exceptions.py +0 -0
  13. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/files.py +0 -0
  14. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/query_params.py +0 -0
  15. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/time_utils.py +0 -0
  16. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/application/timezone.py +0 -0
  17. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/__init__.py +0 -0
  18. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/base_enum.py +0 -0
  19. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/constants.py +0 -0
  20. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/__init__.py +0 -0
  21. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/document.py +0 -0
  22. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/document_metadata.py +0 -0
  23. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/in_memory_result.py +0 -0
  24. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case.py +0 -0
  25. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_filters.py +0 -0
  26. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_item_filters.py +0 -0
  27. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_event.py +0 -0
  28. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/enums/__init__.py +0 -0
  29. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/enums/common.py +0 -0
  30. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/enums/document.py +0 -0
  31. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/enums/processing_case.py +0 -0
  32. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/repositories/__init__.py +0 -0
  33. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/repositories/document.py +0 -0
  34. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/domain/repositories/processing_case_item.py +0 -0
  35. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/__init__.py +0 -0
  36. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/documente_client.py +0 -0
  37. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/dynamo_table.py +0 -0
  38. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/__init__.py +0 -0
  39. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_document.py +0 -0
  40. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_processing_case_item.py +0 -0
  41. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/s3_bucket.py +0 -0
  42. {documente_shared-0.1.79 → documente_shared-0.1.80}/documente_shared/infrastructure/sqs_queue.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: documente_shared
3
- Version: 0.1.79
3
+ Version: 0.1.80
4
4
  Summary: Shared utilities for Documente AI projects
5
5
  License: MIT
6
6
  Author: Tech
@@ -135,12 +135,24 @@ class ProcessingCaseItem(object):
135
135
  str(self.processing_confidence.quantize(Decimal('0.001')))
136
136
  if self.processing_confidence else None
137
137
  ),
138
- 'uploaded_at': self.uploaded_at.isoformat() if self.uploaded_at else None,
139
- 'started_at': self.started_at.isoformat() if self.started_at else None,
140
- 'failed_at': self.failed_at.isoformat() if self.failed_at else None,
138
+ 'uploaded_at': (
139
+ self.uploaded_at.isoformat()
140
+ if self.uploaded_at else None
141
+ ),
142
+ 'started_at': (
143
+ self.started_at.isoformat()
144
+ if self.started_at else None
145
+ ),
146
+ 'failed_at': (
147
+ self.failed_at.isoformat()
148
+ if self.failed_at else None
149
+ ),
141
150
  'feedback': self.feedback,
142
151
  'metadata': self.metadata,
143
- 'completed_at': self.completed_at.isoformat() if self.completed_at else None,
152
+ 'completed_at': (
153
+ self.completed_at.isoformat()
154
+ if self.completed_at else None
155
+ ),
144
156
  }
145
157
 
146
158
  @property
@@ -148,6 +160,15 @@ class ProcessingCaseItem(object):
148
160
  simple_dict = self.to_dict.copy()
149
161
  return simple_dict
150
162
 
163
+ @property
164
+ def to_persist_dict(self) -> dict:
165
+ simple_dict = self.to_dict.copy()
166
+ simple_dict["document_path"] = self.document.file_path if self.document else None
167
+ simple_dict["processed_csv_path"] = self.processed_csv.file_path if self.processed_csv else None
168
+ simple_dict["processed_xlsx_path"] = self.processed_xlsx.file_path if self.processed_xlsx else None
169
+ simple_dict["processed_json_path"] = self.processed_json.file_path if self.processed_json else None
170
+ return simple_dict
171
+
151
172
  def overload(
152
173
  self,
153
174
  new_instance: 'ProcessingCaseItem',
@@ -220,3 +241,16 @@ class ProcessingCaseItem(object):
220
241
  metadata=data.get('metadata', {}),
221
242
  completed_at=get_datetime_from_data(input_datetime=data.get('completed_at')),
222
243
  )
244
+
245
+ @classmethod
246
+ def from_persist_dict(cls, data: dict) -> 'ProcessingCaseItem':
247
+ instance = cls.from_dict(data)
248
+ if "document_path" in data:
249
+ instance.document = InMemoryDocument(file_path=data["document_path"])
250
+ if "processed_csv_path" in data:
251
+ instance.processed_csv = InMemoryDocument(file_path=data["processed_csv_path"])
252
+ if "processed_xlsx_path" in data:
253
+ instance.processed_xlsx = InMemoryDocument(file_path=data["processed_xlsx_path"])
254
+ if "processed_json_path" in data:
255
+ instance.processed_json = InMemoryDocument(file_path=data["processed_json_path"])
256
+ return instance
@@ -8,7 +8,7 @@ from documente_shared.domain.entities.processing_case_filters import ProcessingC
8
8
  class ProcessingCaseRepository(ABC):
9
9
 
10
10
  @abstractmethod
11
- def find(self, uuid: str) -> Optional[ProcessingCase]:
11
+ def find(self, uuid: str, include_items: bool = False) -> Optional[ProcessingCase]:
12
12
  raise NotImplementedError
13
13
 
14
14
  @abstractmethod
@@ -3,7 +3,7 @@ from typing import Optional, List
3
3
  from boto3.dynamodb.conditions import Key
4
4
 
5
5
  from documente_shared.domain.entities.processing_case import ProcessingCase
6
- from documente_shared.domain.enums.common import ProcessingStatus
6
+ from documente_shared.domain.entities.processing_case_filters import ProcessingCaseFilters
7
7
  from documente_shared.domain.repositories.processing_case import ProcessingCaseRepository
8
8
 
9
9
  from documente_shared.infrastructure.dynamo_table import DynamoDBTable
@@ -13,7 +13,7 @@ class DynamoProcessingCaseRepository(
13
13
  DynamoDBTable,
14
14
  ProcessingCaseRepository,
15
15
  ):
16
- def find(self, uuid: str) -> Optional[ProcessingCase]:
16
+ def find(self, uuid: str, include_items: bool = False) -> Optional[ProcessingCase]:
17
17
  item = self.get(key={'uuid': uuid})
18
18
  if item:
19
19
  return ProcessingCase.from_dict(item)
@@ -26,10 +26,10 @@ class DynamoProcessingCaseRepository(
26
26
  def remove(self, instance: ProcessingCase):
27
27
  self.delete(key={'uuid': instance.uuid})
28
28
 
29
- def filter(self, statuses: List[ProcessingStatus]) -> List[ProcessingCase]:
29
+ def filter(self, tenant_slug: str, filters: ProcessingCaseFilters) -> List[ProcessingCase]:
30
30
  items = []
31
31
 
32
- for status in statuses:
32
+ for status in filters.statuses:
33
33
  response = self._table.query(
34
34
  IndexName='status',
35
35
  KeyConditionExpression=Key('status').eq(status.value),
@@ -12,15 +12,15 @@ class HttpProcessingCaseRepository(
12
12
  DocumenteClientMixin,
13
13
  ProcessingCaseRepository,
14
14
  ):
15
- def find(self, uuid: str) -> Optional[ProcessingCase]:
16
- response = self.session.get(f"{self.api_url}/processing-cases/{uuid}/")
15
+ def find(self, uuid: str, include_items: bool = False) -> Optional[ProcessingCase]:
16
+ response = self.session.get(f"{self.api_url}/v1/processing-cases/{uuid}/")
17
17
  if response.status_code == 200:
18
18
  return ProcessingCase.from_dict(response.json())
19
19
  return None
20
20
 
21
21
  def persist(self, instance: ProcessingCase) -> ProcessingCase:
22
22
  response = self.session.put(
23
- url=f"{self.api_url}/processing-cases/{instance.uuid}/",
23
+ url=f"{self.api_url}/v1/processing-cases/{instance.uuid}/",
24
24
  json=instance.to_dict,
25
25
  )
26
26
  if response.status_code not in [200, 201]:
@@ -28,10 +28,15 @@ class HttpProcessingCaseRepository(
28
28
  return ProcessingCase.from_dict(response.json())
29
29
 
30
30
  def remove(self, instance: ProcessingCase):
31
- self.session.delete(f"{self.api_url}/processing-cases/{instance.uuid}/")
31
+ self.session.delete(f"{self.api_url}/v1/processing-cases/{instance.uuid}/")
32
32
 
33
33
  def filter(self, tenant_slug: str, filters: ProcessingCaseFilters) -> List[ProcessingCase]:
34
- response = self.session.get(f"{self.api_url}/processing-cases/")
34
+ response = self.session.get(
35
+ url=f"{self.api_url}/v1/processing-cases/",
36
+ headers={
37
+ "X-Tenant": tenant_slug,
38
+ }
39
+ )
35
40
  if response.status_code == 200:
36
41
  raw_response = response.json()
37
42
  return [
@@ -16,19 +16,19 @@ class HttpProcessingCaseItemRepository(
16
16
  def find(self, uuid: str) -> Optional[ProcessingCaseItem]:
17
17
  response = self.session.get(f"{self.api_url}/processing-case-items/{uuid}/")
18
18
  if response.status_code == 200:
19
- return ProcessingCaseItem.from_dict(response.json())
19
+ return ProcessingCaseItem.from_persist_dict(response.json())
20
20
  return None
21
21
 
22
22
  def find_by_digest(self, digest: str) -> Optional[ProcessingCaseItem]:
23
23
  response = self.session.get(f"{self.api_url}/processing-case-items/{digest}/")
24
24
  if response.status_code == 200:
25
- return ProcessingCaseItem.from_dict(response.json())
25
+ return ProcessingCaseItem.from_persist_dict(response.json())
26
26
  return None
27
27
 
28
28
  def persist(self, instance: ProcessingCaseItem) -> ProcessingCaseItem:
29
29
  response = self.session.put(
30
30
  url=f"{self.api_url}/processing-case-items/{instance.uuid}/",
31
- json=instance.to_simple_dict,
31
+ json=instance.to_persist_dict,
32
32
  )
33
33
  if response.status_code in [200, 201]:
34
34
  return ProcessingCaseItem.from_dict(response.json())
@@ -46,7 +46,7 @@ class HttpProcessingCaseItemRepository(
46
46
  if response.status_code == 200:
47
47
  raw_response = response.json()
48
48
  return [
49
- ProcessingCaseItem.from_dict(item)
49
+ ProcessingCaseItem.from_persist_dict(item)
50
50
  for item in raw_response.get('data', [])
51
51
  ]
52
52
  return []
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "documente_shared"
3
- version = "0.1.79"
3
+ version = "0.1.80"
4
4
  description = "Shared utilities for Documente AI projects"
5
5
  authors = ["Tech <tech@llamitai.com>"]
6
6
  license = "MIT"