2010-08-21 6 views
1
# I need this behaviour: 
# 1) check if the service from flash is included in the services array 
# 2) if not, return false or an error | if yes, step 3 
# 3) combine the rootPath('app.controllers') with the service name('sub1.sub2.sub3.function_name') 
# 4) and then get the function('function_name') from the 'app.controllers.sub1.sub2.sub3.function_name' package 
# 5) then run the function the way that would be done normally by pyAMF 

from app.controllers.users.login import login 
from app.controllers.users.logout import logout 
from app.controllers.profiles.edit import edit as profilesEdit 
from app.controllers.profiles.new import new as profilesNew 
from app.controllers.invitations.invite import invite as invitationsInvite 
from app.controllers.invitations.uninvite import uninvite as invitationsUninvite 

def main(): 
    services = { 
    'users.login': login, 
    'users.logout': logout, 
    'profiles.edit': profilesEdit, 
    'profiles.new': profilesNew, 
    'invitations.invite': invitationsInvite, 
    'invitations.uninvite': invitationsUninvite 
    } 

    gateway = WebAppGateway(services, logger=logging, debug=True) 
    application = webapp.WSGIApplication([('/', Init), 
             ('/ajax', gateway)], debug=True) 
    run_wsgi_app(application) 

insted de ce je voudrais:PyAMF pour GAE (Google App Engine), peu d'aide nécessaire:

def main(): 
    services = [ 
    'users.login', 
    'users.logout', 
    'profiles.edit', 
    'profiles.new', 
    'invitations.invite', 
    'invitations.uninvite', 
    'sub1.sub2.sub3.function_name' 
    ] 
    rootPath = 'app.controllers' 

    gateway = WebAppGateway(services, rootPath, logger=logging, debug=True) 
    application = webapp.WSGIApplication([('/', Init), 
             ('/ajax', gateway)], debug=True) 
    run_wsgi_app(application) 

# and then I would extend the WebAppGateway in some way to have this behaviour: 
# 1) check if the service from flash is included in the services array 
# 2) if not, return false or an error | if yes, step 3 
# 3) combine the rootPath('app.controllers') with the service name('sub1.sub2.sub3.function_name') 
# 4) and then get the function('function_name') from the 'app.controllers.sub1.sub2.sub3.function_name' package 
# 5) then run the function the way that would be done normally by pyAMF 

est-ce possible? merci

Répondre

0

Résolu la nuit dernière! merci @njoyce

from pyamf.remoting.gateway.google import WebAppGateway 
import logging 

class TottysGateway(WebAppGateway): 
def __init__(self, services_available, root_path, not_found_service, logger, debug): 
    # override the contructor and then call the super 
    self.services_available = services_available 
    self.root_path = root_path 
    self.not_found_service = not_found_service 
    WebAppGateway.__init__(self, {}, logger=logging, debug=True) 

def getServiceRequest(self, request, target): 
    # override the original getServiceRequest method 
    try: 
     # try looking for the service in the services list 
     return WebAppGateway.getServiceRequest(self, request, target) 
    except: 
     pass 

    try: 
     # don't know what it does but is an error for now 
     service_func = self.router(target) 
    except: 
     if(target in self.services_available): 
      # only if is an available service import it's module 
      # so it doesn't access services that should be hidden 
      try: 
       module_path = self.root_path + '.' + target 
       paths = target.rsplit('.') 
       func_name = paths[len(paths) - 1] 
       import_as = '_'.join(paths) + '_' + func_name 
       import_string = "from "+module_path+" import "+func_name+' as service_func' 
       exec import_string 
      except: 
       service_func = False 

    if(not service_func): 
     # if is not found load the default not found service 
     module_path = self.rootPath + '.' + self.not_found_service 
     import_string = "from "+module_path+" import "+func_name+' as service_func' 

    # add the service loaded above 
    assign_string = "self.addService(service_func, target)" 
    exec assign_string 

    return WebAppGateway.getServiceRequest(self, request, target)