blob: 276ef59fbb7b17af84e209d1e3e68760f1430d44 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""App Engine Datastore Admin configuration module.
Contains global configuration settings for various deployment environments.
Configuration values are added as class attributes to the respective
environment classes. The environments form a hierarchy of configurations
that inherit from one another.
At module loading time one module is selected to be the Current module.
This is determined by examining the DATACENTER environment variable.
See GetConfig for details.
Defining values:
New configuration values should be introduced by simply adding constants
to the Default class and adding specialized values when needed to override
those values specifically for each cluster type. For example, let's say
we need to configure the Admin Console URL:
class Default(object):
...
ADMIN_CONSOLE_URL = 'https://appengine.google.com'
class Local(Default):
...
ADMIN_CONSOLE_URL = 'https://127.0.0.1:8000'
Using values:
All values of the Current configuration are imported up to the top level of
this module. Access to the configuration values should be done via the module
directly. Note that changing configuration values at runtime is NOT supported.
It is assumed that values in this configuration module are constants.
"""
import os
class Default(object):
"""Configuration object."""
BASE_PATH = '/_ah/datastore_admin'
MAPREDUCE_PATH = '/_ah/mapreduce'
DEFERRED_PATH = BASE_PATH + '/queue/deferred'
CLEANUP_MAPREDUCE_STATE = True
DEFAULT_APP_DOMAIN = 'placeholder.com'
GOOGLE_API_HOSTNAME = 'www.googleapis.com'
GOOGLE_API_OAUTH_SCOPE_HOSTNAME = 'https://www.googleapis.com'
GS_API_HOSTNAME = 'storage.googleapis.com'
DATASTORE_ADMIN_API_NAME = None
DATASTORE_ADMIN_API_VERSION = None
DATASTORE_ADMIN_API_VALIDATE_SSL = True
DATASTORE_ADMIN_API_TIMEOUT_SECS = 30
ADMIN_CONSOLE_URL = 'https://appengine.google.com'
@property
def GOOGLE_API_HOST(self):
return 'https://%s' % self.GOOGLE_API_HOSTNAME
def GoogleApiScope(self, scope_type):
return '%s/%s' % (self.GOOGLE_API_AUTH, scope_type)
@property
def GOOGLE_API_AUTH(self):
return '%s/auth' % self.GOOGLE_API_OAUTH_SCOPE_HOSTNAME
@property
def DISCOVERY_URL(self):
return 'https://%s/discovery/v1/apis/{api}/{apiVersion}/rest' % (
self.GOOGLE_API_HOSTNAME)
def GsBucketURL(self, bucket_name):
return 'https://%s/%s/' % (self.GS_API_HOSTNAME, bucket_name)
class Local(Default):
"""Dev-appserver configuration."""
class Prod(Default):
"""Production cluster configuration."""
DEFAULT_APP_DOMAIN = 'appspot.com'
try:
import config_runtime
RUNTIME_DATACENTER_TO_CLASS = config_runtime.RUNTIME_DATACENTER_TO_CLASS
PRODUCTION_CLASS = config_runtime.ProdRuntime
except ImportError:
RUNTIME_DATACENTER_TO_CLASS = {}
PRODUCTION_CLASS = Prod
def GetConfig():
"""Determine configuration class based on the runtime environment.
The DATACENTER environment variable is useful for determining which App
Engine cluster type this services application is deployed on. All
dev-appservers have no DATACENTER variable set. Production does not have any
prefix at all.
Returns:
Class of the configuration determined by examining the runtime environment.
"""
datacenter = os.environ.get('DATACENTER')
if not datacenter:
return Local
for prefix, config in RUNTIME_DATACENTER_TO_CLASS.items():
if datacenter.startswith(prefix):
return config
return PRODUCTION_CLASS
def Export(cls):
"""Export public class values to the config module."""
global current
current = cls()
for name in dir(current):
if not name.startswith('_'):
globals()[name] = getattr(current, name)
current = None
Export(GetConfig())