def wrapper(wrapped, instance, args, kwargs): if type(application) != Application: _application = application_instance(application) else: _application = application if callable(name): if instance is not None: _name = name(instance, *args, **kwargs) else: _name = name(*args, **kwargs) elif name is None: _name = callable_name(wrapped) else: _name = name if callable(group): if instance is not None: _group = group(instance, *args, **kwargs) else: _group = group(*args, **kwargs) else: _group = group if callable(scheme): if instance is not None: _scheme = scheme(instance, *args, **kwargs) else: _scheme = scheme(*args, **kwargs) else: _scheme = scheme if callable(host): if instance is not None: _host = host(instance, *args, **kwargs) else: _host = host(*args, **kwargs) else: _host = host if callable(port): if instance is not None: _port = port(instance, *args, **kwargs) else: _port = port(*args, **kwargs) else: _port = port if callable(request_method): if instance is not None: _request_method = request_method(instance, *args, **kwargs) else: _request_method = request_method(*args, **kwargs) else: _request_method = request_method if callable(request_path): if instance is not None: _request_path = request_path(instance, *args, **kwargs) else: _request_path = request_path(*args, **kwargs) else: _request_path = request_path if callable(query_string): if instance is not None: _query_string = query_string(instance, *args, **kwargs) else: _query_string = query_string(*args, **kwargs) else: _query_string = query_string if callable(headers): if instance is not None: _headers = headers(instance, *args, **kwargs) else: _headers = headers(*args, **kwargs) else: _headers = headers proxy = async_proxy(wrapped) def create_transaction(transaction): if transaction: return None return WebTransaction(_application, _name, _group, _scheme, _host, _port, _request_method, _request_path, _query_string, _headers) if proxy: context_manager = TransactionContext(create_transaction) return proxy(wrapped(*args, **kwargs), context_manager) transaction = WebTransaction(_application, _name, _group, _scheme, _host, _port, _request_method, _request_path, _query_string, _headers) transaction = create_transaction( current_transaction(active_only=False)) if not transaction: return wrapped(*args, **kwargs) with transaction: return wrapped(*args, **kwargs)
def wrapper(wrapped, instance, args, kwargs): if callable(library): if instance is not None: _library = library(instance, *args, **kwargs) else: _library = library(*args, **kwargs) else: _library = library if callable(destination_type): if instance is not None: _destination_type = destination_type(instance, *args, **kwargs) else: _destination_type = destination_type(*args, **kwargs) else: _destination_type = destination_type if callable(destination_name): if instance is not None: _destination_name = destination_name(instance, *args, **kwargs) else: _destination_name = destination_name(*args, **kwargs) else: _destination_name = destination_name if callable(routing_key): if instance is not None: _routing_key = routing_key(instance, *args, **kwargs) else: _routing_key = routing_key(*args, **kwargs) else: _routing_key = routing_key if callable(exchange_type): if instance is not None: _exchange_type = exchange_type(instance, *args, **kwargs) else: _exchange_type = exchange_type(*args, **kwargs) else: _exchange_type = exchange_type if callable(headers): if instance is not None: _headers = headers(instance, *args, **kwargs) else: _headers = headers(*args, **kwargs) else: _headers = headers if callable(queue_name): if instance is not None: _queue_name = queue_name(instance, *args, **kwargs) else: _queue_name = queue_name(*args, **kwargs) else: _queue_name = queue_name if callable(reply_to): if instance is not None: _reply_to = reply_to(instance, *args, **kwargs) else: _reply_to = reply_to(*args, **kwargs) else: _reply_to = reply_to if callable(correlation_id): if instance is not None: _correlation_id = correlation_id(instance, *args, **kwargs) else: _correlation_id = correlation_id(*args, **kwargs) else: _correlation_id = correlation_id # Check to see if any transaction is present, even an inactive # one which has been marked to be ignored or which has been # stopped already. transaction = current_transaction(active_only=False) if transaction: # If there is any active transaction we will return without # applying a new WSGI application wrapper context. In the # case of a transaction which is being ignored or which has # been stopped, we do that without doing anything further. if transaction.ignore_transaction or transaction.stopped: return wrapped(*args, **kwargs) if not transaction.background_task: transaction.background_task = True transaction.set_transaction_name( *MessageTransaction.get_transaction_name( _library, _destination_type, _destination_name)) return wrapped(*args, **kwargs) # Otherwise treat it as top level transaction. if type(application) != Application: _application = application_instance(application) else: _application = application manager = MessageTransaction( library=_library, destination_type=_destination_type, destination_name=_destination_name, application=_application, routing_key=_routing_key, exchange_type=_exchange_type, headers=_headers, queue_name=_queue_name, reply_to=_reply_to, correlation_id=_correlation_id) proxy = async_proxy(wrapped) if proxy: context_manager = TransactionContext(manager) return proxy(wrapped(*args, **kwargs), context_manager) success = True try: manager.__enter__() try: return wrapped(*args, **kwargs) except: # Catch all success = False if not manager.__exit__(*sys.exc_info()): raise finally: if success and manager._ref_count == 0: manager._is_finalized = True manager.__exit__(None, None, None) else: manager._request_handler_finalize = True manager._server_adapter_finalize = True old_transaction = current_transaction() if old_transaction is not None: old_transaction.drop_transaction()
def wrapper(wrapped, instance, args, kwargs): if callable(name): if instance is not None: _name = name(instance, *args, **kwargs) else: _name = name(*args, **kwargs) elif name is None: _name = callable_name(wrapped) else: _name = name if callable(group): if instance is not None: _group = group(instance, *args, **kwargs) else: _group = group(*args, **kwargs) else: _group = group if type(application) != Application: _application = application_instance(application) else: _application = application def create_transaction(transaction): if transaction: # If there is any active transaction we will return without # applying a new WSGI application wrapper context. In the # case of a transaction which is being ignored or which has # been stopped, we do that without doing anything further. if transaction.ignore_transaction or transaction.stopped: return None if not transaction.background_task: transaction.background_task = True transaction.set_transaction_name(_name, _group) return None return BackgroundTask(_application, _name, _group, source=wrapped) proxy = async_proxy(wrapped) if proxy: context_manager = TransactionContext(create_transaction) return proxy(wrapped(*args, **kwargs), context_manager) manager = create_transaction(current_transaction(active_only=False)) if not manager: return wrapped(*args, **kwargs) success = True try: manager.__enter__() try: return wrapped(*args, **kwargs) except: success = False if not manager.__exit__(*sys.exc_info()): raise finally: if success and manager._ref_count == 0: manager._is_finalized = True manager.__exit__(None, None, None) else: manager._request_handler_finalize = True manager._server_adapter_finalize = True old_transaction = current_transaction() if old_transaction is not None: old_transaction.drop_transaction()