def __call__(self,env,request): if not isinstance(request,dict): return '400' path = request.get(self.path,'') params = request.get(self.params,{}) try: if not path: return 400 path = map(lambda s:s.capitalize(),path.split('.')) path.insert(0,'modules') try: controller = load_module('.'.join(path[:-1]+[path[-2]+'AMFController'])) controller = controller(env,params) if not hasattr(controller,path[-1]+'Action'): raise Exception('No such action %s' % '.'.join(path[:-1]+ [path[-2]+'Controller',path[-1]+'Action']) ) except Exception,err: logging.error(err) return 400 return getattr(controller,path[-1]+'Action')()
def __call__(self,env,response): method = utf8(env.get('REQUEST_METHOD','GET')) get_string = utf8(env.get('QUERY_STRING','')) content_type = utf8(env.get('CONTENT_TYPE','').lower()) GET = {} POST = {} if content_type == 'multipart/form-data': ctype, pdict = cgi.parse_header(content_type) if get_string: GET = parse_qs( get_string, keep_blank_values=True ) if method == 'POST': POST = cgi.parse_multipart(env.copy()['wsgi.input'].read(), pdict) else: if get_string: GET = parse_qs( get_string, keep_blank_values=True ) if method == 'POST': POST = parse_qs( env.copy()['wsgi.input'].read(), keep_blank_values=True ) data = dict(GET) data.update(dict(POST)) try: path = data.get(self.path,'') if not path: response('400 Bad Request', self.default_headers ) return [json_encode({'error':400,'msg':'Bad Request.'})] params = data path = map(lambda s:s.capitalize(),path[0].split('.')) path.insert(0,'modules') try: controller = load_module('.'.join(path[:-1]+[path[-2]+'HTTPController'])) controller = controller(env,response,data,self.default_headers) if not hasattr(controller,path[-1]+'Action'): raise Exception('No such action %s' % '.'.join(path[:-1]+ [path[-2]+'Controller',path[-1]+'Action']) ) except Exception,err: logging.error(err) response('400 Bad Request', self.default_headers ) return [json_encode({'error':400,'msg':'Bad Request.'})] return getattr(controller,path[-1]+'Action')()
def process(self,msg): if not isinstance(msg,dict) or not msg.has_key('env'): return {'e':400} env = msg['env'] response = WSGIResponse() method = utf8(env.get('REQUEST_METHOD','GET')) get_string = utf8(env.get('QUERY_STRING','')) content_type = utf8(env.get('CONTENT_TYPE','').lower()) GET = {} POST = {} if content_type == 'multipart/form-data': ctype, pdict = cgi.parse_header(content_type) if get_string: GET = parse_qs( get_string, keep_blank_values=True ) if method == 'POST': POST = cgi.parse_multipart(env.copy()['wsgi.input'], pdict) else: if get_string: GET = parse_qs( get_string, keep_blank_values=True ) if method == 'POST': POST = parse_qs( env.copy()['wsgi.input'], keep_blank_values=True ) data = dict(GET) data.update(dict(POST)) try: path = data.get(self.path,'') if not path: return {'e':401} params = data path = map(lambda s:s.capitalize(),path[0].split('.')) path.insert(0,'modules') try: controller = load_module('.'.join(path[:-1]+[path[-2]+'HTTPController'])) controller = controller(env,response,data,self.default_headers) if not hasattr(controller,path[-1]+'Action'): raise Exception('No such action %s' % '.'.join(path[:-1]+ [path[-2]+'Controller',path[-1]+'Action']) ) except Exception,err: logging.error(err) return {'e':402} res = getattr(controller,path[-1]+'Action')() d = response.toDict() d.update({'d':res}) return d