hserver-fahrradboerse/hServer/hserver/formdata.py

86 lines
1.6 KiB
Python

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
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)))