def get_json_meta_type(field, snuba_type): alias_definition = FIELD_ALIASES.get(field) if alias_definition and alias_definition.get("result_type"): return alias_definition.get("result_type") if "duration" in field: return "duration" if field == "transaction.status": return "string" return get_json_type(snuba_type)
def get_json_meta_type(field, snuba_type): alias_definition = FIELD_ALIASES.get(field) if alias_definition and alias_definition.get("result_type"): return alias_definition.get("result_type") function_match = FUNCTION_ALIAS_PATTERN.match(field) if function_match: function_definition = FUNCTIONS.get(function_match.group(1)) if function_definition and function_definition.get("result_type"): return function_definition.get("result_type") # TODO remove this check when field aliases are removed. if "duration" in field or field in ("p75", "p95", "p99"): return "duration" if field == "transaction.status": return "string" return get_json_type(snuba_type)
def handle_results_with_meta(self, request, organization, project_ids, results): data = self.handle_data(request, organization, project_ids, results.get("data")) if not data: return {"data": [], "meta": {}} meta = { value["name"]: snuba.get_json_type(value["type"]) for value in results["meta"] } # Ensure all columns in the result have types. for key in data[0]: if key not in meta: meta[key] = "string" return {"meta": meta, "data": data}
def handle_results(self, snuba_results, requested_query, projects): if "project.name" in requested_query["selected_columns"]: project_name_index = requested_query["selected_columns"].index( "project.name") snuba_results["meta"].insert(project_name_index, { "name": "project.name", "type": "String" }) if "project.id" not in requested_query["selected_columns"]: snuba_results["meta"] = [ field for field in snuba_results["meta"] if field["name"] != "project.id" ] for result in snuba_results["data"]: if "project.id" in result: result["project.name"] = projects[result["project.id"]] if "project.id" not in requested_query["selected_columns"]: del result["project.id"] if "project.name" in requested_query["groupby"]: project_name_index = requested_query["groupby"].index( "project.name") snuba_results["meta"].insert(project_name_index, { "name": "project.name", "type": "String" }) if "project.id" not in requested_query["groupby"]: snuba_results["meta"] = [ field for field in snuba_results["meta"] if field["name"] != "project.id" ] for result in snuba_results["data"]: if "project.id" in result: result["project.name"] = projects[result["project.id"]] if "project.id" not in requested_query["groupby"]: del result["project.id"] # Convert snuba types to json types for col in snuba_results["meta"]: col["type"] = snuba.get_json_type(col.get("type")) return snuba_results
def handle_results(self, snuba_results, requested_query, projects): if 'project.name' in requested_query['selected_columns']: project_name_index = requested_query['selected_columns'].index( 'project.name') snuba_results['meta'].insert(project_name_index, { 'name': 'project.name', 'type': 'String' }) if 'project.id' not in requested_query['selected_columns']: snuba_results['meta'] = [ field for field in snuba_results['meta'] if field['name'] != 'project.id' ] for result in snuba_results['data']: if 'project.id' in result: result['project.name'] = projects[result['project.id']] if 'project.id' not in requested_query['selected_columns']: del result['project.id'] if 'project.name' in requested_query['groupby']: project_name_index = requested_query['groupby'].index( 'project.name') snuba_results['meta'].insert(project_name_index, { 'name': 'project.name', 'type': 'String' }) if 'project.id' not in requested_query['groupby']: snuba_results['meta'] = [ field for field in snuba_results['meta'] if field['name'] != 'project.id' ] for result in snuba_results['data']: if 'project.id' in result: result['project.name'] = projects[result['project.id']] if 'project.id' not in requested_query['groupby']: del result['project.id'] # Convert snuba types to json types for col in snuba_results['meta']: col['type'] = snuba.get_json_type(col.get('type')) return snuba_results
def handle_results_with_meta(self, request, organization, project_ids, results): data = self.handle_data(request, organization, project_ids, results.get('data')) if not data: return {'data': [], 'meta': {}} meta = { value['name']: snuba.get_json_type(value['type']) for value in results['meta'] } # Ensure all columns in the result have types. for key in data[0]: if key not in meta: meta[key] = 'string' return { 'meta': meta, 'data': data, }
def test_get_json_type(self): assert get_json_type("UInt8") == "boolean" assert get_json_type("UInt16") == "integer" assert get_json_type("UInt32") == "integer" assert get_json_type("UInt64") == "integer" assert get_json_type("Float32") == "number" assert get_json_type("Float64") == "number" assert get_json_type("Nullable(Float64)") == "number" assert get_json_type("Array(String)") == "array" assert get_json_type("Char") == "string" assert get_json_type("unknown") == "string" assert get_json_type("") == "string"
def test_get_json_type(self): assert get_json_type('UInt8') == 'boolean' assert get_json_type('UInt16') == 'integer' assert get_json_type('UInt32') == 'integer' assert get_json_type('UInt64') == 'integer' assert get_json_type('Float32') == 'number' assert get_json_type('Float64') == 'number' assert get_json_type('Nullable(Float64)') == 'number' assert get_json_type('Array(String)') == 'array' assert get_json_type('Char') == 'string' assert get_json_type('unknown') == 'string' assert get_json_type('') == 'string'