def handle_azuretable()

in elasticapm/instrumentation/packages/azure.py [0:0]


def handle_azuretable(request, hostname, path, query_params, service, service_type, context):
    """
    Returns the HandlerInfo for Azure Table Storage operations
    """
    account_name = hostname.split(".")[0]
    method = request.method
    body = request.body
    try:
        body = json.loads(body)
    except json.decoder.JSONDecodeError:  # str not bytes
        body = {}
    # /tablename(PartitionKey='<partition-key>',RowKey='<row-key>')
    resource_name = path.split("/", 1)[1] if "/" in path else path
    context["destination"]["service"] = {
        "name": service,
        "resource": "{}/{}".format(service, account_name),
        "type": service_type,
    }

    operation_name = "Unknown"
    if method.lower() == "put":
        operation_name = "Update"
        if "properties" in query_params.get("comp", []):
            operation_name = "SetProperties"
        elif "acl" in query_params.get("comp", []):
            operation_name = "SetAcl"
    elif method.lower() == "post":
        if resource_name == "Tables":
            resource_name = body.get("TableName", resource_name)
            operation_name = "Create"
        else:  # /<tablename>
            operation_name = "Insert"
    elif method.lower() == "get":
        operation_name = "Query"  # for both /Tables and /table()
        if "properties" in query_params.get("comp", []):
            operation_name = "GetProperties"
        elif "stats" in query_params.get("comp", []):
            operation_name = "Stats"
        elif "acl" in query_params.get("comp", []):
            operation_name = "GetAcl"
    elif method.lower() == "delete":
        operation_name = "Delete"
        if "Tables" in resource_name and "'" in resource_name:
            resource_name = resource_name.split("'")[1]  # /Tables('<table_name>')
    elif method.lower() == "options":
        operation_name = "Preflight"
    elif method.lower() == "head" and "acl" in query_params.get("comp", []):
        operation_name = "GetAcl"
    elif method.lower() == "merge":
        operation_name = "Merge"

    signature = "AzureTable {} {}".format(operation_name, resource_name)

    return HandlerInfo(signature, service_type, service, operation_name, context)