pyAMF for GAE(Google App Engine),需要很少的帮助:

发布于 2024-09-15 17:16:37 字数 2307 浏览 6 评论 0原文

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

我想插入这个:

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

这可能吗?谢谢

# 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 of this I would like:

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

is this possible? thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

许仙没带伞 2024-09-22 17:16:37

昨晚解决了!谢谢@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)

Solved last night! thanks @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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文