Notice: Over the next few months, we're reorganizing the App Engine documentation site to make it easier to find content and better align with the rest of Google Cloud products. The same content will be available, but the navigation will now match the rest of the Cloud products. If you have feedback or questions as you navigate the site, click Send Feedback.

Python 2 is no longer supported by the community. We recommend that you migrate Python 2 apps to Python 3.
Stay organized with collections Save and categorize content based on your preferences.

Source code for google.appengine.ext.builtins

#!/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.
#




"""Repository for all builtin handlers information.

On initialization, this file generates a list of builtin handlers that have
associated app.yaml information.  This file can then be called to read that
information and make it available.
"""














import logging
import os



DEFAULT_DIR = os.path.join(os.path.dirname(__file__))
_handler_dir = None



_available_builtins = None
BUILTINS_NOT_AVAIABLE_IN_PYTHON27 = set(['datastore_admin', 'mapreduce'])


INCLUDE_FILENAME_TEMPLATE = 'include-%s.yaml'
DEFAULT_INCLUDE_FILENAME = 'include.yaml'


[docs]class InvalidBuiltinName(Exception): """Raised whenever a builtin handler name is specified that is not found."""
[docs]def reset_builtins_dir(): """Public method for resetting builtins directory to default.""" set_builtins_dir(DEFAULT_DIR)
[docs]def set_builtins_dir(path): """Sets the appropriate path for testing and reinitializes the module.""" global _handler_dir, _available_builtins _handler_dir = path _available_builtins = [] _initialize_builtins()
def _initialize_builtins(): """Scan the immediate subdirectories of the builtins module. Encountered subdirectories with an app.yaml file are added to AVAILABLE_BUILTINS. """ if os.path.isdir(_handler_dir): for filename in os.listdir(_handler_dir): if os.path.isfile(_get_yaml_path(filename, '')): _available_builtins.append(filename) def _get_yaml_path(builtin_name, runtime): """Return expected path to a builtin handler's yaml file without error check. """ runtime_specific = os.path.join(_handler_dir, builtin_name, INCLUDE_FILENAME_TEMPLATE % runtime) if runtime and os.path.exists(runtime_specific): return runtime_specific return os.path.join(_handler_dir, builtin_name, DEFAULT_INCLUDE_FILENAME)
[docs]def get_yaml_path(builtin_name, runtime=''): """Returns the full path to a yaml file by giving the builtin module's name. Args: builtin_name: single word name of builtin handler runtime: name of the runtime Raises: ValueError: if handler does not exist in expected directory Returns: the absolute path to a valid builtin handler include.yaml file """ if _handler_dir is None: set_builtins_dir(DEFAULT_DIR) available_builtins = set(_available_builtins) if runtime == 'python27': available_builtins = available_builtins - BUILTINS_NOT_AVAIABLE_IN_PYTHON27 if builtin_name not in available_builtins: raise InvalidBuiltinName( '%s is not the name of a valid builtin.\n' 'Available handlers are: %s' % ( builtin_name, ', '.join(sorted(available_builtins)))) return _get_yaml_path(builtin_name, runtime)
[docs]def get_yaml_basepath(): """Returns the full path of the directory in which builtins are located.""" if _handler_dir is None: set_builtins_dir(DEFAULT_DIR) return _handler_dir