openparser-sdk 0.0.1__py3-none-any.whl

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 (173) hide show
  1. openparser/__init__.py +54 -0
  2. openparser/_files.py +43 -0
  3. openparser/_generated/__init__.py +8 -0
  4. openparser/_generated/api/__init__.py +1 -0
  5. openparser/_generated/api/extract/__init__.py +1 -0
  6. openparser/_generated/api/extract/extract_async.py +280 -0
  7. openparser/_generated/api/extract/extract_batch.py +284 -0
  8. openparser/_generated/api/extract/extract_sync.py +315 -0
  9. openparser/_generated/api/extract/suggest_schema.py +260 -0
  10. openparser/_generated/api/files/__init__.py +1 -0
  11. openparser/_generated/api/files/create_file.py +237 -0
  12. openparser/_generated/api/files/delete_file.py +200 -0
  13. openparser/_generated/api/files/get_file.py +200 -0
  14. openparser/_generated/api/files/get_file_content.py +198 -0
  15. openparser/_generated/api/jobs/__init__.py +1 -0
  16. openparser/_generated/api/jobs/get_job.py +261 -0
  17. openparser/_generated/api/jobs/get_job_result.py +305 -0
  18. openparser/_generated/api/jobs/get_job_source.py +233 -0
  19. openparser/_generated/api/jobs/list_jobs.py +340 -0
  20. openparser/_generated/api/models/__init__.py +1 -0
  21. openparser/_generated/api/models/list_llm_models.py +288 -0
  22. openparser/_generated/api/models/list_ocr_models.py +184 -0
  23. openparser/_generated/api/parse/__init__.py +1 -0
  24. openparser/_generated/api/parse/parse_async.py +316 -0
  25. openparser/_generated/api/parse/parse_batch.py +280 -0
  26. openparser/_generated/api/parse/parse_sync.py +369 -0
  27. openparser/_generated/api/pipelines/__init__.py +1 -0
  28. openparser/_generated/api/pipelines/create_extraction_pipeline.py +242 -0
  29. openparser/_generated/api/pipelines/delete_extraction_pipeline.py +212 -0
  30. openparser/_generated/api/pipelines/get_extraction_pipeline.py +212 -0
  31. openparser/_generated/api/pipelines/list_extraction_pipelines.py +180 -0
  32. openparser/_generated/api/pipelines/update_extraction_pipeline.py +258 -0
  33. openparser/_generated/client.py +270 -0
  34. openparser/_generated/errors.py +14 -0
  35. openparser/_generated/models/__init__.py +261 -0
  36. openparser/_generated/models/batch_child_page.py +97 -0
  37. openparser/_generated/models/batch_child_summary.py +195 -0
  38. openparser/_generated/models/batch_job_accepted.py +139 -0
  39. openparser/_generated/models/batch_job_accepted_operation.py +8 -0
  40. openparser/_generated/models/batch_summary_counts.py +97 -0
  41. openparser/_generated/models/bounding_box.py +82 -0
  42. openparser/_generated/models/chunk_provenance_span.py +97 -0
  43. openparser/_generated/models/content_kind.py +10 -0
  44. openparser/_generated/models/create_extraction_pipeline_request.py +177 -0
  45. openparser/_generated/models/create_extraction_pipeline_request_grounding.py +8 -0
  46. openparser/_generated/models/create_extraction_pipeline_request_llm_options.py +84 -0
  47. openparser/_generated/models/create_extraction_pipeline_request_llm_options_reasoning_effort_type_1.py +13 -0
  48. openparser/_generated/models/create_extraction_pipeline_request_ocr_options.py +78 -0
  49. openparser/_generated/models/create_extraction_pipeline_request_schema.py +68 -0
  50. openparser/_generated/models/create_file_body.py +78 -0
  51. openparser/_generated/models/delete_extraction_pipeline_response.py +66 -0
  52. openparser/_generated/models/delete_file_response.py +57 -0
  53. openparser/_generated/models/error_body.py +106 -0
  54. openparser/_generated/models/error_body_details.py +65 -0
  55. openparser/_generated/models/error_response.py +65 -0
  56. openparser/_generated/models/extract_async_body.py +136 -0
  57. openparser/_generated/models/extract_batch_body.py +143 -0
  58. openparser/_generated/models/extract_batch_item.py +207 -0
  59. openparser/_generated/models/extract_batch_item_grounding.py +8 -0
  60. openparser/_generated/models/extract_batch_item_llm_options.py +84 -0
  61. openparser/_generated/models/extract_batch_item_llm_options_reasoning_effort_type_1.py +13 -0
  62. openparser/_generated/models/extract_batch_item_ocr_options.py +78 -0
  63. openparser/_generated/models/extract_batch_item_schema.py +65 -0
  64. openparser/_generated/models/extract_batch_request.py +99 -0
  65. openparser/_generated/models/extract_batch_request_items_item.py +201 -0
  66. openparser/_generated/models/extract_batch_request_items_item_grounding.py +8 -0
  67. openparser/_generated/models/extract_batch_request_items_item_llm_options.py +84 -0
  68. openparser/_generated/models/extract_batch_request_items_item_llm_options_reasoning_effort_type_1.py +13 -0
  69. openparser/_generated/models/extract_batch_request_items_item_ocr_options.py +78 -0
  70. openparser/_generated/models/extract_batch_request_items_item_schema.py +65 -0
  71. openparser/_generated/models/extract_batch_request_output_format.py +8 -0
  72. openparser/_generated/models/extract_request.py +226 -0
  73. openparser/_generated/models/extract_request_grounding.py +8 -0
  74. openparser/_generated/models/extract_request_llm_options.py +84 -0
  75. openparser/_generated/models/extract_request_llm_options_reasoning_effort_type_1.py +13 -0
  76. openparser/_generated/models/extract_request_ocr_options.py +78 -0
  77. openparser/_generated/models/extract_request_output_format.py +8 -0
  78. openparser/_generated/models/extract_request_schema.py +65 -0
  79. openparser/_generated/models/extract_sync_body.py +136 -0
  80. openparser/_generated/models/extraction_attempt.py +122 -0
  81. openparser/_generated/models/extraction_attempt_kind.py +8 -0
  82. openparser/_generated/models/extraction_attempt_status.py +9 -0
  83. openparser/_generated/models/extraction_chunk.py +184 -0
  84. openparser/_generated/models/extraction_citation.py +169 -0
  85. openparser/_generated/models/extraction_citation_granularity.py +8 -0
  86. openparser/_generated/models/extraction_citation_source_type.py +16 -0
  87. openparser/_generated/models/extraction_grounding_field.py +102 -0
  88. openparser/_generated/models/extraction_grounding_mode.py +8 -0
  89. openparser/_generated/models/extraction_grounding_result.py +87 -0
  90. openparser/_generated/models/extraction_pipeline.py +201 -0
  91. openparser/_generated/models/extraction_pipeline_list_response.py +76 -0
  92. openparser/_generated/models/extraction_pipeline_llm_options.py +84 -0
  93. openparser/_generated/models/extraction_pipeline_llm_options_reasoning_effort_type_0_type_1.py +13 -0
  94. openparser/_generated/models/extraction_pipeline_ocr_options.py +73 -0
  95. openparser/_generated/models/extraction_pipeline_schema.py +67 -0
  96. openparser/_generated/models/extraction_terminal_result.py +206 -0
  97. openparser/_generated/models/extraction_terminal_result_reasoning_effort_type_0.py +13 -0
  98. openparser/_generated/models/extraction_usage_totals.py +80 -0
  99. openparser/_generated/models/job.py +437 -0
  100. openparser/_generated/models/job_accepted.py +131 -0
  101. openparser/_generated/models/job_accepted_operation.py +8 -0
  102. openparser/_generated/models/job_extraction_schema.py +65 -0
  103. openparser/_generated/models/job_failure.py +98 -0
  104. openparser/_generated/models/job_failure_details.py +65 -0
  105. openparser/_generated/models/job_list_response.py +91 -0
  106. openparser/_generated/models/job_operation.py +10 -0
  107. openparser/_generated/models/job_progress.py +68 -0
  108. openparser/_generated/models/job_related_extractions_item.py +145 -0
  109. openparser/_generated/models/job_status.py +11 -0
  110. openparser/_generated/models/job_summary.py +264 -0
  111. openparser/_generated/models/json_schema_object.py +66 -0
  112. openparser/_generated/models/list_llm_models_mode.py +8 -0
  113. openparser/_generated/models/ocr_llm_model_catalog_entry.py +257 -0
  114. openparser/_generated/models/ocr_llm_model_catalog_entry_pricing.py +76 -0
  115. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0.py +134 -0
  116. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_default_effort_type_0.py +13 -0
  117. openparser/_generated/models/ocr_llm_model_catalog_entry_reasoning_type_0_supported_efforts_type_0_item.py +13 -0
  118. openparser/_generated/models/ocr_llm_model_catalog_entry_recommendation.py +8 -0
  119. openparser/_generated/models/ocr_llm_models_response.py +150 -0
  120. openparser/_generated/models/ocr_llm_models_response_mode.py +8 -0
  121. openparser/_generated/models/ocr_model.py +7 -0
  122. openparser/_generated/models/ocr_model_catalog_entry.py +131 -0
  123. openparser/_generated/models/ocr_model_catalog_entry_availability.py +9 -0
  124. openparser/_generated/models/ocr_model_catalog_entry_capabilities.py +97 -0
  125. openparser/_generated/models/ocr_model_catalog_entry_capabilities_options.py +73 -0
  126. openparser/_generated/models/ocr_model_catalog_entry_option_defaults.py +73 -0
  127. openparser/_generated/models/ocr_model_catalog_entry_pricing.py +68 -0
  128. openparser/_generated/models/ocr_models_response.py +76 -0
  129. openparser/_generated/models/ocr_output_format.py +8 -0
  130. openparser/_generated/models/paddle_raw_profile.py +76 -0
  131. openparser/_generated/models/paddle_raw_profile_options.py +115 -0
  132. openparser/_generated/models/page_block.py +332 -0
  133. openparser/_generated/models/page_block_kind.py +9 -0
  134. openparser/_generated/models/page_block_polygon_type_0_item.py +65 -0
  135. openparser/_generated/models/parse_async_body.py +133 -0
  136. openparser/_generated/models/parse_batch_body.py +143 -0
  137. openparser/_generated/models/parse_batch_item.py +109 -0
  138. openparser/_generated/models/parse_batch_item_ocr_options.py +78 -0
  139. openparser/_generated/models/parse_batch_request.py +100 -0
  140. openparser/_generated/models/parse_batch_request_items_item.py +108 -0
  141. openparser/_generated/models/parse_batch_request_items_item_ocr_options.py +78 -0
  142. openparser/_generated/models/parse_batch_request_output_format.py +8 -0
  143. openparser/_generated/models/parse_request.py +112 -0
  144. openparser/_generated/models/parse_request_ocr_options.py +78 -0
  145. openparser/_generated/models/parse_request_output_format.py +8 -0
  146. openparser/_generated/models/parse_sync_body.py +133 -0
  147. openparser/_generated/models/parsed_document.py +187 -0
  148. openparser/_generated/models/public_file.py +117 -0
  149. openparser/_generated/models/raw_parse_result.py +110 -0
  150. openparser/_generated/models/raw_parse_result_result.py +65 -0
  151. openparser/_generated/models/region.py +224 -0
  152. openparser/_generated/models/region_content.py +155 -0
  153. openparser/_generated/models/region_polygon_type_0_item.py +65 -0
  154. openparser/_generated/models/region_type.py +16 -0
  155. openparser/_generated/models/suggest_schema_request.py +69 -0
  156. openparser/_generated/models/suggest_schema_response.py +74 -0
  157. openparser/_generated/models/suggest_schema_response_schema.py +66 -0
  158. openparser/_generated/models/update_extraction_pipeline_request.py +227 -0
  159. openparser/_generated/models/update_extraction_pipeline_request_grounding.py +8 -0
  160. openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0.py +84 -0
  161. openparser/_generated/models/update_extraction_pipeline_request_llm_options_type_0_reasoning_effort_type_1.py +13 -0
  162. openparser/_generated/models/update_extraction_pipeline_request_ocr_options_type_0.py +78 -0
  163. openparser/_generated/models/update_extraction_pipeline_request_schema.py +67 -0
  164. openparser/_generated/py.typed +1 -0
  165. openparser/_generated/types.py +53 -0
  166. openparser/_telemetry.py +34 -0
  167. openparser/client.py +541 -0
  168. openparser/errors.py +172 -0
  169. openparser/py.typed +0 -0
  170. openparser_sdk-0.0.1.dist-info/METADATA +178 -0
  171. openparser_sdk-0.0.1.dist-info/RECORD +173 -0
  172. openparser_sdk-0.0.1.dist-info/WHEEL +4 -0
  173. openparser_sdk-0.0.1.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,437 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from ..models.job_operation import JobOperation
