from pathlib import Path
import argparse,io,json,os,urllib.request,uuid
from PIL import Image
ROOT=Path(__file__).resolve().parent
def upload(url,source,target):
 boundary='qr'+uuid.uuid4().hex
 data=(f'--{boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nu2netp\r\n--{boundary}\r\nContent-Disposition: form-data; name="file"; filename="input.png"\r\nContent-Type: image/png\r\n\r\n').encode()+source.read_bytes()+f'\r\n--{boundary}--\r\n'.encode()
 req=urllib.request.Request(url,data=data,headers={'Content-Type':'multipart/form-data; boundary='+boundary})
 with urllib.request.urlopen(req,timeout=180) as response:
  status=response.status;content_type=response.headers.get_content_type();raw=response.read(30*1024*1024+1)
 assert 200<=status<300 and content_type=='image/png','Unexpected status or response type'
 assert len(raw)<=30*1024*1024,'Oversize response'
 result=Image.open(io.BytesIO(raw));result.load();original=Image.open(source)
 assert result.format=='PNG' and result.mode=='RGBA' and result.size==original.size,'Invalid result image'
 target.parent.mkdir(exist_ok=True);temp=target.with_suffix('.tmp.png');temp.write_bytes(raw);os.replace(temp,target)
 return {'http_status':status,'content_type':content_type,'size':list(result.size),'mode':result.mode,'model':'u2netp'}
if __name__=='__main__':
 p=argparse.ArgumentParser();p.add_argument('--url',default='http://127.0.0.1:7041/api/remove');a=p.parse_args()
 record=upload(a.url,ROOT/'input.png',ROOT/'output/upload.png')
 (ROOT/'output/official-http.json').write_text(json.dumps(record,indent=2)+'\n');print(json.dumps(record))
