Can't create object anymore with dev_appserver admin console

I removed all entities from the datastore and cleared memcache, created the object using the API and then tried to create another one of the same type in the Datastore console running on localhost:

Internal Server Error

The server is either erroneous or unable to perform the requested operation.

Traceback (most recent call last):
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/admin_request_handler.py", line 97, in dispatch
    super(AdminRequestHandler, self).dispatch()
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 760, in get
    count=20)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 121, in _get_entities
    query = datastore.Query(kind, _namespace=namespace)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/api/datastore.py", line 1361, in __init__
    datastore_errors.BadArgumentError)
  File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/api/datastore_types.py", line 181, in ValidateString
    raise exception('%s must not be empty.' % name)
BadArgumentError: kind must not be empty.

      

Here's the gcloud version information:

$ gcloud --version
Google Cloud SDK 157.0.0
app-engine-python 1.9.54
beta 2017.03.24
bq 2.0.24
core 2017.05.30
gcloud 
gsutil 4.26

      

Any clues as to what might be wrong?

+3


source to share


1 answer


I think this is a bug in the Datastore console.

I was able to reproduce the same error on my machine. If you look at the trace in the exception, you will see (fourth from the bottom):

File "/.../google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 760, in get
count=20)

      

If you look at this file from line 735, you will see:

def get(self, entity_key_string=None):
    super(DatastoreEditRequestHandler, self).get(entity_key_string)
    if entity_key_string:
        entity_key = datastore.Key(entity_key_string)
        entity_key_name = entity_key.name()
        entity_key_id = entity_key.id()
        namespace = entity_key.namespace()
        kind = entity_key.kind()
        entities = [datastore.Get(entity_key)]
        parent_key = entity_key.parent()
        if parent_key:
            parent_key_string = _format_datastore_key(parent_key)
        else:
            parent_key_string = None
    else:
        entity_key = None
        entity_key_string = None
        entity_key_name = None
        entity_key_id = None
        namespace = self.request.get('namespace')
        kind = self.request.get('kind')
        entities, _ = _get_entities(kind,
                                    namespace,
                                    order=None,
                                    start=0,
                                    count=20)  ### line 760 #######
        ...

      

This last line kind

should contain a line containing the model name of the model you are working with. Instead, if you follow the trace down into this function call, you will see what kind

is an empty string. I don't think you can do it at this time. I would recommend using the interactive console to create / edit Datastore objects and just use the viewer to view them. I'm sure Google will fix this with an update soon.

Edit . I did find a hacky fix if you really want the Datastore console to work, but I would still recommend using the interactive console only. The hacky fix is ​​that you manually inject the variable kind

into the url sent by the Datastore console.



When you click Create New Entity and you get the error you see in your question, look at the URL:

http://localhost:8000/datastore/edit?kind=&next=http%3A%2F%2Flocalhost%3A8000%2Fdatastore%3Fkind%3DUnique

      

You see ...:8000/datastore/edit?kind=&...

. Right there, just enter the model name. For example, let's say your model name is User

:

http://localhost:8000/datastore/edit?kind=User&next=http%3A%2F%2Flocalhost%3A8000%2Fdatastore%3Fkind%3DUnique

      

This led me to the Create New Entity form for the User class (one of my models) and I was able to create a user with that form.

PS You can also change the model name at the very end of this url (where my says Unique

) to match the type you are creating, because this model name is the view that will be displayed after creating a new object. So mine created a User

but then rendered objects Unique

( Unique

is one of my model names).

+2


source







All Articles