Python 在哪里分配应用程序?我不断收到错误消息:应用程序不能为空
我正在尝试使用TDD构建一个简单的Google应用程序引擎应用程序 $python functional_tests.pyPython 在哪里分配应用程序?我不断收到错误消息:应用程序不能为空,python,google-app-engine,Python,Google App Engine,我正在尝试使用TDD构建一个简单的Google应用程序引擎应用程序 $python functional_tests.py WARNING:root:initial generator _run_to_list(query.py:952) raised BadArgumentError(app must not be empty.) WARNING:root:suspended generator _get_async(query.py:1231) raised BadArgumentErr
WARNING:root:initial generator _run_to_list(query.py:952) raised BadArgumentError(app must not be empty.)
WARNING:root:suspended generator _get_async(query.py:1231) raised BadArgumentError(app must not be empty.)
Traceback (most recent call last):
File "functional_tests.py", line 23, in <module>
from main import Customer
File "/Users/Bryan/work/GoogleAppEngine/dermalfillersecrets/main.py", line 39, in <module>
if not ( Client.query( Client.name == "Bryan Wheelock").get()):
File "/usr/local/google_appengine/google/appengine/ext/ndb/query.py", line 1218, in get
return self.get_async(**q_options).get_result()
File "/usr/local/google_appengine/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
self.check_success()
File "/usr/local/google_appengine/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "/usr/local/google_appengine/google/appengine/ext/ndb/query.py", line 1231, in _get_async
res = yield self.fetch_async(1, **q_options)
File "/usr/local/google_appengine/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
value = gen.send(val)
File "/usr/local/google_appengine/google/appengine/ext/ndb/query.py", line 957, in _run_to_list
dsquery = self._get_query(conn)
File "/usr/local/google_appengine/google/appengine/ext/ndb/query.py", line 918, in _get_query
group_by=group_by)
File "/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py", line 104, in positional_wrapper
return wrapped(*args, **kwds)
File "/usr/local/google_appengine/google/appengine/datastore/datastore_query.py", line 1906, in __init__
ancestor=ancestor)
File "/usr/local/google_appengine/google/appengine/datastore/datastore_rpc.py", line 104, in positional_wrapper
return wrapped(*args, **kwds)
File "/usr/local/google_appengine/google/appengine/datastore/datastore_query.py", line 1745, in __init__
self.__app = datastore_types.ResolveAppId(app).encode('utf-8')
File "/usr/local/google_appengine/google/appengine/api/datastore_types.py", line 229, in ResolveAppId
ValidateString(app, 'app', datastore_errors.BadArgumentError)
File "/usr/local/google_appengine/google/appengine/api/datastore_types.py", line 177, in ValidateString
raise exception('%s must not be empty.' % name)
google.appengine.api.datastore_errors.BadArgumentError: app must not be empty.
这是main.py中的代码:
import os
import urllib
import logging
from google.appengine.api import users
from google.appengine.ext import ndb
import jinja2
import webapp2
JINJA_ENVIRONMENT = jinja2.Environment(
loader = jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)
DEFAULT_LEADBOOK_NAME = 'NameCustomer'
# We set a parent key on the 'Customer' to ensure that they are all in the same
# entity group. Queries across the single entity group will be consistent.
# However, the write rate should be limited to ~1/second.
def leadbook_key(leadbook_name=DEFAULT_LEADBOOK_NAME):
"""Constructs a Datastore key for a LeadBook entity with leadbook_name."""
return ndb.Key('LeadBook', leadbook_name)
# Client logs in as a User
# take the User.id and use that to create a child Client
class Client(ndb.Model):
# It seems that I need to figure out how to have the user log in via Google then add the additional info
email = ndb.StringProperty() # I think this would be email address
name = ndb.StringProperty(indexed=True)
street1 = ndb.StringProperty()
street2 = ndb.StringProperty()
city = ndb.StringProperty()
zipcode = ndb.IntegerProperty()
phone = ndb.StringProperty()
signup = ndb.DateTimeProperty(auto_now_add=True)
if not ( Client.query( Client.name == "Bryan Wheelock").get()):
logging.info("create Admin")
client = Client(
email = "bryan@mail.com",
name = "Bryan Wheelock",
street1 = "555 Main St",
street2 = "unit 1",
city = "Atlanta",
zipcode = 99999,
phone = "(888)555-1212"
).put()
通过将模型导入unittest.TestCase的设置中,我能够解决badargumenterror
class NewVisitorTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
#self.testbed.setup_env(app_id='dermalfillersecrets')
self.testbed.init_datastore_v3_stub()
# setup the dev_appserver
APP_CONFIGS = ['app.yaml']
python_runtime._RUNTIME_ARGS = [
sys.executable,
os.path.join(os.path.dirname(dev_appserver.__file__),
'_python_runtime.py')
]
######## This is the Where I moved the import clause ####
from main import Customer
#########################################################
options = devappserver2.PARSER.parse_args([
'--admin_port', '0',
'--port', '9080',
'--datastore_path', ':memory:',
'--logs_path', ':memory:',
'--skip_sdk_update_check',
'--',
] + APP_CONFIGS)
server = devappserver2.DevelopmentServer()
server.start(options)
self.server = server
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(3)
尝试在
self.testbed.activate()
之后添加self.testbed.setup\u env(app\u id='your\u app\u id')
。我遇到了相同的错误,但代码类型不同。知道问题是什么吗?不确定导入模型如何解决此问题。
class NewVisitorTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
#self.testbed.setup_env(app_id='dermalfillersecrets')
self.testbed.init_datastore_v3_stub()
# setup the dev_appserver
APP_CONFIGS = ['app.yaml']
python_runtime._RUNTIME_ARGS = [
sys.executable,
os.path.join(os.path.dirname(dev_appserver.__file__),
'_python_runtime.py')
]
######## This is the Where I moved the import clause ####
from main import Customer
#########################################################
options = devappserver2.PARSER.parse_args([
'--admin_port', '0',
'--port', '9080',
'--datastore_path', ':memory:',
'--logs_path', ':memory:',
'--skip_sdk_update_check',
'--',
] + APP_CONFIGS)
server = devappserver2.DevelopmentServer()
server.start(options)
self.server = server
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(3)