from urllib.parse import unquote_plus class FormValue: def __init__(self,name,value = None,headers = {}): self.__name = name self.__value = value self.__headers = headers def name(self): return self.__name def value(self): return self.__value def headers(self): return self.__headers def filename(self): pp = self.__headers.parameters("CONTENT-DISPOSITION") if (not pp is None) and ("filename" in pp.keys()): return pp["filename"] return None def save(self, filename): f = open( filename, "wb" ) f.write( self.__value ) f.close() class FormData: def __init__(self,request): self.__request = request self.__values = {} self.__append_query() self.__append_mime() def __getitem__(self,name): return self.__values[name][0] def __contains__(self,name): return name in self.__values def get(self,name): try: return self[name][0] except: return None def keys(self): return self.__values.keys() def list(self,name): if name in self.__values: return list(self.__values[name]) return [] def __append_var(self,var): if not var.name() in self.__values.keys(): self.__values[var.name()] = [] self.__values[var.name()].append( var ) def __append_mime(self): mime = self.__request.mime() if (mime.multipart()): for p in mime.parts(): n = p.name() if not n is None: self.__append_var(FormValue(n,p.body(),p.headers())) def __append_query(self): qs = self.__request.QUERY_STRING pairs = qs.split("&") for pair in pairs: sp = pair.split("=") if (len(sp)>0): name = sp[0] if (len(sp)>1): value = sp[1] else: value= "" self.__append_var(FormValue( unquote_plus(name), unquote_plus(value)))