Spaces:
Sleeping
Sleeping
Prioritize form-data/urlencoded for POST /fact-check and require claim when form used
Browse files- cve_factchecker/app.py +23 -20
cve_factchecker/app.py
CHANGED
|
@@ -70,29 +70,32 @@ def fact_check() -> Any:
|
|
| 70 |
if request.method == 'GET':
|
| 71 |
claim = request.args.get('claim') or request.args.get('text')
|
| 72 |
else: # POST
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
if not claim:
|
| 78 |
claim = request.form.get('claim') or request.form.get('text')
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
raw = request.get_data(cache=False, as_text=True) or ''
|
| 92 |
claim = raw.strip()
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
if not claim:
|
| 97 |
return jsonify({"error": "claim parameter or JSON field 'claim' required"}), 400
|
| 98 |
result, code = _run_fact_check(claim)
|
|
|
|
| 70 |
if request.method == 'GET':
|
| 71 |
claim = request.args.get('claim') or request.args.get('text')
|
| 72 |
else: # POST
|
| 73 |
+
content_type = (request.content_type or '').lower()
|
| 74 |
+
# Prefer form-data / urlencoded strictly when provided (Postman Body: form-data)
|
| 75 |
+
if 'multipart/form-data' in content_type or 'application/x-www-form-urlencoded' in content_type:
|
| 76 |
+
# form fields first
|
|
|
|
| 77 |
claim = request.form.get('claim') or request.form.get('text')
|
| 78 |
+
# then file fields
|
| 79 |
+
if not claim and request.files:
|
| 80 |
+
f = (request.files.get('file') or request.files.get('claim') or request.files.get('claim_file'))
|
| 81 |
+
if f:
|
| 82 |
+
try:
|
| 83 |
+
claim = (f.read() or b'').decode('utf-8', errors='ignore').strip()
|
| 84 |
+
except Exception:
|
| 85 |
+
claim = None
|
| 86 |
+
if not claim:
|
| 87 |
+
return jsonify({"error": "Please provide claim via form-data: key 'claim' or 'text' (or upload file as 'file')."}), 400
|
| 88 |
+
else:
|
| 89 |
+
# JSON payload
|
| 90 |
+
payload = request.get_json(silent=True) or {}
|
| 91 |
+
claim = payload.get('claim') or payload.get('text')
|
| 92 |
+
# raw text/plain
|
| 93 |
+
if not claim and 'text/plain' in content_type:
|
| 94 |
raw = request.get_data(cache=False, as_text=True) or ''
|
| 95 |
claim = raw.strip()
|
| 96 |
+
# query fallback
|
| 97 |
+
if not claim:
|
| 98 |
+
claim = request.args.get('claim') or request.args.get('text')
|
| 99 |
if not claim:
|
| 100 |
return jsonify({"error": "claim parameter or JSON field 'claim' required"}), 400
|
| 101 |
result, code = _run_fact_check(claim)
|