#!/usr/bin/env python3 # This file is part of Elixir, a source code cross-referencer. # # Copyright (C) 2019--2020 Carmeli Tamir and contributors. # # Elixir is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Elixir is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with Elixir. If not, see . import json import os import falcon ELIXIR_DIR = os.path.dirname(__file__) + '/..' def build_query(env, project): if 'LXR_DATA_DIR' not in os.environ or 'LXR_REPO_DIR' not in os.environ: basedir = env['LXR_PROJ_DIR'] os.environ['LXR_DATA_DIR']= basedir + '/' + project + '/data' os.environ['LXR_REPO_DIR'] = basedir + '/' + project + '/repo' import sys sys.path = [ ELIXIR_DIR ] + sys.path import query return query.query class IdentGetter: def on_get(self, req, resp, project, ident): query = build_query(req.env, project) if 'version' in req.params: version = req.params['version'] else: raise falcon.HTTPMissingParam('version') if version == 'latest': version = query('latest') if 'family' in req.params: family = req.params['family'] else: family = 'C' symbol_definitions, symbol_references, symbol_doccomments_UNUSED = query('ident', version, ident, family) resp.body = json.dumps( { 'definitions': [sym.__dict__ for sym in symbol_definitions], 'references': [sym.__dict__ for sym in symbol_references] }) resp.status = falcon.HTTP_200 def create_ident_getter(): application = falcon.API() idents = IdentGetter() application.add_route('/ident/{project}/{ident}', idents) return application application = create_ident_getter()