Azure / Azure/azure-sdk-for-python

poller.continuation_token() crashes if initial request use file stream as input

Aperta
#38,713 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Azure.Core bug Client customer-reported needs-team-attention
Lingua principale
Python
Stelle
5.6k
Fork
3.4k
Merge medio
2g 2h
PR unite (30g)
213

Descrizione

- **Package Name**: azure-ai-documentintelligence
- **Package Version**: 1.0.0b4
- **Operating System**: Windows
- **Python Version**: 3.12.7

**Describe the bug**
poller.continuation_token() crashes if input file is passed as an octet-steam into initial begin_analyze_document call.

Exception is below:
```
Traceback (most recent call last):
File "C:\temp\SDK_issue_report.py", line 25, in
poller_continuation_token = poller.continuation_token() # get continuation token FAILS
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\anatolip\AppData\Local\anaconda3\envs\py12\Lib\site-packages\azure\core\polling\_poller.py", line 224, in continuation_token
return self._polling_method.get_continuation_token()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\anatolip\AppData\Local\anaconda3\envs\py12\Lib\site-packages\azure\core\polling\base_polling.py", line 651, in get_continuation_token
return base64.b64encode(pickle.dumps(self._initial_response)).decode("ascii")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: cannot pickle 'BufferedReader' instances
```

**To Reproduce**
Code below illustrates that continuation_token() works if file is passed to begin_analyze_document as base64 string, but if file is passed as a octet-stream, get continuation_token() fails.

```
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
import base64, pickle, os

endpoint = os.environ["AZURE_DI_ENDPOINT"]
key = os.environ["AZURE_DI_KEY"]

path_to_sample_documents = r'c:\temp\SampleInvoice26andLineItems.pdf'

client = DocumentIntelligenceClient(endpoint=endpoint, credential=AzureKeyCredential(key))

with open(path_to_sample_documents, "rb") as f:
poller = client.begin_analyze_document("prebuilt-layout", AnalyzeDocumentRequest(bytes_source=f.read()))
poller_continuation_token = poller.continuation_token() # get continuation token WORKS
decoded_token = pickle.loads(base64.b64decode(poller_continuation_token))
resultUrl = decoded_token.http_response.headers.get('Operation-Location')
print(f"Results URL from continuation_token: {resultUrl} \n")

with open(path_to_sample_documents, "rb") as f:
poller = client.begin_analyze_document("prebuilt-layout", f, content_type="application/octet-stream")
print(f"ERROR during continuation_token!!!\n")
poller_continuation_token = poller.continuation_token() # get continuation token FAILS
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start with azure/core/polling/_poller.py and base_polling.py, following poller.continuation_token() into get_continuation_token(). Compare the begin_analyze_document calls using AnalyzeDocumentRequest(bytes_source=...) and the file stream with content_type="application/octet-stream". Done means continuation_token() no longer crashes for the stream input and preserves the operation location.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
azure, python
Ambito
api
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.