MCPcopy Create free account
hub / github.com/apify/impit / __next__

Method __next__

impit-python/src/response.rs:33–88  ·  view source on GitHub ↗
(mut slf: PyRefMut<'_, Self>)

Source from the content-addressed store, hash-verified

31 }
32
33 fn __next__(mut slf: PyRefMut<'_, Self>) -> PyResult<Option<Vec<u8>>> {
34 if let Some(content) = slf.ready_content.take() {
35 slf.content_returned = true;
36 return Ok(Some(content));
37 }
38
39 if slf.content_returned {
40 return Ok(None);
41 }
42
43 if let Some(parent) = &slf.parent_response {
44 let py = slf.py();
45 let is_parent_closed = parent.borrow(py).is_closed;
46
47 if is_parent_closed && !slf.content_returned {
48 slf.content_returned = true;
49 return Ok(None);
50 }
51 }
52
53 let runtime = slf.runtime.clone();
54 let py = slf.py();
55
56 if let Some(stream) = &mut slf.stream {
57 let result = py.detach(|| runtime.block_on(stream.next()));
58
59 match result {
60 Some(Ok(chunk)) => Ok(Some(chunk.to_vec())),
61 Some(Err(e)) => {
62 slf.content_returned = true;
63 if let Some(parent) = &slf.parent_response {
64 if let Ok(mut parent_ref) = parent.try_borrow_mut(py) {
65 parent_ref.inner_state = InnerResponseState::StreamingClosed;
66 parent_ref.is_stream_consumed = true;
67 parent_ref.is_closed = true;
68 }
69 }
70 Err(ImpitPyError(ImpitError::from(e, None)).into())
71 }
72 None => {
73 slf.content_returned = true;
74 if let Some(parent) = &slf.parent_response {
75 if let Ok(mut parent_ref) = parent.try_borrow_mut(py) {
76 parent_ref.inner_state = InnerResponseState::StreamingClosed;
77 parent_ref.is_stream_consumed = true;
78 parent_ref.is_closed = true;
79 }
80 }
81 Ok(None)
82 }
83 }
84 } else {
85 slf.content_returned = true;
86 Ok(None)
87 }
88 }
89}
90

Callers

nothing calls this directly

Calls 2

ImpitPyErrorClass · 0.85
cloneMethod · 0.80

Tested by

no test coverage detected