documente_shared 0.1.78__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.78 → documente_shared-0.1.80}/PKG-INFO +1 -1
  2. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_item.py +48 -8
  3. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/repositories/processing_case.py +1 -1
  4. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_processing_case.py +4 -4
  5. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/http_processing_case.py +10 -5
  6. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/http_processing_case_item.py +4 -4
  7. {documente_shared-0.1.78 → documente_shared-0.1.80}/pyproject.toml +1 -1
  8. {documente_shared-0.1.78 → documente_shared-0.1.80}/README.md +0 -0
  9. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/__init__.py +0 -0
  10. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/__init__.py +0 -0
  11. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/digest.py +0 -0
  12. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/exceptions.py +0 -0
  13. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/files.py +0 -0
  14. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/query_params.py +0 -0
  15. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/time_utils.py +0 -0
  16. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/application/timezone.py +0 -0
  17. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/__init__.py +0 -0
  18. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/base_enum.py +0 -0
  19. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/constants.py +0 -0
  20. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/__init__.py +0 -0
  21. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/document.py +0 -0
  22. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/document_metadata.py +0 -0
  23. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/in_memory_result.py +0 -0
  24. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case.py +0 -0
  25. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_filters.py +0 -0
  26. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_case_item_filters.py +0 -0
  27. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/entities/processing_event.py +0 -0
  28. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/enums/__init__.py +0 -0
  29. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/enums/common.py +0 -0
  30. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/enums/document.py +0 -0
  31. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/enums/processing_case.py +0 -0
  32. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/repositories/__init__.py +0 -0
  33. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/repositories/document.py +0 -0
  34. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/domain/repositories/processing_case_item.py +0 -0
  35. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/__init__.py +0 -0
  36. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/documente_client.py +0 -0
  37. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/dynamo_table.py +0 -0
  38. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/__init__.py +0 -0
  39. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_document.py +0 -0
  40. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/repositories/dynamo_processing_case_item.py +0 -0
  41. {documente_shared-0.1.78 → documente_shared-0.1.80}/documente_shared/infrastructure/s3_bucket.py +0 -0
  42. {documente_shared-0.1.78 → 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.78
3
+ Version: 0.1.80
4
4
  Summary: Shared utilities for Documente AI projects
5
5
  License: MIT
6
6
  Author: Tech
@@ -16,8 +16,8 @@ class ProcessingCaseItem(object):
16
16
  case_id: str
17
17
  digest: str
18
18
  status: ProcessingStatus
19
- document_type: ProcessingDocumentType
20
19
  document: InMemoryDocument
20
+ document_type: Optional[ProcessingDocumentType] = None
21
21
  uploaded_from: Optional[ProcessingSource] = None
22
22
  processed_csv: Optional[InMemoryDocument] = None
23
23
  processed_xlsx: Optional[InMemoryDocument] = None
@@ -107,7 +107,10 @@ class ProcessingCaseItem(object):
107
107
  'digest': self.digest,
108
108
  'status': str(self.status),
109
109
  'document': self.document.to_dict,
110
- 'document_type': str(self.document_type),
110
+ 'document_type': (
111
+ str(self.document_type)
112
+ if self.document_type else None
113
+ ),
111
114
  'uploaded_from': (
112
115
  str(self.uploaded_from)
113
116
  if self.uploaded_from else None
@@ -132,12 +135,24 @@ class ProcessingCaseItem(object):
132
135
  str(self.processing_confidence.quantize(Decimal('0.001')))
133
136
  if self.processing_confidence else None
134
137
  ),
135
- 'uploaded_at': self.uploaded_at.isoformat() if self.uploaded_at else None,
136
- 'started_at': self.started_at.isoformat() if self.started_at else None,
137
- '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
+ ),
138
150
  'feedback': self.feedback,
139
151
  'metadata': self.metadata,
140
- '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
+ ),
141
156
  }
142
157
 
143
158
  @property
@@ -145,6 +160,15 @@ class ProcessingCaseItem(object):
145
160
  simple_dict = self.to_dict.copy()
146
161
  return simple_dict
147
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
+
148
172
  def overload(
149
173
  self,
150
174
  new_instance: 'ProcessingCaseItem',
@@ -152,8 +176,8 @@ class ProcessingCaseItem(object):
152
176
  ):
153
177
  instance_properties = properties or [
154
178
  'status',
155
- 'document_type',
156
179
  'document',
180
+ 'document_type',
157
181
  'uploaded_from',
158
182
  'processed_csv',
159
183
  'processed_xlsx',
@@ -182,7 +206,10 @@ class ProcessingCaseItem(object):
182
206
  digest=data.get('digest'),
183
207
  status=ProcessingStatus.from_value(data.get('status')),
184
208
  document=InMemoryDocument.from_dict(data.get('document')),
185
- document_type=ProcessingDocumentType.from_value(data.get('document_type')),
209
+ document_type=(
210
+ ProcessingDocumentType.from_value(data.get('document_type'))
211
+ if data.get('document_type') else None
212
+ ),
186
213
  uploaded_from=(
187
214
  ProcessingSource.from_value(data.get('uploaded_from'))
188
215
  if data.get('uploaded_from') else None
@@ -214,3 +241,16 @@ class ProcessingCaseItem(object):
214
241
  metadata=data.get('metadata', {}),
215
242
  completed_at=get_datetime_from_data(input_datetime=data.get('completed_at')),
216
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.78"
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"