summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiall Mac Innes <kiall@hp.com>2013-10-30 13:34:17 +0000
committerKiall Mac Innes <kiall@hp.com>2013-10-30 14:43:32 +0000
commitba104159d77b467306080142f09ceebdd20d485d (patch)
tree83a22803399264a5052ef398997974a231c9d592
parent6ebfe75637eeed7a0e7e4d639aa740cdcbc653a3 (diff)
downloaddesignate-ba104159d77b467306080142f09ceebdd20d485d.tar.gz
Sync requirements with stable/havana requirements
Change-Id: I401fd276633f7bf41d6c9fbeb5255fdaf44e9ead
-rw-r--r--designate/schema/validators.py98
-rw-r--r--designate/tests/__init__.py1
-rw-r--r--designate/tests/patches.py44
-rw-r--r--requirements.txt10
-rwxr-xr-xsetup.py2
-rw-r--r--test-requirements.txt4
6 files changed, 78 insertions, 81 deletions
diff --git a/designate/schema/validators.py b/designate/schema/validators.py
index d98a760c..2bc4edf8 100644
--- a/designate/schema/validators.py
+++ b/designate/schema/validators.py
@@ -15,6 +15,8 @@
# under the License.
import datetime
import jsonschema
+from jsonschema import _utils
+import jsonschema.validators
from designate.openstack.common import log as logging
from designate.schema import format
@@ -22,38 +24,33 @@ from designate.schema import format
LOG = logging.getLogger(__name__)
-class _Draft34CommonMixin(object):
- def validate_type(self, types, instance, schema):
- # NOTE(kiall): A datetime object is not a string, but is still valid.
- if ('format' in schema and schema['format'] == 'date-time'
- and isinstance(instance, datetime.datetime)):
- return
-
- errors = super(_Draft34CommonMixin, self).validate_type(
- types, instance, schema)
-
- for error in errors:
- yield error
-
-
-class Draft4Validator(_Draft34CommonMixin, jsonschema.Draft4Validator):
- def __init__(self, schema, types=(), resolver=None, format_checker=None):
- if format_checker is None:
- format_checker = format.draft4_format_checker
-
- super(Draft4Validator, self).__init__(schema, types, resolver,
- format_checker)
+def type_draft3(validator, types, instance, schema):
+ types = _utils.ensure_list(types)
+ # NOTE(kiall): A datetime object is not a string, but is still valid.
+ if ('format' in schema and schema['format'] == 'date-time'
+ and isinstance(instance, datetime.datetime)):
+ return
-class Draft3Validator(_Draft34CommonMixin, jsonschema.Draft3Validator):
- def __init__(self, schema, types=(), resolver=None, format_checker=None):
- if format_checker is None:
- format_checker = format.draft3_format_checker
+ all_errors = []
+ for index, type in enumerate(types):
+ if type == "any":
+ return
+ if validator.is_type(type, "object"):
+ errors = list(validator.descend(instance, type, schema_path=index))
+ if not errors:
+ return
+ all_errors.extend(errors)
+ else:
+ if validator.is_type(instance, type):
+ return
+ else:
+ yield jsonschema.ValidationError(
+ _utils.types_msg(instance, types), context=all_errors,
+ )
- super(Draft3Validator, self).__init__(schema, types, resolver,
- format_checker)
- def validate_oneOf(self, oneOf, instance, schema):
+def oneOf_draft3(self, oneOf, instance, schema):
# Backported from Draft4 to Draft3
subschemas = iter(oneOf)
first_valid = next(
@@ -72,3 +69,48 @@ class Draft3Validator(_Draft34CommonMixin, jsonschema.Draft3Validator):
yield jsonschema.ValidationError(
"%r is valid under each of %s" % (instance, reprs)
)
+
+
+def type_draft4(validator, types, instance, schema):
+ types = _utils.ensure_list(types)
+
+ # NOTE(kiall): A datetime object is not a string, but is still valid.
+ if ('format' in schema and schema['format'] == 'date-time'
+ and isinstance(instance, datetime.datetime)):
+ return
+
+ if not any(validator.is_type(instance, type) for type in types):
+ yield jsonschema.ValidationError(_utils.types_msg(instance, types))
+
+
+Draft3Validator = jsonschema.validators.extend(
+ jsonschema.validators.Draft3Validator,
+ validators={
+ "type": type_draft3,
+ "oneOf": oneOf_draft3,
+ })
+
+
+Draft4Validator = jsonschema.validators.extend(
+ jsonschema.validators.Draft4Validator,
+ validators={
+ "type": type_draft4,
+ })
+
+
+class Draft4Validator(Draft4Validator):
+ def __init__(self, schema, types=(), resolver=None, format_checker=None):
+ if format_checker is None:
+ format_checker = format.draft4_format_checker
+
+ super(Draft4Validator, self).__init__(schema, types, resolver,
+ format_checker)
+
+
+class Draft3Validator(Draft3Validator):
+ def __init__(self, schema, types=(), resolver=None, format_checker=None):
+ if format_checker is None:
+ format_checker = format.draft3_format_checker
+
+ super(Draft3Validator, self).__init__(schema, types, resolver,
+ format_checker)
diff --git a/designate/tests/__init__.py b/designate/tests/__init__.py
index bfb4f4b5..ee4dd0ab 100644
--- a/designate/tests/__init__.py
+++ b/designate/tests/__init__.py
@@ -18,7 +18,6 @@ import unittest2
import mox
import nose
from oslo.config import cfg
-from designate.tests import patches # flake8: noqa
from designate.openstack.common import log as logging
from designate.openstack.common.notifier import test_notifier
from designate.openstack.common import policy
diff --git a/designate/tests/patches.py b/designate/tests/patches.py
deleted file mode 100644
index 7b46af19..00000000
--- a/designate/tests/patches.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-#
-# Author: Kiall Mac Innes <kiall@hp.com>
-#
-# 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 webtest
-from webtest.compat import dumps
-
-
-class TestApp(webtest.TestApp):
- def patch(self, url, params='', headers=None, extra_environ=None,
- status=None, upload_files=None, expect_errors=False,
- content_type=None):
- return self._gen_request('PATCH', url, params=params,
- headers=headers,
- extra_environ=extra_environ,
- status=status,
- upload_files=upload_files,
- expect_errors=expect_errors,
- content_type=content_type)
-
- def patch_json(self, url, params='', headers=None, extra_environ=None,
- status=None, expect_errors=False):
- content_type = 'application/json'
- if params:
- params = dumps(params)
- return self._gen_request('PATCH', url, params=params, headers=headers,
- extra_environ=extra_environ, status=status,
- upload_files=None,
- expect_errors=expect_errors,
- content_type=content_type)
-
-
-webtest.TestApp = TestApp
diff --git a/requirements.txt b/requirements.txt
index ee7da9ea..ad7f2d6a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,17 +1,17 @@
-cliff>=1.4
+cliff>=1.4.3
eventlet>=0.13.0
extras
-Flask==0.9
+Flask>=0.10,<1.0
iso8601>=0.1.4
-jsonschema>=1.3.0,!=1.4.0,<2
+jsonschema>=1.3.0,!=1.4.0
kombu>=2.4.8
netaddr
-oslo.config>=1.1.0
+oslo.config>=1.2.0
Paste
PasteDeploy>=1.5.0
pbr>=0.5.21,<1.0
pecan>=0.2.0
-python-keystoneclient>=0.3.0
+python-keystoneclient>=0.3.2
Routes>=1.12.3
SQLAlchemy>=0.7.8,<=0.7.99
sqlalchemy-migrate>=0.7.2
diff --git a/setup.py b/setup.py
index 2a0786a8..70c2b3f3 100755
--- a/setup.py
+++ b/setup.py
@@ -18,5 +18,5 @@
import setuptools
setuptools.setup(
- setup_requires=['pbr>=0.5.21,<1.0'],
+ setup_requires=['pbr'],
pbr=True)
diff --git a/test-requirements.txt b/test-requirements.txt
index 77ce7dde..c3cf09c4 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -8,6 +8,6 @@ nosehtmloutput>=0.0.3
nosexcover
openstack.nose_plugin>=0.7
pep8==1.4.5
-pyflakes==0.7.2
+pyflakes>=0.7.2,<0.7.4
unittest2
-WebTest==1.3.3
+WebTest>=2.0