|
1 | 1 | import functools
|
| 2 | +import inspect |
2 | 3 |
|
3 | 4 | import azure.functions as azure_functions
|
4 | 5 | from wrapt import wrap_function_wrapper as _w
|
@@ -57,6 +58,25 @@ def _patched_route(wrapped, instance, args, kwargs):
|
57 | 58 | def _wrapper(func):
|
58 | 59 | function_name = get_function_name(pin, instance, func)
|
59 | 60 |
|
| 61 | + if inspect.iscoroutinefunction(func): |
| 62 | + |
| 63 | + @functools.wraps(func) |
| 64 | + async def async_wrap_function(*args, **kwargs): |
| 65 | + req = kwargs.get(trigger_arg_name) |
| 66 | + with create_context("azure.functions.patched_route_request", pin) as ctx, ctx.span: |
| 67 | + ctx.set_item("req_span", ctx.span) |
| 68 | + core.dispatch("azure.functions.request_call_modifier", (ctx, config.azure_functions, req)) |
| 69 | + res = None |
| 70 | + try: |
| 71 | + res = await func(*args, **kwargs) |
| 72 | + return res |
| 73 | + finally: |
| 74 | + core.dispatch( |
| 75 | + "azure.functions.start_response", (ctx, config.azure_functions, res, function_name, trigger) |
| 76 | + ) |
| 77 | + |
| 78 | + return wrapped(*args, **kwargs)(async_wrap_function) |
| 79 | + |
60 | 80 | @functools.wraps(func)
|
61 | 81 | def wrap_function(*args, **kwargs):
|
62 | 82 | req = kwargs.get(trigger_arg_name)
|
@@ -88,6 +108,20 @@ def _wrapper(func):
|
88 | 108 | function_name = get_function_name(pin, instance, func)
|
89 | 109 | resource_name = f"{trigger} {function_name}"
|
90 | 110 |
|
| 111 | + if inspect.iscoroutinefunction(func): |
| 112 | + |
| 113 | + @functools.wraps(func) |
| 114 | + async def async_wrap_function(*args, **kwargs): |
| 115 | + with create_context("azure.functions.patched_timer", pin, resource_name) as ctx, ctx.span: |
| 116 | + ctx.set_item("trigger_span", ctx.span) |
| 117 | + core.dispatch( |
| 118 | + "azure.functions.trigger_call_modifier", |
| 119 | + (ctx, config.azure_functions, function_name, trigger), |
| 120 | + ) |
| 121 | + await func(*args, **kwargs) |
| 122 | + |
| 123 | + return wrapped(*args, **kwargs)(async_wrap_function) |
| 124 | + |
91 | 125 | @functools.wraps(func)
|
92 | 126 | def wrap_function(*args, **kwargs):
|
93 | 127 | with create_context("azure.functions.patched_timer", pin, resource_name) as ctx, ctx.span:
|
|
0 commit comments