Google App Engine Python Protorpc Ошибка: __call __ () принимает ровно 1 аргумент (дано 3) - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь настроить службу protorpc с помощью google app engine python 2.7, и, насколько я помню, это работало нормально, пока внезапно не перестало работать, и теперь я не могу понять, что происходит не так.

Ошибка:

__call__() takes exactly 1 argument (3 given)
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1040, in __call__
    return self.handler(request, *args, **kwargs)
TypeError: __call__() takes exactly 1 argument (3 given)

Traceback (most recent call last):
  File "/base/data/home/apps/s~smokin-goldshop/15.356936819989737198/handler/orderajax.py", line 78, in main
    util.run_wsgi_app(application)
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/webapp/util.py", line 98, in run_wsgi_app
    run_bare_wsgi_app(add_wsgi_middleware(application))
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/webapp/util.py", line 116, in run_bare_wsgi_app
    result = application(env, _start_response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1519, in __call__
    response = self._internal_error(e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1040, in __call__
    return self.handler(request, *args, **kwargs)
TypeError: __call__() takes exactly 1 argument (3 given)

Код вопроса:

import logging
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

from protorpc import messages
from protorpc import remote
from protorpc import service_handlers
from protorpc.service_handlers import ServiceHandlerFactory

from customerhandler import CustomerHandler
from models.customer import Customer


class BlacklistRequest(messages.Message):
    BlackListType = messages.StringField(1, required = True)
    Customer = messages.StringField(2, required = True)

class BlacklistResponse(messages.Message):
    Response = messages.StringField(1, required = True)

class BlacklistAjax(remote.Service):
    @remote.method(BlacklistRequest, BlacklistResponse)
    def ajax(self, request):
        logging.debug("starting")
        tRequest = request
        logging.debug(str(tRequest))
        tArgumentDic = {}
        tCustomerHandler = CustomerHandler()
        tCustomer = Customer()
        logging.debug("Beginning Blacklist of type " + tRequest.BlackListType + " for customer " + tRequest.Customer)

        if(tRequest.BlackListType == 'PA'):
            tCustomerHandler.PaBlacklistCustomer(tRequest.Customer)
            logging.debug("Blacklisted PA")
            return BlacklistResponse(Response = "PA Blacklisted!")
        elif(tRequest.BlackListType == 'Global'):
            tCustomerHandler.GlobalBlacklistCustomer(tRequest.Customer)
            logging.debug("Blacklisted Global")
            return BlacklistResponse(Response = "Global Blacklisted!")
        else:
            logging.debug("Error Blacklisting")
            return BlacklistResponse(Response = "Error Blacklisting")



service_mappings = service_handlers.service_mapping(
    [('/orderajax', OrderAjax),
     ('/blacklist', BlacklistAjax)
    ])

application = webapp.WSGIApplication(service_mappings, debug=True)

def main():
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

1 Ответ

2 голосов
/ 28 февраля 2012

Несколько раз ударившись головой о стол, я немного покопался и обнаружил следующее:

Короткий ответ

Похоже, что модуль webapp2 не поддерживает protorpc в настоящее время или наоборот. Единственный способ использовать protorpc - это переключиться на модуль webapp вместо webapp2, в этом случае вам также необходимо вернуться к Python 2.5 и установить threadsafe в false в app.yaml, например:

# -- snip --   
runtime: python25
threadsafe: false
# -- /snip --

Длинный ответ

http://code.google.com/p/webapp-improved/issues/detail?id=16, в котором сопровождающий проекта (Родриго Мораес) заявляет:

17 сентября 2011 г.

Я думал об этом, и лучше всего было бы удалить webapp2_extras.protorpc. Это можно использовать только с 2,5 время выполнения, и нет никаких оснований существовать, когда webapp2 заменяет webapp: это protorpc, который должен поддерживать webapp2 во время выполнения 2.7, так как он это сделал с веб-приложением.

10 ноября 2011

Я считаю, что проект ProtoRPC должен предоставить способ.

Пакет webapp2_extras.protorpc будет удален, так как он не смысл поддерживать его больше.

24 января 2012 г.

webapp2_extras.protorpc был удален из версии 2.4.

Я бы хотел поддержать это, но здесь задействовано слишком много магии, поэтому лучше иметь его как отдельный, активно поддерживаемый проект (или если Проект protorpc поддерживает его по умолчанию).

Поэтому в проекте protorpc открыта проблема, требующая поддержки webapp2: http://code.google.com/p/google-protorpc/issues/detail?id=38

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...