コード例 #1
0
def ingest_to_graph():
    """Import e/p/v data and generate response for the POST request to /api/v1/ingest_to_graph."""
    input_json = request.get_json()
    current_app.logger.info("Ingesting the given list of EPVs - " +
                            json.dumps(input_json))
    expected_keys = set(['ecosystem', 'name', 'version'])
    for epv in input_json:
        if not expected_keys.issubset(set(epv.keys())):
            response = {
                'message':
                'Invalid keys found in input: ' + ','.join(epv.keys())
            }
            return flask.jsonify(response), 400

    report = data_importer.import_epv_from_s3_http(list_epv=input_json)
    response = {
        'message': report.get('message'),
        'epv': input_json,
        'count_imported_EPVs': report.get('count_imported_EPVs')
    }
    print(response)
    # TODO the previous code can raise a runtime exception, does not we need to handle that?
    if report.get('status') is not 'Success':
        return flask.jsonify(response), 500
    else:
        return flask.jsonify(response)
コード例 #2
0
def sync_all():
    """Generate response for the GET request to /api/v1/sync_all."""
    current_app.logger.info("/api/v1/sync_all - %s" % dict(request.args))
    ecosystem_name = request.args.get('ecosystem', None)
    package_name = request.args.get('package', None)
    version_id = request.args.get('version', None)
    limit = request.args.get('limit', None)
    offset = request.args.get('offset', None)
    params = {
        "ecosystem": ecosystem_name,
        "package": package_name,
        "version": version_id,
        "limit": limit,
        "offset": offset
    }
    current_app.logger.info("params - %s" % params)

    data = data_importer.PostgresHandler().fetch_pending_epvs(**params)

    try:
        pending_list = data["pending_list"]
        report = data_importer.import_epv_from_s3_http(list_epv=pending_list)
        response = {
            'message': report.get('message'),
            'epv': pending_list,
            'count_imported_EPVs': report.get('count_imported_EPVs')
        }

        if report.get('status') is not 'Success':
            return flask.jsonify(response), 500
        else:
            return flask.jsonify(response)
    except RuntimeError:
        response = {'message': 'RuntimeError encountered', 'epv': pending_list}
        return flask.jsonify(response), 500
コード例 #3
0
def selective_ingest():
    input_json = request.get_json()

    if input_json.get('package_list') is None or len(input_json.get('package_list')) == 0:
        return flask.jsonify(message='No Packages provided. Nothing to be ingested'), 400

    expected_keys = set(['ecosystem', 'name'])
    for epv in input_json.get('package_list'):
        if not expected_keys.issubset(set(epv.keys())):
            response = {'message': 'Invalid keys found in input: ' + ','.join(epv.keys())}
            return flask.jsonify(response), 400

    app.logger.info("Selective Ingestion with payload - " + json.dumps(input_json))

    report = data_importer.import_epv_from_s3_http(list_epv=input_json.get('package_list'),
                                                   select_doc=input_json.get('select_ingest', None))
    response = {'message': report.get('message'),
                'epv': input_json,
                'count_imported_EPVs': report.get('count_imported_EPVs')}

    app.logger.info(response)

    if report.get('status') is not 'Success':
        return flask.jsonify(response), 500
    else:
        return flask.jsonify(response)
コード例 #4
0
def selective_ingest():
    """Import e/p/v data and generate response for the POST request to /api/v1/selective."""
    input_json = request.get_json()

    if input_json.get('package_list') is None or len(input_json.get('package_list')) == 0:
        return flask.jsonify(message='No Packages provided. Nothing to be ingested'), 400

    expected_keys = set(['ecosystem', 'name'])
    for epv in input_json.get('package_list'):
        if not expected_keys.issubset(set(epv.keys())):
            response = {'message': 'Invalid keys found in input: ' + ','.join(epv.keys())}
            return flask.jsonify(response), 400

    app.logger.info("Selective Ingestion with payload - " + json.dumps(input_json))

    report = data_importer.import_epv_from_s3_http(list_epv=input_json.get('package_list'),
                                                   select_doc=input_json.get('select_ingest', None))
    response = {'message': report.get('message'),
                'epv': input_json,
                'count_imported_EPVs': report.get('count_imported_EPVs')}

    app.logger.info(response)

    # TODO the previous code can raise a runtime exception, does not we need to handle that?
    if report.get('status') is not 'Success':
        return flask.jsonify(response), 500
    else:
        return flask.jsonify(response)
コード例 #5
0
def ingest_to_graph():
    input_json = request.get_json()
    app.logger.info("Ingesting the given list of EPVs - " +
                    json.dumps(input_json))

    expected_keys = set(['ecosystem', 'name', 'version'])
    for epv in input_json:
        if expected_keys != set(epv.keys()):
            response = {
                'message':
                'Invalid keys found in input: ' + ','.join(epv.keys())
            }
            return flask.jsonify(response), 400

    report = data_importer.import_epv_from_s3_http(list_epv=input_json)
    response = {
        'message': report.get('message'),
        'epv': input_json,
        'count_imported_EPVs': report.get('count_imported_EPVs')
    }
    print(response)
    if report.get('status') is not 'Success':
        return flask.jsonify(response), 500
    else:
        return flask.jsonify(response)
def test_insertion():
    """Test if the stored e/p/v data can be retrieved back."""
    list_epv = [{
        "version": "0.4.59",
        "name": "access_points",
        "ecosystem": "pypi"
    }]
    try:
        report = import_epv_from_s3_http(list_epv)
        logger.info(report)
        assert report['status'] == "Success"
        assert report["epv"] == ["pypi:access_points:0.4.59"]
        assert report["count_imported_EPVs"] == 1
    except Exception:
        tb = traceback.format_exc()
        logger.error("Traceback for latest failure in import call: %s" % tb)
def test_insertion():
    """Test if the stored e/p/v data can be retrieved back."""
    list_epv = [{
        "version": "0.4.59",
        "name": "access_points",
        "ecosystem": "pypi"
    }]
    try:
        report = import_epv_from_s3_http(list_epv)
        logger.info(report)
        assert report['status'] == "Success"
        # TODO Need to enable this test with new changes
        # assert report["epv"] == ["pypi:access_points:0.4.59"]
        assert report["count_imported_EPVs"] == 1
    except Exception:
        # TODO this is probably bad approach how to handle/ignore exceptions
        # see https://github.com/openshiftio/openshift.io/issues/2263
        tb = traceback.format_exc()
        logger.error("Traceback for latest failure in import call: %s" % tb)