NLPGenius commited on
Commit
1162b0d
·
1 Parent(s): b12c9e3

Prioritize form-data/urlencoded for POST /fact-check and require claim when form used

Browse files
Files changed (1) hide show
  1. 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
- # 1) JSON payload
74
- payload = request.get_json(silent=True) or {}
75
- claim = payload.get('claim') or payload.get('text')
76
- # 2) form-data / x-www-form-urlencoded
77
- if not claim:
78
  claim = request.form.get('claim') or request.form.get('text')
79
- # 3) file upload in form-data ("file", "claim", or "claim_file")
80
- if not claim and request.files:
81
- f = (request.files.get('file') or request.files.get('claim') or request.files.get('claim_file'))
82
- if f:
83
- try:
84
- claim = (f.read() or b'').decode('utf-8', errors='ignore').strip()
85
- except Exception:
86
- claim = None
87
- # 4) raw text/plain body
88
- if not claim:
89
- content_type = (request.content_type or '').lower()
90
- if 'text/plain' in content_type or (not payload and not request.form and not request.files):
 
 
 
 
91
  raw = request.get_data(cache=False, as_text=True) or ''
92
  claim = raw.strip()
93
- # 5) query fallback (e.g., ?claim=... with POST)
94
- if not claim:
95
- claim = request.args.get('claim') or request.args.get('text')
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)