You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
2 years ago
|
from typing import List, Optional
|
||
|
|
||
|
from amqpworker import conf
|
||
|
from amqpworker.connections import AMQPConnection
|
||
|
from amqpworker.entrypoints import EntrypointInterface, _extract_sync_callable
|
||
|
from amqpworker.routes import AMQPRoute, AMQPRouteOptions, RoutesRegistry
|
||
|
|
||
|
|
||
|
def _register_amqp_handler(
|
||
|
registry: RoutesRegistry,
|
||
|
routes: List[str],
|
||
|
vhost: str,
|
||
|
connection: Optional[AMQPConnection],
|
||
|
options: Optional[AMQPRouteOptions],
|
||
|
):
|
||
|
def _wrap(f):
|
||
|
cb = _extract_sync_callable(f)
|
||
|
route = AMQPRoute(
|
||
|
handler=cb,
|
||
|
routes=routes,
|
||
|
vhost=vhost,
|
||
|
connection=connection,
|
||
|
options=options,
|
||
|
)
|
||
|
registry.add_amqp_route(route)
|
||
|
|
||
|
return f
|
||
|
|
||
|
return _wrap
|
||
|
|
||
|
|
||
|
class AMQPRouteEntryPointImpl(EntrypointInterface):
|
||
|
def consume(
|
||
|
self,
|
||
|
routes: List[str],
|
||
|
vhost: str = conf.settings.AMQP_DEFAULT_VHOST,
|
||
|
connection: Optional[AMQPConnection] = None,
|
||
|
options: Optional[AMQPRouteOptions] = AMQPRouteOptions(),
|
||
|
):
|
||
|
return _register_amqp_handler(
|
||
|
self.app.routes_registry, routes, vhost, connection, options
|
||
|
)
|