nebu 0.1.127__py3-none-any.whl → 0.1.129__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.
- nebu/processors/processor.py +36 -10
- {nebu-0.1.127.dist-info → nebu-0.1.129.dist-info}/METADATA +1 -1
- {nebu-0.1.127.dist-info → nebu-0.1.129.dist-info}/RECORD +6 -6
- {nebu-0.1.127.dist-info → nebu-0.1.129.dist-info}/WHEEL +0 -0
- {nebu-0.1.127.dist-info → nebu-0.1.129.dist-info}/licenses/LICENSE +0 -0
- {nebu-0.1.127.dist-info → nebu-0.1.129.dist-info}/top_level.txt +0 -0
nebu/processors/processor.py
CHANGED
@@ -363,19 +363,31 @@ class Processor(Generic[InputType, OutputType]):
|
|
363
363
|
# Poll only if poll=True AND the initial request was configured not to wait (wait=False).
|
364
364
|
if poll and not stream_data_wait_param:
|
365
365
|
message_id = raw_response_json.get("message_id")
|
366
|
+
return_stream = raw_response_json.get("return_stream")
|
367
|
+
|
366
368
|
if not message_id or not isinstance(message_id, str):
|
367
369
|
logger.error(
|
368
|
-
f"Processor {processor_name}: Polling requested but 'message_id' (string) not found in initial response. Response: {raw_response_json}"
|
370
|
+
f"Processor {processor_name}: Polling requested but 'message_id' (string) not found or invalid in initial response. Response: {raw_response_json}"
|
369
371
|
)
|
370
372
|
raise ValueError(
|
371
373
|
"Polling failed: 'message_id' (string) missing or invalid in initial server response."
|
372
374
|
)
|
375
|
+
if not return_stream or not isinstance(return_stream, str):
|
376
|
+
logger.error(
|
377
|
+
f"Processor {processor_name}: Polling requested but 'return_stream' (string) not found or invalid in initial response. Response: {raw_response_json}"
|
378
|
+
)
|
379
|
+
raise ValueError(
|
380
|
+
"Polling failed: 'return_stream' (string) missing or invalid in initial server response for polling."
|
381
|
+
)
|
373
382
|
|
374
383
|
# Polling URL using self.orign_host for consistency
|
375
384
|
polling_url = f"{self.orign_host}/v1/processors/{processor_namespace}/{processor_name}/return/{message_id}"
|
376
385
|
|
386
|
+
# Prepare polling payload
|
387
|
+
poll_payload = {"consumer_group": return_stream}
|
388
|
+
|
377
389
|
logger.info(
|
378
|
-
f"Processor {processor_name}: Polling for message_id {message_id} at {polling_url}. Overall timeout: {timeout}s, Interval: {poll_interval_seconds}s."
|
390
|
+
f"Processor {processor_name}: Polling for message_id {message_id} at {polling_url} with payload {poll_payload}. Overall timeout: {timeout}s, Interval: {poll_interval_seconds}s."
|
379
391
|
)
|
380
392
|
polling_start_time = time.time()
|
381
393
|
|
@@ -401,7 +413,7 @@ class Processor(Generic[InputType, OutputType]):
|
|
401
413
|
polling_url,
|
402
414
|
headers={"Authorization": f"Bearer {current_op_api_key}"},
|
403
415
|
timeout=individual_poll_timeout,
|
404
|
-
json=
|
416
|
+
json=poll_payload,
|
405
417
|
)
|
406
418
|
|
407
419
|
if poll_response.status_code == 200:
|
@@ -409,14 +421,28 @@ class Processor(Generic[InputType, OutputType]):
|
|
409
421
|
f"Processor {processor_name}: Successfully retrieved message {message_id} via polling. Status: 200."
|
410
422
|
)
|
411
423
|
try:
|
412
|
-
|
413
|
-
if
|
414
|
-
|
424
|
+
polled_data_full = poll_response.json()
|
425
|
+
if (
|
426
|
+
isinstance(polled_data_full, dict)
|
427
|
+
and "content" in polled_data_full
|
428
|
+
):
|
429
|
+
# Extract the nested content for Pydantic validation
|
430
|
+
raw_content = polled_data_full.get("content")
|
431
|
+
logger.debug(
|
432
|
+
f"Processor {processor_name}: Extracted nested 'content' from polled data for {message_id}. Nested content: {str(raw_content)[:200]}..."
|
433
|
+
)
|
434
|
+
elif isinstance(polled_data_full, (dict, list, str)):
|
435
|
+
# Fallback: use the full polled data if 'content' key is not present in a dict, or if it's not a dict itself.
|
436
|
+
raw_content = polled_data_full
|
437
|
+
logger.warning(
|
438
|
+
f"Processor {processor_name}: Polled data for {message_id} did not contain a 'content' key as expected, or was not a dict. Using full polled data. Type: {type(polled_data_full)}. Data: {str(polled_data_full)[:200]}..."
|
439
|
+
)
|
415
440
|
else:
|
441
|
+
# Unexpected type for polled_data_full
|
442
|
+
raw_content = polled_data_full
|
416
443
|
logger.warning(
|
417
|
-
f"Processor {processor_name}: Polled data for {message_id} is of unexpected type: {type(
|
444
|
+
f"Processor {processor_name}: Polled data for {message_id} is of an unexpected type: {type(polled_data_full)}. Content: {str(polled_data_full)[:200]}..."
|
418
445
|
)
|
419
|
-
raw_content = polled_data
|
420
446
|
except json.JSONDecodeError:
|
421
447
|
logger.error(
|
422
448
|
f"Processor {processor_name}: Failed to decode JSON from polling response for {message_id}. Response text: {poll_response.text[:200]}..."
|
@@ -427,11 +453,11 @@ class Processor(Generic[InputType, OutputType]):
|
|
427
453
|
break # Exit polling loop
|
428
454
|
|
429
455
|
elif poll_response.status_code == 404:
|
430
|
-
|
456
|
+
logger.debug(
|
431
457
|
f"Processor {processor_name}: Message {message_id} not yet ready (404). Retrying in {poll_interval_seconds}s..."
|
432
458
|
)
|
433
459
|
elif poll_response.status_code == 202:
|
434
|
-
|
460
|
+
logger.debug(
|
435
461
|
f"Processor {processor_name}: Message {message_id} processing (202). Retrying in {poll_interval_seconds}s..."
|
436
462
|
)
|
437
463
|
else:
|
@@ -19,11 +19,11 @@ nebu/processors/consumer_process_worker.py,sha256=h--eNFKaLbUayxn88mB8oGGdrU2liE
|
|
19
19
|
nebu/processors/decorate.py,sha256=5p9pQrk_H8-Fj0UjsgSVCYx7Jk7KFuhMZtNhkKvpmkQ,61306
|
20
20
|
nebu/processors/default.py,sha256=cy4ETMdbdRGkrvbYec1o60h7mGDlGN5JsuUph0ENtDU,364
|
21
21
|
nebu/processors/models.py,sha256=8-TmKha2_QAnPlXcZxYjrCSPDCX7FFcMDMcHK77jK0U,4223
|
22
|
-
nebu/processors/processor.py,sha256=
|
22
|
+
nebu/processors/processor.py,sha256=hHb5e2LfQhrLXIS-BJP183takGgEN6Z46VqzhepWM7U,37259
|
23
23
|
nebu/redis/models.py,sha256=coPovAcVXnOU1Xh_fpJL4PO3QctgK9nBe5QYoqEcnxg,1230
|
24
24
|
nebu/services/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
|
-
nebu-0.1.
|
26
|
-
nebu-0.1.
|
27
|
-
nebu-0.1.
|
28
|
-
nebu-0.1.
|
29
|
-
nebu-0.1.
|
25
|
+
nebu-0.1.129.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
26
|
+
nebu-0.1.129.dist-info/METADATA,sha256=GOVWO0OfeW9hbJrKsA_zSXathJyI5lsYJw1vi3Ksf94,1798
|
27
|
+
nebu-0.1.129.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
28
|
+
nebu-0.1.129.dist-info/top_level.txt,sha256=uLIbEKJeGSHWOAJN5S0i5XBGwybALlF9bYoB1UhdEgQ,5
|
29
|
+
nebu-0.1.129.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|