29 خطوط
1.6 KiB
Python
29 خطوط
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Actual HTTP upload → durable comparison worker → private result/SVG check."""
|
|
import argparse
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import time
|
|
import httpx
|
|
p=argparse.ArgumentParser();p.add_argument('old_file',type=Path);p.add_argument('new_file',type=Path);p.add_argument('--url',default='http://127.0.0.1:8000');args=p.parse_args()
|
|
with httpx.Client(base_url=args.url,timeout=60) as client:
|
|
response=client.post('/api/compare',headers={'X-API-Key':os.environ.get('API_KEY','')},
|
|
files={'old_file':(args.old_file.name,args.old_file.read_bytes()),'new_file':(args.new_file.name,args.new_file.read_bytes())})
|
|
assert response.status_code==202,response.text
|
|
created=response.json();identifier=created['comparison_id'];headers={'X-Viewer-Token':created['viewer_token']};base='/api/v1/comparisons/'+identifier
|
|
assert client.get(base).status_code==404
|
|
deadline=time.monotonic()+120
|
|
while time.monotonic()<deadline:
|
|
result=client.get(base,headers=headers).json()
|
|
if result['status'] in ('completed','failed'):break
|
|
time.sleep(.5)
|
|
assert result['status']=='completed',result
|
|
for side in ('old','new'):
|
|
svg=client.get(base+'/svg/'+side,headers=headers)
|
|
assert svg.status_code==200 and '<svg' in svg.text
|
|
assert client.get(base+'/svg/'+side).status_code==404
|
|
assert client.get('/compare/'+identifier).status_code==200
|
|
print(json.dumps({'id':identifier,'status':result['status'],'summary':result['summary'],
|
|
'total_changed':result['total_changed'],'private_access_enforced':True},indent=2))
|