diff --git a/content/_plugins/studio.py b/content/_plugins/studio.py new file mode 100644 index 0000000..3434a8e --- /dev/null +++ b/content/_plugins/studio.py @@ -0,0 +1,117 @@ +""" +This file implements an avatar studio +""" +import py_avataaars as pa +from py_avataaars import PyAvataaar as Avatar +import pandas as pd +import numpy as np +import transport +from transport import providers +from enum import Enum +import io +import base64 +import copy + + +# _map = {'eye type':pa.EyesType,'frame style':pa.AvatarStyle,'race':pa.SkinColor,'hair color':pa.HairColor,'facial hair':pa.FacialHairType, 'facial hair color':pa.HairColor,'hair dress':pa.TopType,'mouth':pa.MouthType,'nose':pa.NoseType,'eyebrows':pa.EyebrowType } +# _vmap= {'eye type':'eye_type','frame style':'style','race':'skin_color','hair color':'hair_color','facial hair color':'facial_hair_color','facial hair':'facial_hair_type','hair dress':'top_type','eyebrows':'eye_brow','nose':'nose_type','mouth':'mouth_type'} +# _omap = {'eye_type':pa.EyesType,'style':pa.AvatarStyle} +_df = [['eye type','eye_type',pa.EyesType],['frame style','style',pa.AvatarStyle],['hair color','hair_color',pa.HairColor],['race','skin_color',pa.SkinColor],['facial hair','facial_hair_type',pa.FacialHairType], +['facial hair color','facial_hair_color',pa.Color],['mouth','mouth_type',pa.MouthType],['hat color','hat_color',pa.Color],['accessory','accessories_type',pa.AccessoriesType],['nose','nose_type',pa.NoseType],['eyebrows','eyebrow_type',pa.EyebrowType], +['hair dress','top_type',pa.TopType],['clothes', 'clothe_type', pa.ClotheType],['clothe color','clothe_color', pa.Color],['clothe graphics','clothe_graphic_type',pa.ClotheGraphicType] +] + +_df = pd.DataFrame(_df,columns=['label','variable','values']) +_df.to_csv('/home/steve/me.avatar.csv',index=False) +def _parameters(): + _out = {'basic':{},'face':{},'clothes':{}} + for _index in np.arange(_df.shape[0]) : + row = _df.iloc[_index] + key = row['label'] + if key in ['race','nose','mouth','eyebrows','eye type'] : + _id = 'basic' + elif 'clothe' in key or key=='accessory': + _id = 'clothes' + else: + _id = 'face' + if len( list(row['values'])) < 2 : + continue + _out[_id][key] = {'values': [{'name':_item.name.replace('_', ' '),'value':_item.value} for _item in row['values']],'variable':row['variable']} + + + return _out +def cast(_args) : + _params = {} + for key in _args : + value = int(_args[key]) + + _info = _df[_df.variable == key].copy() + if _info.shape[0] > 0 : + _params[key] = list(_info['values'].tolist()[0])[value] + # _params[key] = _info['values'].tolist()[value] + return _params +# def _xparameters() : +# """ +# This function returns parameters to be used within an HTML context +# """ +# _orgout = {'basic':{},'extended':{}} +# _out = {} +# for _key in _map : + +# # _out[_key] = {'class':_map[_key].__name__,'values':[],"variable":_vmap[_key]} +# # _out[_key]['values'] = [{'name':_item.name.replace('_', ' '),'value':_item.value} for _item in _map[_key]] +# if _key == 'nose' : +# continue +# if _key in ['race','nose','mouth','eyebrows','eye type'] : +# _out = _orgout['basic'] +# else: +# _out = _orgout['extended'] +# _out[_key] = {'class':_map[_key].__name__,'values':[],"variable":_vmap[_key]} +# _out[_key]['values'] = [{'name':_item.name.replace('_', ' '),'value':_item.value} for _item in _map[_key]] + +# # return _out +# return _orgout + +def _build (_args): + """ + This function builds the avatar with a set of arguments + """ + + _args = cast(_args) + if _args : + + _avatar = Avatar(**_args) + _stream = _avatar.render_png() + _stream =io.BytesIO(_stream) + + _stream = base64.encodebytes(_stream.getvalue()).decode('ascii') + else: + _stream = None + return _stream +def _save(_args): + """ + This function will save the data/candidate to the database + :_args {alias,email,stream} + """ + + writer = transport.factory.instance(provider=providers.MONGO,context='write',db='genomix',doc='participants') + reader = transport.factory.instance(provider=providers.MONGO,context='read',db='genomix',doc='participants') + + # + # Let us make sure the candidate doesn't exist + _df = reader.read(mongo={"find":"participants","filter":{"alias":_args['alias']},"projection":{"_id":0}}) + _info = None + try: + if _df.shape[0] == 0 : + writer.write(_args) + else: + writer.set(_args) + _info = "1" + except Exception as e: + pass + return _info + +def _participants (): + reader = transport.factory.instance(provider=providers.MONGO,context='read',db='genomix',doc='participants') + _df = reader.read(mongo={"find":"participants","limit":10,"projection":{"_id":0}}) + return _df.to_dict(orient='records') \ No newline at end of file diff --git a/content/dialog.html b/content/dialog.html new file mode 100644 index 0000000..64031bf --- /dev/null +++ b/content/dialog.html @@ -0,0 +1,40 @@ + + +
+ +
+ ++ +
++
+ + {%for _key in _params %} + + {%set _iparams = _params[_key] %} ++