Source code for tic.development.appengine.server.test.capabilities

#
# Taken as is from https://gist.github.com/186251
#

from google.appengine.api import apiproxy_rpc
from google.appengine.api import apiproxy_stub
from google.appengine.api import capabilities
from google.appengine.runtime import apiproxy_errors

IsEnabledRequest = capabilities.IsEnabledRequest
IsEnabledResponse = capabilities.IsEnabledResponse
CapabilityConfig = capabilities.CapabilityConfig

[docs]class CapabilityServiceStub(apiproxy_stub.APIProxyStub): """Test-oriented capability service stub.""" def __init__(self, disabled_capabilities, disabled_methods, service_name='capability_service'): """Constructor. Args: disabled_capabilities: A set of (package, capability) tuples defining capabilities that are disabled. disabled_methods: A set of (package, method) tuples defining methods that are disabled. An entry of ('package', '*') in disabled_capabilities is treated the same as finding the method being tested in this set. service_name: Service name expected for all calls. """ super(CapabilityServiceStub, self).__init__(service_name) self.disabled_capabilities = disabled_capabilities self.disabled_methods = disabled_methods def _Dynamic_IsEnabled(self, request, response): """Implementation of CapabilityService::IsEnabled(). Args: request: An IsEnabledRequest. response: An IsEnabledResponse. """ package = request.package() if (package, '*') in self.disabled_capabilities: response.set_summary_status(IsEnabledRequest.DISABLED) config = response.add_config() config.set_package(package) config.set_capability('*') config.set_status(CapabilityConfig.DISABLED) else: any_disabled = False for method in request.call_list(): config = response.add_config() config.set_package(package) config.set_capability(method) if (package, method) in self.disabled_methods: config.set_status(IsEnabledResponse.DISABLED) any_disabled = True else: config.set_status(IsEnabledResponse.ENABLED) for capability in request.capability_list(): config = response.add_config() config.set_package(package) config.set_capability(capability) if (package, capability) in self.disabled_capabilities: any_disabled = True config.set_status(IsEnabledResponse.DISABLED) else: config.set_status(IsEnabledResponse.ENABLED) response.set_summary_status(IsEnabledResponse.DISABLED if any_disabled else IsEnabledResponse.ENABLED)
[docs]class CapabilityStubWrapper(object): """A wrapper for stubs that raises CapabilityDisabledError when needed.""" def __init__(self, wrapped_stub, disabled_capabilities, disabled_methods): self.wrapped_stub = wrapped_stub self.disabled_capabilities = disabled_capabilities self.disabled_methods = disabled_methods
[docs] def CreateRPC(self): """Creates a (dummy) RPC object instance.""" return apiproxy_rpc.RPC(stub=self)
[docs] def MakeSyncCall(self, service, call, request, response): if ((service, '*') in self.disabled_capabilities or (service, call) in self.disabled_methods): raise apiproxy_errors.CapabilityDisabledError() self.wrapped_stub.MakeSyncCall(service, call, request, response)