|
1 | 1 | import json |
2 | 2 | import os |
| 3 | +from typing import List, Optional |
3 | 4 | from base64 import b64encode |
4 | 5 | from datetime import datetime, timedelta |
5 | | -from urllib.parse import quote_plus, urljoin |
| 6 | +from urllib.parse import quote_plus, urlencode, urljoin |
6 | 7 |
|
7 | 8 | import requests |
8 | 9 |
|
@@ -378,10 +379,19 @@ def get_file_data(self, file_id, endpoint=None, headers=None): |
378 | 379 |
|
379 | 380 | return response.content |
380 | 381 |
|
381 | | - def fetch_results(self, file_id, endpoint=None, verbose=False, headers=None): |
| 382 | + def fetch_results(self, file_id, timeout=None, endpoint=None, verbose=False, headers=None): |
| 383 | + """ |
| 384 | + :param file_id: the id of the document that was uploaded and extracted |
| 385 | + :param timeout: a timeout in milliseconds to wait for the results |
| 386 | + """ |
382 | 387 | endpoint = urljoin(endpoint or self.base_endpoint, "result/final/" + file_id) |
| 388 | + qsdict = {} |
383 | 389 | if verbose: |
384 | | - endpoint += "?verbose=true" |
| 390 | + qsdict["verbose"] = "true" |
| 391 | + if timeout: |
| 392 | + qsdict["timeout"] = timeout |
| 393 | + qs = urlencode(qsdict) |
| 394 | + endpoint += f"?{qs}" if qs else "" |
385 | 395 | headers = headers or {} |
386 | 396 | headers = self._get_headers(**headers) |
387 | 397 | result = self._parse_response(self.requests.get(endpoint, headers=headers)) |
@@ -803,3 +813,30 @@ def submit_task( |
803 | 813 | return self._parse_response( |
804 | 814 | self.requests.post(endpoint, data=json.dumps(task), headers=headers) |
805 | 815 | ) |
| 816 | + |
| 817 | + def add_tags_to_tasks(self, task_ids: List[str], tags: List[str], company_id: Optional[str]=None, endpoint: Optional[str]=None): |
| 818 | + company_id = company_id or self.company_id |
| 819 | + endpoint = urljoin( |
| 820 | + endpoint or self.base_endpoint, |
| 821 | + f"app/company/{company_id}/tasks/tags/batch", |
| 822 | + ) |
| 823 | + headers = self._get_headers() |
| 824 | + headers["Accept"] = "application/json" |
| 825 | + headers["Content-Type"] = "application/json" |
| 826 | + data = {"taskIds": task_ids, "add": tags, "remove": []} |
| 827 | + return self._parse_response( |
| 828 | + self.requests.post( |
| 829 | + endpoint, data=json.dumps(data), headers=headers |
| 830 | + ) |
| 831 | + ) |
| 832 | + |
| 833 | + def get_tags_for_task(self, task_id: str, company_id: Optional[str]=None, endpoint: Optional[str]=None): |
| 834 | + company_id = company_id or self.company_id |
| 835 | + endpoint = urljoin( |
| 836 | + endpoint or self.base_endpoint, |
| 837 | + f"app/company/{company_id}/tasks/{task_id}/tags", |
| 838 | + ) |
| 839 | + headers = self._get_headers() |
| 840 | + headers["Accept"] = "application/json" |
| 841 | + headers["Content-Type"] = "application/json" |
| 842 | + return self._parse_response(self.requests.get(endpoint, headers=headers)) |
0 commit comments