Changeset View
Changeset View
Standalone View
Standalone View
swh/scanner/tests/flask_api.py
# Copyright (C) 2020 The Software Heritage developers | # Copyright (C) 2020 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from flask import Flask, request | from flask import Flask, request | ||||
from swh.model.exceptions import ValidationError | |||||
from swh.model.identifiers import parse_swhid | |||||
from swh.scanner.exceptions import BadInputExc | |||||
from swh.web.common.exc import LargePayloadExc | from swh.web.common.exc import LargePayloadExc | ||||
from .data import present_swhids | from .data import present_swhids | ||||
def create_app(): | def create_app(): | ||||
app = Flask(__name__) | app = Flask(__name__) | ||||
@app.route("/known/", methods=["POST"]) | @app.route("/known/", methods=["POST"]) | ||||
def known(): | def known(): | ||||
swhids = request.get_json() | swhids = request.get_json() | ||||
if len(swhids) > 900: | if len(swhids) > 900: | ||||
raise LargePayloadExc( | raise LargePayloadExc( | ||||
"The maximum number of SWHIDs this endpoint can receive is 900" | "The maximum number of SWHIDs this endpoint can receive is 900" | ||||
) | ) | ||||
res = {swhid: {"known": False} for swhid in swhids} | res = {swhid: {"known": False} for swhid in swhids} | ||||
for swhid in swhids: | for swhid in swhids: | ||||
try: | |||||
parse_swhid(swhid) | |||||
if swhid in present_swhids: | if swhid in present_swhids: | ||||
res[swhid]["known"] = True | res[swhid]["known"] = True | ||||
except ValidationError: | |||||
raise BadInputExc("An invalid SWHID was provided", status_code=400) | |||||
return res | return res | ||||
return app | return app |