appengine-python-standard icon indicating copy to clipboard operation
appengine-python-standard copied to clipboard

AttributeError: 'DefaultApiStub' object has no attribute 'CancelApiCalls'

Open chrisK824 opened this issue 1 year ago • 0 comments

Expected Behavior

Upgrading from Python2 to Python3, I expected the following piece of code to continue working with this library.

try:
    from google.appengine.api import runtime, apiproxy_stub_map

    def hook():
        logging.info("Instance is shutting down; cleaning up.")

        apiproxy_stub_map.apiproxy.CancelApiCalls()

    runtime.set_shutdown_hook(hook)
except ImportError:
    pass

Is this deprecated? If yes, then should it be replaced with something else or is this functionality not needed any more? I can see the method somewhere in the library source code, but AppEngine seems not recognizing it?

Actual Behavior

Traceback (most recent call last):
  File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/appengine/runtime/middlewares.py", line 140, in ErrorLoggingMiddleware
    return app(wsgi_env, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/appengine/runtime/middlewares.py", line 82, in <lambda>
    lambda app: lambda wsgi_env, start_resp: f(app, wsgi_env, start_resp),
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/appengine/runtime/middlewares.py", line 375, in BackgroundAndShutdownMiddleware
    runtime.__BeginShutdown()
  File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/appengine/api/runtime/runtime.py", line 122, in __BeginShutdown
    shutdown_hook()
  File "/workspace/components/campaigns/push/processor/apns/send.py", line 40, in hook
    apiproxy_stub_map.apiproxy.CancelApiCalls()
  File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/appengine/api/apiproxy_stub_map.py", line 375, in CancelApiCalls
    self.__default_stub.CancelApiCalls()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'DefaultApiStub' object has no attribute 'CancelApiCalls'

Steps to Reproduce the Problem

  1. Install the shutdown hook
try:
    from google.appengine.api import runtime, apiproxy_stub_map

    def hook():
        logging.info("Instance is shutting down; cleaning up.")

        apiproxy_stub_map.apiproxy.CancelApiCalls()

    runtime.set_shutdown_hook(hook)
except ImportError:
    pass
  1. Use the app engine service and wait for it to stop.

Specifications

  • Version: 1.1.6
  • Platform: Google Appengine
  • Python3.12

chrisK824 avatar Jul 02 '24 07:07 chrisK824