def __init__( self, content: typing.Any, status_code: int = 200, headers: dict = None, media_type: str = None, background: BackgroundTask = None, ) -> None: if inspect.isasyncgen(content): self.body_iterator = content else: self.body_iterator = iterate_in_threadpool(content) self.status_code = status_code self.media_type = self.media_type if media_type is None else media_type self.background = background self.init_headers(headers)
def __init__( self, content: ContentStream, status_code: int = 200, headers: typing.Optional[typing.Mapping[str, str]] = None, media_type: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: if isinstance(content, typing.AsyncIterable): self.body_iterator = content else: self.body_iterator = iterate_in_threadpool(content) self.status_code = status_code self.media_type = self.media_type if media_type is None else media_type self.background = background self.init_headers(headers)
def __init__( self, content: Any, # content: Iterator[Any], # content: Union[ # Generator[Union[str, Dict], None, None], # AsyncGenerator[Union[str, Dict], None], # ], status_code: int = 200, headers: dict = None, media_type: str = "text/html", background: BackgroundTask = None, ping: int = None, sep: str = None, ) -> None: self.sep = sep if inspect.isasyncgen(content): self.body_iterator = content else: self.body_iterator = iterate_in_threadpool(content) self.status_code = status_code self.media_type = self.media_type if media_type is None else media_type self.background = background _headers = dict() if headers is not None: # pragma: no cover _headers.update(headers) # mandatory for servers-sent events headers _headers["Content-Type"] = "text/event-stream" _headers["Cache-Control"] = "no-cache" _headers["Connection"] = "keep-alive" _headers["X-Accel-Buffering"] = "no" # _headers['Transfer-Encoding'] = 'chunked' self.init_headers(_headers) self._loop = None self.ping_interval = self.DEFAULT_PING_INTERVAL if ping is None else ping self._ping_task = None self.active = True self._loop = asyncio.get_event_loop() self._ping_task = None
def __init__( self, content: Any, status_code: int = 200, headers: Optional[Dict] = None, media_type: str = "text/event-stream", background: Optional[BackgroundTask] = None, ping: Optional[int] = None, sep: Optional[str] = None, ping_message_factory: Optional[Callable[[], ServerSentEvent]] = None, ) -> None: self.sep = sep self.ping_message_factory = ping_message_factory if inspect.isasyncgen(content): self.body_iterator = ( content ) # type: AsyncIterable[Union[Any,dict,ServerSentEvent]] else: self.body_iterator = iterate_in_threadpool(content) # type: ignore self.status_code = status_code self.media_type = self.media_type if media_type is None else media_type self.background = background # type: ignore # follows https://github.com/encode/starlette/blob/master/starlette/responses.py _headers = {} if headers is not None: # pragma: no cover _headers.update(headers) # mandatory for servers-sent events headers # allow cache control header to be set by user to support fan out proxies # https://www.fastly.com/blog/server-sent-events-fastly _headers.setdefault("Cache-Control", "no-cache") _headers["Connection"] = "keep-alive" _headers["X-Accel-Buffering"] = "no" self.init_headers(_headers) self.ping_interval = self.DEFAULT_PING_INTERVAL if ping is None else ping self.active = True self._ping_task = None