async def put_body_chunk(self, chunk): ASSERT.true(self._has_begun) ASSERT.is_not(self._send_mechanism, _SendMechanisms.SENDFILE) self._send_mechanism = _SendMechanisms.SEND await self._headers_sent.wait() if chunk: await self._send_all(chunk)
def _join(self, task, trap): ASSERT.is_(trap.kind, traps.Traps.JOIN) ASSERT.is_(trap.task._kernel, self) ASSERT.is_not(trap.task, task) # You can't join yourself. if trap.task.is_completed(): self._ready_tasks.append(TaskReady(task, None, None)) else: self._task_completion_blocker.block(trap.task, task)
def do_startup(): varz = startup.call() main = varz[LABELS.main] kwargs = {} for parameter in inspect.signature(main).parameters.values(): if parameter.annotation is parameter.empty: ASSERT.is_not(parameter.default, parameter.empty) else: kwargs[parameter.name] = varz[parameter.annotation] return main, kwargs
async def write(self, data): if self._body.is_closed(): raise ResponseClosed('response is closed') ASSERT.is_not(self._send_mechanism, _SendMechanisms.SENDFILE) self._set_send_mechanism(_SendMechanisms.SEND) if not data: return 0 if self.is_uncommitted(): return self._precommit.write_nonblocking(data) try: await self._body.put(data) except queues.Closed: # Re-raise ValueError like other file-like classes. raise ResponseClosed('response is closed') from None return len(data)
def block(self, source, task): """Record that ``task`` is joining on ``source`` task.""" ASSERT.isinstance(source, tasks.Task) ASSERT.is_not(source, task) # A task can't join on itself. ASSERT.false(source.is_completed()) return super().block(source, task)
def __init__(self, type, doc=None, **kwargs): # pylint: disable=redefined-builtin ASSERT.is_not(type, None.__class__) super().__init__(type=type, doc=doc, **kwargs)
def _set_send_mechanism(self, mechanism): ASSERT.is_not(mechanism, _SendMechanisms.UNDECIDED) self._send_mechanism = mechanism self._send_mechanism_decided.set()
async def put_body_chunk(self, chunk): ASSERT.is_not(self._send_mechanism, _SendMechanisms.SENDFILE) self._send_mechanism = _SendMechanisms.SEND if chunk: await self._chunks.put(chunk)