33application layers (storage, logs) when running standalone workers
44without having to initialise the HTTP framework (or other ones)
55"""
6+
67import os
7- from typing import Annotated , Union , Dict , Type , Optional , List
8+ from typing import Union
89
910import structlog
10- from pydantic import Field
11-
12- from bootstrap import AppConfig , application_init
13- from faststream import FastStream , Logger
11+ from faststream import FastStream
1412from opentelemetry import trace
1513from opentelemetry .exporter .otlp .proto .grpc .trace_exporter import OTLPSpanExporter
1614from opentelemetry .sdk .resources import Resource
1715from opentelemetry .sdk .trace import TracerProvider
1816from opentelemetry .sdk .trace .export import BatchSpanProcessor
1917
20- from domains .books .events import BookCreatedV1 , BookUpdatedV1 , BookCreatedV1Data
18+ from bootstrap import AppConfig , application_init
19+ from domains .books .events import BookCreatedV1 , BookCreatedV1Data
2120
22- _event_registry : Dict [str , Type ] = {
23- 'books' : Annotated [
24- Union [BookCreatedV1 , BookUpdatedV1 ], Field (discriminator = "type" )
25- ]
26- }
2721
2822def setup_telemetry (service_name : str , otlp_endpoint : str ) -> TracerProvider :
2923 resource = Resource .create (attributes = {"service.name" : service_name })
@@ -35,41 +29,24 @@ def setup_telemetry(service_name: str, otlp_endpoint: str) -> TracerProvider:
3529 return tracer_provider
3630
3731
38- def register_subscribers (broker , topics : Optional [List [str ]] = None ):
39- if topics is None :
40- topics_map : Dict [str , Type ] = _event_registry
41- else :
42- topics_map : Dict [str , Type ] = {k : v for k , v in _event_registry .items () if k in topics }
43-
44-
45- for topic , event_type in topics_map .items ():
46- @broker .subscriber (topic ) # type: ignore
47- async def handler (msg : event_type , logger : Logger ) -> None :
48- logger .info (f"Received message { type (msg )} { msg } " )
49- # logger.info(f"Received message {type(msg)} {msg}", extra={"msg": "some_extra_here"})
50- # l = logging.getLogger()
51- # l.info("AAAAA", extra={"eee": "AAA"})
52-
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" ])
32+ def create_app (test_config : Union [AppConfig , None ] = None ) -> FastStream :
33+ setup_telemetry (
34+ "faststream" , otlp_endpoint = os .environ ["OTEL_EXPORTER_OTLP_ENDPOINT" ]
35+ )
5836 broker = application_init (AppConfig ()).faststream_broker
5937 app = FastStream (broker , logger = structlog .get_logger ())
60- register_subscribers (broker )
61-
62- publisher = broker .publisher ("books" , schema = _event_registry ["books" ])
6338
6439 @app .after_startup
6540 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-
41+ await broker .publish (
42+ BookCreatedV1 .event_factory (
43+ data = BookCreatedV1Data (
44+ book_id = 123 ,
45+ title = "AAA" ,
46+ author_name = "BBB" ,
47+ )
48+ ),
49+ "books" ,
50+ )
7451
7552 return app
0 commit comments