ef9d5247e9
oslo.i18n has recently been released. This patch switches marconi over oslo.i18n. As per oslo.i18n's instructions, a new i18n module has been added under marconi. This module defines the translation globals and imports the necessary functions from oslo.i18n. The patch doesn't change the way Marconi does translation, this means that a `_` function is still being injected to the builtins. Note that the gettextutils module is still a required module from oslo-inc because there are oslo-inc modules that depend on the old gettextutils module. Closes-bug: #1314300 Change-Id: Ifb8f3296d1a0e2483ebd1c8d868b7359ecc99fb5
81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
# Copyright (c) 2013 Red Hat, 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.
|
|
|
|
import jsonschema
|
|
from jsonschema import validators
|
|
|
|
from marconi.common import errors
|
|
from marconi.i18n import _
|
|
from marconi.openstack.common import log
|
|
|
|
LOG = log.getLogger(__name__)
|
|
|
|
|
|
class Api(object):
|
|
|
|
schema = {}
|
|
validators = {}
|
|
|
|
def get_schema(self, operation):
|
|
"""Returns the schema for an operation
|
|
|
|
:param operation: Operation for which params need
|
|
to be validated.
|
|
:type operation: `six.text_type`
|
|
|
|
:returns: Operation's schema
|
|
:rtype: dict
|
|
|
|
:raises: `errors.InvalidOperation` if the operation
|
|
does not exist
|
|
"""
|
|
try:
|
|
return self.schema[operation]
|
|
except KeyError:
|
|
# TODO(flaper87): gettext support
|
|
msg = _('{0} is not a valid operation').format(operation)
|
|
raise errors.InvalidOperation(msg)
|
|
|
|
def validate(self, operation, params):
|
|
"""Validates the request data
|
|
|
|
This method relies on jsonschema and exists
|
|
just as a way for third-party transport to validate
|
|
the request. It's not recommended to validate every
|
|
request since they are already validated server side.
|
|
|
|
:param operation: Operation's for which params need
|
|
to be validated.
|
|
:type operation: `six.text_type`
|
|
:param params: Params to validate
|
|
:type params: dict
|
|
|
|
:returns: True if the schema is valid, False otherwise
|
|
:raises: `errors.InvalidOperation` if the operation
|
|
does not exist
|
|
"""
|
|
|
|
if operation not in self.validators:
|
|
schema = self.get_schema(operation)
|
|
self.validators[operation] = validators.Draft4Validator(schema)
|
|
|
|
try:
|
|
self.validators[operation].validate(params)
|
|
except jsonschema.ValidationError:
|
|
LOG.debug('Operation is invalid.')
|
|
return False
|
|
|
|
return True
|