python - How am I getting 'InternalError: table "dev~guestbook!!Entities" already exists' when I just created datastore? -


i'm trying figure out how setup test driven development gae.

i start tests with:

nosetests -v --with-gae   

i keep getting error:

internalerror: table "dev~guestbook!!entities" exists 

the datastore doesn't exist until create in setup(), i'm still getting error entities exists?

i'm using code gae tutorial.

here testing code in functional_tests.py:

import sys, os, subprocess, time, unittest, shlex    sys.path.append("/usr/local/google_appengine")     sys.path.append("/usr/local/google_appengine/lib/yaml/lib")     sys.path.append("/usr/local/google_appengine/lib/webapp2-2.5.2")     sys.path.append("/usr/local/google_appengine/lib/django-1.5")     sys.path.append("/usr/local/google_appengine/lib/cherrypy")     sys.path.append("/usr/local/google_appengine/lib/concurrent")     sys.path.append("/usr/local/google_appengine/lib/docker")     sys.path.append("/usr/local/google_appengine/lib/requests")     sys.path.append("/usr/local/google_appengine/lib/websocket")     sys.path.append("/usr/local/google_appengine/lib/fancy_urllib")     sys.path.append("/usr/local/google_appengine/lib/antlr3")      selenium import webdriver     google.appengine.api import memcache, apiproxy_stub, apiproxy_stub_map    google.appengine.ext import db     google.appengine.ext import testbed     google.appengine.datastore import datastore_stub_util      google.appengine.tools.devappserver2 import devappserver2       class newvisitortest(unittest.testcase):          def setup(self):             # start dev server           cmd = "/usr/local/bin/dev_appserver.py /users/bryan/work/googleappengine/guestbook/app.yaml --port 8080 --storage_path /tmp/datastore --clear_datastore --skip_sdk_update_check"           self.dev_appserver = subprocess.popen(shlex.split(cmd),                                                  stdout=subprocess.pipe)           time.sleep(2) # important, let dev_appserver start            self.testbed = testbed.testbed()         self.testbed.setup_env(app_id='dermal')             self.testbed.activate()              self.testbed.init_user_stub()             # create consistency policy simulate high replication consistency model.         # probability of 1, datastore should available.         self.policy = datastore_stub_util.pseudorandomhrconsistencypolicy(probability=1)         # initialize datastore stub policy.         self.testbed.init_datastore_v3_stub(datastore_file="/tmp/datastore/datastore.db", use_sqlite=true, consistency_policy=self.policy)             self.testbed.init_memcache_stub()             self.datastore_stub = apiproxy_stub_map.apiproxy.getstub('datastore_v3')                     # setup dev_appserver             app_configs = ['app.yaml']              # setup client make sure            guestbook import author, greeting           if not ( author.query( author.email == "bryan@mail.com").get()):               logging.info("create admin")               client = author(               email = "bryan@mail.com",                ).put()             assert( author.query( author.email == "bryan@mail.com").get() )         self.browser = webdriver.firefox()             self.browser.implicitly_wait(3)          def teardown(self):             self.browser.quit()             self.testbed.deactivate()             self.dev_appserver.terminate()        def test_submit_anon_greeting(self):           self.browser.get('http://localhost:8080')           self.browser.find_element_by_name('content').send_keys('anonymous test post')           self.browser.find_element_by_name('submit').submit()           assert.assertequals(driver.getpagesource().contains('anonymous test post')) 

here traceback:

test_submit_anon_greeting (functional_tests.newvisitortest) ... info     2015-05-11 14:41:40,516 devappserver2.py:745] skipping sdk update check.   info     2015-05-11 14:41:40,594 api_server.py:190] starting api server at: http://localhost:59656   info     2015-05-11 14:41:40,598 dispatcher.py:192] starting module "default" running at: http://localhost:8080   info     2015-05-11 14:41:40,600 admin_server.py:118] starting admin server at: http://localhost:8000   warning  2015-05-11 14:41:45,008 tasklets.py:409] suspended generator _run_to_list(query.py:964) raised internalerror(table "dev~guestbook!!entities" exists)   error    2015-05-11 14:41:45,009 webapp2.py:1552] table "dev~guestbook!!entities" exists   traceback (most recent call last):     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__       rv = self.handle_exception(request, response, e)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__       rv = self.router.dispatch(request, response)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher       return route.handler_adapter(request, response)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__       return handler.dispatch()     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch       return self.handle_exception(e, self.app.debug)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch       return method(*args, **kwargs)     file "/users/bryan/work/googleappengine/guestbook/guestbook.py", line 50, in       greetings = greetings_query.fetch(10)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/utils.py", line 142, in positional_wrapper       return wrapped(*args, **kwds)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/query.py", line 1187, in fetch       return self.fetch_async(limit, **q_options).get_result()     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 325, in get_result       self.check_success()     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along       value = gen.throw(exc.__class__, exc, tb)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/query.py", line 964, in _run_to_list       batch = yield rpc     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion       result = rpc.get_result()     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result       return self.__get_result_hook(self)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/datastore/datastore_query.py", line 2870, in __query_result_hook       self._batch_shared.conn.check_rpc_success(rpc)     file "/users/bryan/desktop/googleappenginelauncher.app/contents/resources/googleappengine-default.bundle/contents/resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1342, in check_rpc_success       raise _todatastoreerror(err)   internalerror: table "dev~guestbook!!entities" exists   

it looks there couple of things happening here.

first, looks using nosegae --with-gae. plugin handles setting , tearing down testbed don't have to. means not need of self.testbed code , can cause conflicts internally. either switch doing nosegae way, or don't use --with-gae flag. if stick nosegae, has option --gae-datastore lets set path datastore use tests. inside test class, set property nosegae_datastore_v3 = true have set you:

class newvisitortest(unittest.testcase):     # enable datastore stub     nosegae_datastore_v3 = true 

second, way dev_appserver / sqlite work together, appserver loads sqlite db file memory , works there. when app server exits, flushes database contents disk. since using same datastore tests dev_appserver.py process opening selenium, may or may not see fixture data set inside test.

here example https://github.com/trii/nosegae/blob/master/nosegae.py#l124-l140

class mytest(unittest.testcase):     nosegae_datastore_v3 = true     nosegae_datastore_v3_kwargs = {         'datastore_file': '/tmp/nosegae.sqlite3',         'use_sqlite': true     }     def test_something(self):         entity = mymodel(name='nosegae')         entity.put()         self.assertnotnone(entity.key.id()) 

Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

android - MPAndroidChart - How to add Annotations or images to the chart -