2 Stimmen

App-engine-rest-server löst KeyError("Name %s bereits verwendet" % model_name) aus.

Ich spiele mit dem Projekt appengine-rest-server um die REST-Webservices für alle vorhandenen Modelle zu erstellen. Ich habe einen merkwürdigen Fehler, wenn ich zum ersten Mal den Browser abfrage: http://localhost:8080/rest/metadata/user, erscheint das Ergebnis:

Aber beim Aktualisieren der Seite erhalte ich diesen Fehler:

  Traceback (most recent call last):
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3185, in _HandleRequest
      self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3128, in _Dispatch
      base_env_dict=env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 515, in Dispatch
      base_env_dict=base_env_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2387, in Dispatch
      self._module_dict)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2297, in ExecuteCGI
      reset_modules = exec_script(handler_path, cgi_path, hook)
    File "/Users/foo/Documents/AppEngine/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2195, in ExecuteOrImportScript
      script_module.main()
    File "/Users/foo/Documents/AppEngine/helloworld/main.py", line 48, in main
      rest.Dispatcher.add_models({"user": UserModel})
    File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 845, in add_models
      cls.add_model(model_name, model_type)
    File "/Users/foo/Documents/AppEngine/helloworld/rest/__init__.py", line 863, in add_model
      raise KeyError("name %s already used" % model_name)
  KeyError: 'name user already used'

Kann mir jemand erklären, warum das passiert? Wenn ich den Server neu starte und den Browser erneut aufrufe, erhalte ich das XML-Ergebnis, aber beim Aktualisieren tritt der Fehler auf. Handelt es sich um einen Fehler in der appengine-rest-server Anwendung oder liegt es an meinem Code? Meine helloworld Anwendung ist hier zum Download verfügbar: hier.

3voto

balpha Punkte 47970

Da Sie eine main()-Funktion haben, speichert App Engine Ihr Modul und die Importe im Cache. Daher können Sie innerhalb der gleichen Laufzeit add_models() mehrmals aufrufen. Wenn Sie den Initialisierungscode von rest auf Modul-Ebene verschieben (oder in eine Funktion, die nur einmal während der Modulinitialisierung aufgerufen wird und nicht bei jedem Aufruf von main()), sollte es funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X