#!/usr/bin/env python3 """Manual smoke test of the scanner endpoint. Usage: scan-smoke.py [value] [port]""" import base64, json, sys, urllib.request mode = sys.argv[1] value = sys.argv[2] if len(sys.argv) > 2 else '' port = sys.argv[3] if len(sys.argv) > 3 else '3002' if mode == 'photo': body = {"mode": "photo", "images": [{"data": base64.b64encode(open(value, 'rb').read()).decode(), "mediaType": "image/jpeg"}]} elif mode == 'url': body = {"mode": "url", "url": value} else: body = {"mode": "text", "text": value} req = urllib.request.Request(f'http://127.0.0.1:{port}/api/scanner', data=json.dumps(body).encode(), headers={'content-type': 'application/json'}) try: r = json.load(urllib.request.urlopen(req, timeout=180)) except urllib.error.HTTPError as e: print('HTTP', e.code, e.read().decode()[:500]); sys.exit(1) print(json.dumps({k: r.get(k) for k in ('sessionId', 'mode', 'guessConfidence', 'model', 'usdEst', 'durationMs', 'notes')}, indent=1)) g = r.get('guess') or {} print('guess', {k: g.get(k) for k in ('categorySlug', 'name', 'brand', 'set', 'number', 'year', 'variant', 'grader', 'grade', 'likelyGradeRange')}) print('warnings', g.get('warnings')) print('candidates', [(c['title'], round(c['score'], 2)) for c in r.get('candidates', [])]) print('best', (r.get('best') or {}).get('title')) if r.get('listing'): l = r['listing'] print('listing', l['sourceId'], l['rawTitle'], l['price'], l['currency'], l['verdict'], l['discountToRiv'])