Ejemplo n.º 1
0
Archivo: amf.py Proyecto: creotiv/gflib
    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')()
Ejemplo n.º 2
0
    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')()
Ejemplo n.º 3
0
    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