33application layers (storage, logs) when running standalone workers
44without having to initialise the HTTP framework (or other ones)
55"""
6-
76import os
87from typing import Annotated , Union , Dict , Type , Optional , List
98
1817from opentelemetry .sdk .trace import TracerProvider
1918from opentelemetry .sdk .trace .export import BatchSpanProcessor
2019
21- from domains .books .events import BookCreatedV1 , BookUpdatedV1
20+ from domains .books .events import BookCreatedV1 , BookUpdatedV1 , BookCreatedV1Data
2221
2322_event_registry : Dict [str , Type ] = {
2423 'books' : Annotated [
@@ -36,24 +35,41 @@ def setup_telemetry(service_name: str, otlp_endpoint: str) -> TracerProvider:
3635 return tracer_provider
3736
3837
39- def create_app (
40- test_config : Union [AppConfig , None ] = None
41- ) -> FastStream :
42- setup_telemetry ("faststream" , otlp_endpoint = os .environ ["OTEL_EXPORTER_OTLP_ENDPOINT" ])
43- broker = application_init (test_config or AppConfig ()).faststream_broker
44- return FastStream (broker , logger = structlog .get_logger ())
45-
46-
4738def register_subscribers (broker , topics : Optional [List [str ]] = None ):
4839 if topics is None :
4940 topics_map : Dict [str , Type ] = _event_registry
5041 else :
5142 topics_map : Dict [str , Type ] = {k : v for k , v in _event_registry .items () if k in topics }
5243
53- for topic , event_type in topics_map :
44+
45+ for topic , event_type in topics_map .items ():
5446 @broker .subscriber (topic ) # type: ignore
5547 async def handler (msg : event_type , logger : Logger ) -> None :
56- logger .info ("Received message" , extra = {"msg" : "some_extra_here" })
48+ logger .info (f"Received message { type (msg )} { msg } " )
49+ # logger.info(f"Received message {type(msg)} {msg}", extra={"msg": "some_extra_here"})
5750 # l = logging.getLogger()
5851 # l.info("AAAAA", extra={"eee": "AAA"})
5952
53+
54+ def create_app (
55+ test_config : Union [AppConfig , None ] = None
56+ ) -> FastStream :
57+ setup_telemetry ("faststream" , otlp_endpoint = os .environ ["OTEL_EXPORTER_OTLP_ENDPOINT" ])
58+ broker = application_init (AppConfig ()).faststream_broker
59+ app = FastStream (broker , logger = structlog .get_logger ())
60+ register_subscribers (broker )
61+
62+ publisher = broker .publisher ("books" , schema = _event_registry ["books" ])
63+
64+ @app .after_startup
65+ async def after_startup ():
66+ await broker .publish (BookCreatedV1 .event_factory (
67+ data = BookCreatedV1Data (
68+ book_id = 123 ,
69+ title = "AAA" ,
70+ author_name = "BBB" ,
71+ )
72+ ), "books" )
73+
74+
75+ return app
0 commit comments