Spaces:
Runtime error
Runtime error
| # this is to test actual playform | |
| import functools | |
| import requests | |
| from requests.exceptions import RequestException | |
| import io | |
| import numpy | |
| from PIL import Image | |
| # change this url to staging server or production server url | |
| api_url_base = "https://stage.playform.io/api/app/projects/" | |
| api_url_tail = "/generate/" | |
| playform_load = """ | |
| function(url_params) { | |
| console.log(url_params); | |
| const params = new URLSearchParams(window.location.search); | |
| url_params = Object.fromEntries(params); | |
| return [url_params]; | |
| } | |
| """ | |
| def get_session_param(param): | |
| api_url = "" | |
| token = "" | |
| try: | |
| if isinstance(param,list): | |
| api_url=api_url_base+str(param[0]["id"])+api_url_tail | |
| token = param[0]["token"] | |
| #token = token[4:] | |
| except: | |
| pass | |
| return api_url, token | |
| def prep_image(image): | |
| # takes a numpy image and prepare it to be sent | |
| if image.dtype == numpy.uint8: | |
| img = Image.fromarray(image) | |
| else: | |
| img = Image.fromarray((image*255).astype(numpy.uint8)) | |
| return img | |
| def send_image(img,api_url,token): | |
| # takes a PIL image and send it | |
| output=io.BytesIO() | |
| img.save(output, format='JPEG') | |
| f=output.getvalue() | |
| files = [('image',('image.jpg',f,'image/jpeg'))] | |
| # Set the headers for the request | |
| headers = {'Authorization': f'{token}'} | |
| payload = {} | |
| print(api_url,token) | |
| print(f'header: {headers}') | |
| try: | |
| response = requests.post(api_url,data=payload, headers=headers,files = files) | |
| response.raise_for_status() | |
| print("request sent") | |
| print(response.text) | |
| except RequestException as e: | |
| print('Request failed:', e) | |
| return | |
| def playform(func): | |
| def wrapper_playform(*args, **kwargs): | |
| ret_value = func(*args, **kwargs) | |
| #print(f'return type {type(ret_value)}') | |
| value = ret_value[0] | |
| # print(f'input type: {type(args)}') | |
| # param= args[-1] | |
| # print(f'param: , {param}') | |
| api_url, token = get_session_param(args[-1]) | |
| # print(api_url) | |
| # print(token) | |
| # modified code to deal with multiple output | |
| if isinstance(value,list): | |
| print(f'number of outputs: {len(value)}') | |
| for k in value: | |
| if isinstance(k,numpy.ndarray): | |
| # print(f'output: ') | |
| # print(f'output type {type(k)}') | |
| # print(f'output dim {k.shape}') | |
| # print(f'data type {k.dtype}') | |
| # print(f'max value {k.max()} min value {k.min()}' ) | |
| img = prep_image(k) | |
| send_image(img,api_url,token) | |
| elif isinstance(value,numpy.ndarray ): | |
| # print('numpy array') | |
| img = prep_image(value) | |
| send_image(img,api_url,token) | |
| else: | |
| print('unpredicted return type') | |
| return ret_value | |
| return wrapper_playform | |