stevendevz
stevendevz

Reputation: 11

Unable to use Cloud NDB in local flask python3 environment with google app engine

I am trying to develop a python3 flask app with google app engine under Windows 10. I am using google cloud NDB as my database. But when I followed the tutorial to add an entity like so:

from google.cloud import ndb

client = ndb.Client(namespace='main')
class Contact(ndb.Model):
    name = ndb.StringProperty()
    phone = ndb.StringProperty()
    email = ndb.StringProperty()
app = Flask(__name__)

@app.route('/')
def root():
    with client.context():
        contact1 = Contact(name="John Smith",
                           phone="555 617 8993",
                           email="[email protected]")
        contact1.put()
        people=Contact.query().fetch()[0].name
        print(people)

the local flask application page 127.0.0.1/8080 won't load and I keep getting the following error:

Traceback (most recent call last):
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\sunha\Desktop\building-an-app-1\main.py", line 33, in root
    contact1.put()
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\_options.py", line 89, in wrapper
    return wrapped(*pass_args, **kwargs)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\utils.py", line 78, in wrapper
    return wrapped(*args, **new_kwargs)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\utils.py", line 110, in positional_wrapper
    return wrapped(*args, **kwds)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\model.py", line 4935, in _put
    return self._put_async(_options=kwargs["_options"]).result()
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\tasklets.py", line 190, in result
    self.check_success()
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\tasklets.py", line 137, in check_success
    raise self._exception
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\tasklets.py", line 309, in _advance_tasklet
    self.generator.throw(type(error), error, traceback)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\model.py", line 4996, in put
    ds_key = yield _datastore_api.put(ds_entity, kwargs["_options"])
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\tasklets.py", line 309, in _advance_tasklet
    self.generator.throw(type(error), error, traceback)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\_datastore_api.py", line 409, in put
    key_pb = yield batch.put(entity_pb)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\tasklets.py", line 312, in _advance_tasklet
    yielded = self.generator.send(send_value)
  File "C:\Users\sunha\Desktop\env\Lib\site-packages\google\cloud\ndb\_retry.py", line 84, in retry_wrapper
    raise core_exceptions.RetryError(
google.api_core.exceptions.RetryError: Maximum number of 3 retries exceeded while calling <function make_call.<locals>.rpc_call at 0x04DFBBF8>, last exception: <_MultiThreadedRendezvous of RPC that terminated with:
    status = StatusCode.UNAVAILABLE
    details = "failed to connect to all addresses"
    debug_error_string = "{"created":"@1594873007.440000000","description":"Failed to pick `subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":3941,"referenced_errors":[{"created":"@1594873007.440000000","description":"failed to connect to all addresses","file":"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc","file_line":393,"grpc_status":14}]}"`

I then tried gcloud app deploy and everything worked in the production environment. I checked my online datastore page and the entity was added successfully upon loading the app. Does anyone have an idea of why it doesn't work in my local environment? I have ran pip install -r requirements.txt containing "Flask==1.1.2 google-cloud-ndb" before I ran the app. I ran the app using python main.py. Thank you!

Upvotes: 1

Views: 746

Answers (1)

Dustin Ingram
Dustin Ingram

Reputation: 21520

You need to have the Datastore Emulator running locally.

Upvotes: 1

Related Questions