12
+ from ..models.job_status import JobStatus
13
+ from ..models.ocr_output_format import OcrOutputFormat
14
+ from ..types import UNSET, Unset
15
+ from dateutil.parser import isoparse
16
+ from typing import cast
17
+ import datetime
18
+
19
+ if TYPE_CHECKING:
20
+ from ..models.batch_child_page import BatchChildPage
21
+ from ..models.batch_summary_counts import BatchSummaryCounts
22
+ from ..models.extraction_terminal_result import ExtractionTerminalResult
23
+ from ..models.job_extraction_schema import JobExtractionSchema
24
+ from ..models.job_failure import JobFailure
25
+ from ..models.job_progress import JobProgress
26
+ from ..models.job_related_extractions_item import JobRelatedExtractionsItem
27
+ from ..models.parsed_document import ParsedDocument
28
+ from ..models.raw_parse_result import RawParseResult
29
+
30
+
31
+
32
+
33
+
34
+ T = TypeVar("T", bound="Job")
35
+
36
+
37
+
38
+ @_attrs_define
39
+ class Job:
40
+ """
41
+ Attributes:
42
+ id (str): Prefixed public id for an OCR job (`opj_…`). Example: opj_V1StGXR8_Z5jdHi6B-myT.
43
+ operation (JobOperation):
44
+ status (JobStatus): Durable job status. For batch parent jobs, status is derived from children after each
45
+ child transition:
46
+ 1. If any child is non-terminal, the parent remains `queued` only while every child is
47
+ queued; it becomes `running` once any child is running or terminal.
48
+ 2. When every child is terminal and any child is `indeterminate`, the parent is
49
+ `indeterminate`.
50
+ 3. When every child is terminal, none are `indeterminate`, and any child is `failed`:
51
+ the parent is `failed` if zero children succeeded, otherwise `succeeded` (mixed
52
+ success/failure closes as parent `succeeded` while preserving failed children in
53
+ summaries).
54
+ 4. When every child is `succeeded`, the parent is `succeeded`.
55
+
56
+ Partial failures are always retained on child summaries; parent status does not drop
57
+ failed children from results.
58
+ output_format (OcrOutputFormat):
59
+ created_at (datetime.datetime):
60
+ updated_at (datetime.datetime):
61
+ pipeline_id (None | str): Snapshot of the saved extraction pipeline id at admit time, or `null` for parse jobs,
62
+ inline extract config, and other non-pipeline work.
63
+ pipeline_version (int | None): Snapshot of the saved extraction pipeline version at admit time, or `null` when
64
+ `pipeline_id` is `null`.
65
+ progress (JobProgress | Unset):
66
+ error (JobFailure | Unset):
67
+ result (ExtractionTerminalResult | ParsedDocument | RawParseResult | Unset): Terminal result for single-item
68
+ parse or extract jobs.
69
+ summary (BatchSummaryCounts | Unset):
70
+ children (BatchChildPage | Unset):
71
+ has_source (bool | Unset):
72
+ source_media_type (None | str | Unset):
73
+ source_parse_job_id (None | str | Unset):
74
+ related_extractions (list[JobRelatedExtractionsItem] | Unset):
75
+ extraction_schema (JobExtractionSchema | Unset):
76
+ ocr_model (None | str | Unset): OCR model used at admit time when recorded. Omitted when unknown. Jobs do not
77
+ expose a durable OCR options snapshot.
78
+ """
79
+
80
+ id: str
81
+ operation: JobOperation
82
+ status: JobStatus
83
+ output_format: OcrOutputFormat
84
+ created_at: datetime.datetime
85
+ updated_at: datetime.datetime
86
+ pipeline_id: None | str
87
+ pipeline_version: int | None
88
+ progress: JobProgress | Unset = UNSET
89
+ error: JobFailure | Unset = UNSET
90
+ result: ExtractionTerminalResult | ParsedDocument | RawParseResult | Unset = UNSET
91
+ summary: BatchSummaryCounts | Unset = UNSET
92
+ children: BatchChildPage | Unset = UNSET
93
+ has_source: bool | Unset = UNSET
94
+ source_media_type: None | str | Unset = UNSET
95
+ source_parse_job_id: None | str | Unset = UNSET
96
+ related_extractions: list[JobRelatedExtractionsItem] | Unset = UNSET
97
+ extraction_schema: JobExtractionSchema | Unset = UNSET
98
+ ocr_model: None | str | Unset = UNSET
99
+
100
+
101
+
102
+
103
+
104
+ def to_dict(self) -> dict[str, Any]:
105
+ from ..models.batch_child_page import BatchChildPage
106
+ from ..models.batch_summary_counts import BatchSummaryCounts
107
+ from ..models.extraction_terminal_result import ExtractionTerminalResult
108
+ from ..models.job_extraction_schema import JobExtractionSchema
109
+ from ..models.job_failure import JobFailure
110
+ from ..models.job_progress import JobProgress
111
+ from ..models.job_related_extractions_item import JobRelatedExtractionsItem
112
+ from ..models.parsed_document import ParsedDocument
113
+ from ..models.raw_parse_result import RawParseResult
114
+ id = self.id
115
+
116
+ operation = self.operation.value
117
+
118
+ status = self.status.value
119
+
120
+ output_format = self.output_format.value
121
+
122
+ created_at = self.created_at.isoformat()
123
+
124
+ updated_at = self.updated_at.isoformat()
125
+
126
+ pipeline_id: None | str
127
+ pipeline_id = self.pipeline_id
128
+
129
+ pipeline_version: int | None
130
+ pipeline_version = self.pipeline_version
131
+
132
+ progress: dict[str, Any] | Unset = UNSET
133
+ if not isinstance(self.progress, Unset):
134
+ progress = self.progress.to_dict()
135
+
136
+ error: dict[str, Any] | Unset = UNSET
137
+ if not isinstance(self.error, Unset):
138
+ error = self.error.to_dict()
139
+
140
+ result: dict[str, Any] | Unset
141
+ if isinstance(self.result, Unset):
142
+ result = UNSET
143
+ elif isinstance(self.result, ParsedDocument):
144
+ result = self.result.to_dict()
145
+ elif isinstance(self.result, RawParseResult):
146
+ result = self.result.to_dict()
147
+ else:
148
+ result = self.result.to_dict()
149
+
150
+
151
+ summary: dict[str, Any] | Unset = UNSET
152
+ if not isinstance(self.summary, Unset):
153
+ summary = self.summary.to_dict()
154
+
155
+ children: dict[str, Any] | Unset = UNSET
156
+ if not isinstance(self.children, Unset):
157
+ children = self.children.to_dict()
158
+
159
+ has_source = self.has_source
160
+
161
+ source_media_type: None | str | Unset
162
+ if isinstance(self.source_media_type, Unset):
163
+ source_media_type = UNSET
164
+ else:
165
+ source_media_type = self.source_media_type
166
+
167
+ source_parse_job_id: None | str | Unset
168
+ if isinstance(self.source_parse_job_id, Unset):
169
+ source_parse_job_id = UNSET
170
+ else:
171
+ source_parse_job_id = self.source_parse_job_id
172
+
173
+ related_extractions: list[dict[str, Any]] | Unset = UNSET
174
+ if not isinstance(self.related_extractions, Unset):
175
+ related_extractions = []
176
+ for related_extractions_item_data in self.related_extractions:
177
+ related_extractions_item = related_extractions_item_data.to_dict()
178
+ related_extractions.append(related_extractions_item)
179
+
180
+
181
+
182
+ extraction_schema: dict[str, Any] | Unset = UNSET
183
+ if not isinstance(self.extraction_schema, Unset):
184
+ extraction_schema = self.extraction_schema.to_dict()
185
+
186
+ ocr_model: None | str | Unset
187
+ if isinstance(self.ocr_model, Unset):
188
+ ocr_model = UNSET
189
+ else:
190
+ ocr_model = self.ocr_model
191
+
192
+
193
+ field_dict: dict[str, Any] = {}
194
+
195
+ field_dict.update({
196
+ "id": id,
197
+ "operation": operation,
198
+ "status": status,
199
+ "output_format": output_format,
200
+ "created_at": created_at,
201
+ "updated_at": updated_at,
202
+ "pipeline_id": pipeline_id,
203
+ "pipeline_version": pipeline_version,
204
+ })
205
+ if progress is not UNSET:
206
+ field_dict["progress"] = progress
207
+ if error is not UNSET:
208
+ field_dict["error"] = error
209
+ if result is not UNSET:
210
+ field_dict["result"] = result
211
+ if summary is not UNSET:
212
+ field_dict["summary"] = summary
213
+ if children is not UNSET:
214
+ field_dict["children"] = children
215
+ if has_source is not UNSET:
216
+ field_dict["has_source"] = has_source
217
+ if source_media_type is not UNSET:
218
+ field_dict["source_media_type"] = source_media_type
219
+ if source_parse_job_id is not UNSET:
220
+ field_dict["source_parse_job_id"] = source_parse_job_id
221
+ if related_extractions is not UNSET:
222
+ field_dict["related_extractions"] = related_extractions
223
+ if extraction_schema is not UNSET:
224
+ field_dict["extraction_schema"] = extraction_schema
225
+ if ocr_model is not UNSET:
226
+ field_dict["ocr_model"] = ocr_model
227
+
228
+ return field_dict
229
+
230
+
231
+
232
+ @classmethod
233
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
234
+ from ..models.batch_child_page import BatchChildPage
235
+ from ..models.batch_summary_counts import BatchSummaryCounts
236
+ from ..models.extraction_terminal_result import ExtractionTerminalResult
237
+ from ..models.job_extraction_schema import JobExtractionSchema
238
+ from ..models.job_failure import JobFailure
239
+ from ..models.job_progress import JobProgress
240
+ from ..models.job_related_extractions_item import JobRelatedExtractionsItem
241
+ from ..models.parsed_document import ParsedDocument
242
+ from ..models.raw_parse_result import RawParseResult
243
+ d = dict(src_dict)
244
+ id = d.pop("id")
245
+
246
+ operation = JobOperation(d.pop("operation"))
247
+
248
+
249
+
250
+
251
+ status = JobStatus(d.pop("status"))
252
+
253
+
254
+
255
+
256
+ output_format = OcrOutputFormat(d.pop("output_format"))
257
+
258
+
259
+
260
+
261
+ created_at = isoparse(d.pop("created_at"))
262
+
263
+
264
+
265
+
266
+ updated_at = isoparse(d.pop("updated_at"))
267
+
268
+
269
+
270
+
271
+ def _parse_pipeline_id(data: object) -> None | str:
272
+ if data is None:
273
+ return data
274
+ return cast(None | str, data)
275
+
276
+ pipeline_id = _parse_pipeline_id(d.pop("pipeline_id"))
277
+
278
+
279
+ def _parse_pipeline_version(data: object) -> int | None:
280
+ if data is None:
281
+ return data
282
+ return cast(int | None, data)
283
+
284
+ pipeline_version = _parse_pipeline_version(d.pop("pipeline_version"))
285
+
286
+
287
+ _progress = d.pop("progress", UNSET)
288
+ progress: JobProgress | Unset
289
+ if isinstance(_progress, Unset):
290
+ progress = UNSET
291
+ else:
292
+ progress = JobProgress.from_dict(_progress)
293
+
294
+
295
+
296
+
297
+ _error = d.pop("error", UNSET)
298
+ error: JobFailure | Unset
299
+ if isinstance(_error, Unset):
300
+ error = UNSET
301
+ else:
302
+ error = JobFailure.from_dict(_error)
303
+
304
+
305
+
306
+
307
+ def _parse_result(data: object) -> ExtractionTerminalResult | ParsedDocument | RawParseResult | Unset:
308
+ if isinstance(data, Unset):
309
+ return data
310
+ try:
311
+ if not isinstance(data, dict):
312
+ raise TypeError()
313
+ result_type_0 = ParsedDocument.from_dict(data)
314
+
315
+
316
+
317
+ return result_type_0
318
+ except (TypeError, ValueError, AttributeError, KeyError):
319
+ pass
320
+ try:
321
+ if not isinstance(data, dict):
322
+ raise TypeError()
323
+ result_type_1 = RawParseResult.from_dict(data)
324
+
325
+
326
+
327
+ return result_type_1
328
+ except (TypeError, ValueError, AttributeError, KeyError):
329
+ pass
330
+ if not isinstance(data, dict):
331
+ raise TypeError()
332
+ result_type_2 = ExtractionTerminalResult.from_dict(data)
333
+
334
+
335
+
336
+ return result_type_2
337
+
338
+ result = _parse_result(d.pop("result", UNSET))
339
+
340
+
341
+ _summary = d.pop("summary", UNSET)
342
+ summary: BatchSummaryCounts | Unset
343
+ if isinstance(_summary, Unset):
344
+ summary = UNSET
345
+ else:
346
+ summary = BatchSummaryCounts.from_dict(_summary)
347
+
348
+
349
+
350
+
351
+ _children = d.pop("children", UNSET)
352
+ children: BatchChildPage | Unset
353
+ if isinstance(_children, Unset):
354
+ children = UNSET
355
+ else:
356
+ children = BatchChildPage.from_dict(_children)
357
+
358
+
359
+
360
+
361
+ has_source = d.pop("has_source", UNSET)
362
+
363
+ def _parse_source_media_type(data: object) -> None | str | Unset:
364
+ if data is None:
365
+ return data
366
+ if isinstance(data, Unset):
367
+ return data
368
+ return cast(None | str | Unset, data)
369
+
370
+ source_media_type = _parse_source_media_type(d.pop("source_media_type", UNSET))
371
+
372
+
373
+ def _parse_source_parse_job_id(data: object) -> None | str | Unset:
374
+ if data is None:
375
+ return data
376
+ if isinstance(data, Unset):
377
+ return data
378
+ return cast(None | str | Unset, data)
379
+
380
+ source_parse_job_id = _parse_source_parse_job_id(d.pop("source_parse_job_id", UNSET))
381
+
382
+
383
+ _related_extractions = d.pop("related_extractions", UNSET)
384
+ related_extractions: list[JobRelatedExtractionsItem] | Unset = UNSET
385
+ if _related_extractions is not UNSET:
386
+ related_extractions = []
387
+ for related_extractions_item_data in _related_extractions:
388
+ related_extractions_item = JobRelatedExtractionsItem.from_dict(related_extractions_item_data)
389
+
390
+
391
+
392
+ related_extractions.append(related_extractions_item)
393
+
394
+
395
+ _extraction_schema = d.pop("extraction_schema", UNSET)
396
+ extraction_schema: JobExtractionSchema | Unset
397
+ if isinstance(_extraction_schema, Unset):
398
+ extraction_schema = UNSET
399
+ else:
400
+ extraction_schema = JobExtractionSchema.from_dict(_extraction_schema)
401
+
402
+
403
+
404
+
405
+ def _parse_ocr_model(data: object) -> None | str | Unset:
406
+ if data is None:
407
+ return data
408
+ if isinstance(data, Unset):
409
+ return data
410
+ return cast(None | str | Unset, data)
411
+
412
+ ocr_model = _parse_ocr_model(d.pop("ocr_model", UNSET))
413
+
414
+
415
+ job = cls(
416
+ id=id,
417
+ operation=operation,
418
+ status=status,
419
+ output_format=output_format,
420
+ created_at=created_at,
421
+ updated_at=updated_at,
422
+ pipeline_id=pipeline_id,
423
+ pipeline_version=pipeline_version,
424
+ progress=progress,
425
+ error=error,
426
+ result=result,
427
+ summary=summary,
428
+ children=children,
429
+ has_source=has_source,
430
+ source_media_type=source_media_type,
431
+ source_parse_job_id=source_parse_job_id,
432
+ related_extractions=related_extractions,
433
+ extraction_schema=extraction_schema,
434
+ ocr_model=ocr_model,
435
+ )
436
+
437
+ return job
@@ -0,0 +1,131 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from ..models.job_accepted_operation import JobAcceptedOperation
12
+ from ..models.job_status import JobStatus
13
+ from ..models.ocr_output_format import OcrOutputFormat
14
+ from dateutil.parser import isoparse
15
+ from typing import cast
16
+ import datetime
17
+
18
+
19
+
20
+
21
+
22
+
23
+ T = TypeVar("T", bound="JobAccepted")
24
+
25
+
26
+
27
+ @_attrs_define
28
+ class JobAccepted:
29
+ """
30
+ Attributes:
31
+ id (str): Prefixed public id for an OCR job (`opj_…`). Example: opj_V1StGXR8_Z5jdHi6B-myT.
32
+ operation (JobAcceptedOperation):
33
+ status (JobStatus): Durable job status. For batch parent jobs, status is derived from children after each
34
+ child transition:
35
+ 1. If any child is non-terminal, the parent remains `queued` only while every child is
36
+ queued; it becomes `running` once any child is running or terminal.
37
+ 2. When every child is terminal and any child is `indeterminate`, the parent is
38
+ `indeterminate`.
39
+ 3. When every child is terminal, none are `indeterminate`, and any child is `failed`:
40
+ the parent is `failed` if zero children succeeded, otherwise `succeeded` (mixed
41
+ success/failure closes as parent `succeeded` while preserving failed children in
42
+ summaries).
43
+ 4. When every child is `succeeded`, the parent is `succeeded`.
44
+
45
+ Partial failures are always retained on child summaries; parent status does not drop
46
+ failed children from results.
47
+ output_format (OcrOutputFormat):
48
+ created_at (datetime.datetime):
49
+ updated_at (datetime.datetime):
50
+ """
51
+
52
+ id: str
53
+ operation: JobAcceptedOperation
54
+ status: JobStatus
55
+ output_format: OcrOutputFormat
56
+ created_at: datetime.datetime
57
+ updated_at: datetime.datetime
58
+
59
+
60
+
61
+
62
+
63
+ def to_dict(self) -> dict[str, Any]:
64
+ id = self.id
65
+
66
+ operation = self.operation.value
67
+
68
+ status = self.status.value
69
+
70
+ output_format = self.output_format.value
71
+
72
+ created_at = self.created_at.isoformat()
73
+
74
+ updated_at = self.updated_at.isoformat()
75
+
76
+
77
+ field_dict: dict[str, Any] = {}
78
+
79
+ field_dict.update({
80
+ "id": id,
81
+ "operation": operation,
82
+ "status": status,
83
+ "output_format": output_format,
84
+ "created_at": created_at,
85
+ "updated_at": updated_at,
86
+ })
87
+
88
+ return field_dict
89
+
90
+
91
+
92
+ @classmethod
93
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
94
+ d = dict(src_dict)
95
+ id = d.pop("id")
96
+
97
+ operation = JobAcceptedOperation(d.pop("operation"))
98
+
99
+
100
+
101
+
102
+ status = JobStatus(d.pop("status"))
103
+
104
+
105
+
106
+
107
+ output_format = OcrOutputFormat(d.pop("output_format"))
108
+
109
+
110
+
111
+
112
+ created_at = isoparse(d.pop("created_at"))
113
+
114
+
115
+
116
+
117
+ updated_at = isoparse(d.pop("updated_at"))
118
+
119
+
120
+
121
+
122
+ job_accepted = cls(
123
+ id=id,
124
+ operation=operation,
125
+ status=status,
126
+ output_format=output_format,
127
+ created_at=created_at,
128
+ updated_at=updated_at,
129
+ )
130
+
131
+ return job_accepted
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+ class JobAcceptedOperation(str, Enum):
4
+ EXTRACT = "extract"
5
+ PARSE = "parse"
6
+
7
+ def __str__(self) -> str:
8
+ return str(self.value)
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ T = TypeVar("T", bound="JobExtractionSchema")
18
+
19
+
20
+
21
+ @_attrs_define
22
+ class JobExtractionSchema:
23
+ """
24
+ """
25
+
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+
29
+
30
+
31
+
32
+ def to_dict(self) -> dict[str, Any]:
33
+
34
+ field_dict: dict[str, Any] = {}
35
+ field_dict.update(self.additional_properties)
36
+
37
+ return field_dict
38
+
39
+
40
+
41
+ @classmethod
42
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
43
+ d = dict(src_dict)
44
+ job_extraction_schema = cls(
45
+ )
46
+
47
+
48
+ job_extraction_schema.additional_properties = d
49
+ return job_extraction_schema
50
+
51
+ @property
52
+ def additional_keys(self) -> list[str]:
53
+ return list(self.additional_properties.keys())
54
+
55
+ def __getitem__(self, key: str) -> Any:
56
+ return self.additional_properties[key]
57
+
58
+ def __setitem__(self, key: str, value: Any) -> None:
59
+ self.additional_properties[key] = value
60
+
61
+ def __delitem__(self, key: str) -> None:
62
+ del self.additional_properties[key]
63
+
64
+ def __contains__(self, key: str) -> bool:
65
+ return key in self.additional_properties