Beispiel #1
0
def schemas():

    byc = initialize_service()
    create_empty_service_response(byc)

    s_path = path.join( pkg_path, "schemas" )
    s_files = [ f.name for f in scandir(s_path) if f.is_file() ]
    s_files = [ f for f in s_files if f.endswith(".yaml") ]
    s_files = [ f for f in s_files if not f.startswith("_") ]
    # commenting beacon since remote $ref are not handled yet
    # s_files = [ f for f in s_files if not f.startswith("beacon") ]

    schema_name = rest_path_value("schemas")

    if schema_name is not False:
        for s_f in s_files:
            f_name = os.path.splitext( s_f )[0]
            if f_name == schema_name:
                s = read_schema_files(f_name, "")
                if "$id" in s:
                    byc["service_response"]["meta"]["returned_schemas"] = [ s["$id"] ]
                populate_service_response(byc, [s])
                cgi_print_json_response( byc, 200 )
                exit()
    
    response_add_error(byc, 422, "No correct schema name provided!")
 
    cgi_print_json_response( byc, 422 )
Beispiel #2
0
def geolocations():

    byc = initialize_service()

    # for the geolocs database, not the provenance object
    byc["geoloc_definitions"]["geo_root"] = "geo_location"

    create_empty_service_response(byc)

    query, geo_pars = geo_query(**byc)
    for g_k, g_v in geo_pars.items():
        response_add_parameter(byc, g_k, g_v)

    if len(query.keys()) < 1:
        response_add_error(
            byc, 422, "No query generated - missing or malformed parameters")

    cgi_break_on_errors(byc)

    results, e = mongo_result_list(byc["geo_db"], byc["geo_coll"], query,
                                   {'_id': False})
    if e:
        response_add_error(byc, 422, e)

    cgi_break_on_errors(byc)

    populate_service_response(byc, results)
    cgi_print_json_response(byc, 200)
Beispiel #3
0
def info():

    byc = initialize_service()
    parse_beacon_schema(byc)
    create_empty_service_response(byc)
    byc["beacon_info"].update({"datasets": datasets_update_latest_stats(byc)})
    populate_service_response(byc, [byc["beacon_info"]])
    cgi_print_json_response(byc, 200)
Beispiel #4
0
def services(service):

    set_debug_state(debug=0)

    uri = environ.get('REQUEST_URI')

    these_prefs = read_local_prefs("service_mappings", dir_path)

    rest_base_name = "services"

    if path in these_prefs["service_names"]:
        service_name = path
    else:
        service_name = rest_path_value(rest_base_name)

    if service_name in these_prefs["service_names"]:
        f = these_prefs["service_names"][service_name]

        # dynamic package/function loading
        try:
            mod = import_module(f)
            serv = getattr(mod, f)
            serv()
            exit()
        except Exception as e:
            print('Content-Type: text')
            print('status:422')
            print()
            print('Service {} error: {}'.format(f, e))

            exit()

    if service_name in these_prefs["rewrites"]:
        pat = re.compile(rf"^.+\/{service_name}\/?(.*?)$")
        if pat.match(uri):
            stuff = pat.match(uri).group(1)
            cgi_print_rewrite_response(these_prefs["rewrites"][service_name],
                                       stuff)

    cgi_print_json_response(
        {
            "service_response": {
                "response": {
                    "error": {
                        "error_code":
                        422,
                        "error_message":
                        "No correct service path provided. Please refer to the documentation at http://info.progenetix.org/tags/services"
                    },
                }
            }
        }, 422)
Beispiel #5
0
def datasets():

    byc = initialize_service()

    parse_beacon_schema(byc)

    select_dataset_ids(byc)
    check_dataset_ids(byc)
    _get_history_depth(byc)

    create_empty_service_response(byc)

    results = datasets_update_latest_stats(byc)

    populate_service_response(byc, results)
    cgi_print_json_response(byc, 200)
Beispiel #6
0
def dbstats():

    byc = initialize_service()

    select_dataset_ids(byc)
    check_dataset_ids(byc)

    if "statsNumber" in byc["form_data"]:
        s_n = byc["form_data"].getvalue("statsNumber")
        try:
            s_n = int(s_n)
        except:
            pass
        if type(s_n) == int:
            if s_n > 0:
                byc["stats_number"] = s_n

    create_empty_service_response(byc)

    ds_stats = dbstats_return_latest(byc)

    results = []
    for stat in ds_stats:
        byc["service_response"]["response"]["info"].update(
            {"date": stat["date"]})
        for ds_id, ds_vs in stat["datasets"].items():
            if len(byc["dataset_ids"]) > 0:
                if not ds_id in byc["dataset_ids"]:
                    continue
            dbs = {"dataset_id": ds_id}
            for k in byc["these_prefs"]["methods"][byc["method"]]:
                dbs.update({k: ds_vs[k]})
            results.append(dbs)

    populate_service_response(byc, results)
    cgi_print_json_response(byc, 200)