Skip to content

Commit fb39437

Browse files
authored
Merge pull request #24 from dtkav/python2.7_support
python2.7 support
2 parents c80df49 + 70f5731 commit fb39437

File tree

6 files changed

+36
-19
lines changed

6 files changed

+36
-19
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,6 @@ ENV/
9999

100100
# mypy
101101
.mypy_cache/
102+
103+
# pytest
104+
.pytest_cache/

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ language: python
22
sudo: false
33
matrix:
44
include:
5+
- python: 2.7
56
- python: 3.2
67
- python: 3.3
78
- python: 3.4

openapi_spec_validator/decorators.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ def __init__(self, instance_resolver):
1818
def __call__(self, func):
1919
def wrapped(validator, schema_element, instance, schema):
2020
if not isinstance(instance, dict) or '$ref' not in instance:
21-
yield from func(validator, schema_element, instance, schema)
21+
for res in func(validator, schema_element, instance, schema):
22+
yield res
2223
return
2324

2425
ref = instance['$ref']
@@ -30,7 +31,8 @@ def wrapped(validator, schema_element, instance, schema):
3031
self._attach_scope(instance)
3132
with self.visiting.visit(ref):
3233
with self.instance_resolver.resolving(ref) as target:
33-
yield from func(validator, schema_element, target, schema)
34+
for res in func(validator, schema_element, target, schema):
35+
yield res
3436

3537
return wrapped
3638

openapi_spec_validator/validators.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,24 @@ def __init__(self, validator_factory, resolver_handlers):
3939
self.resolver_handlers = resolver_handlers
4040

4141
def validate(self, spec, spec_url=''):
42-
for error in self.iter_errors(spec, spec_url=spec_url):
43-
raise error
42+
for err in self.iter_errors(spec, spec_url=spec_url):
43+
raise err
4444

4545
def iter_errors(self, spec, spec_url=''):
4646
spec_resolver = self._get_resolver(spec_url, spec)
4747
dereferencer = self._get_dereferencer(spec_resolver)
4848

4949
validator = self._get_validator(spec_resolver)
50-
yield from validator.iter_errors(spec)
50+
for err in validator.iter_errors(spec):
51+
yield err
5152

5253
paths = spec.get('paths', {})
53-
yield from self._iter_paths_errors(paths, dereferencer)
54+
for err in self._iter_paths_errors(paths, dereferencer):
55+
yield err
5456

5557
components = spec.get('components', {})
56-
yield from self._iter_components_errors(components, dereferencer)
58+
for err in self._iter_components_errors(components, dereferencer):
59+
yield err
5760

5861
def _get_resolver(self, base_uri, referrer):
5962
return RefResolver(
@@ -81,7 +84,8 @@ def iter_errors(self, components):
8184
components_deref = self.dereferencer.dereference(components)
8285

8386
schemas = components_deref.get('schemas', {})
84-
yield from self._iter_schemas_errors(schemas)
87+
for err in self._iter_schemas_errors(schemas):
88+
yield err
8589

8690
def _iter_schemas_errors(self, schemas):
8791
return SchemasValidator(self.dereferencer).iter_errors(schemas)
@@ -95,7 +99,8 @@ def __init__(self, dereferencer):
9599
def iter_errors(self, schemas):
96100
schemas_deref = self.dereferencer.dereference(schemas)
97101
for name, schema in iteritems(schemas_deref):
98-
yield from self._iter_schem_errors(schema)
102+
for err in self._iter_schem_errors(schema):
103+
yield err
99104

100105
def _iter_schem_errors(self, schema):
101106
return SchemaValidator(self.dereferencer).iter_errors(schema)
@@ -111,7 +116,8 @@ def iter_errors(self, schema):
111116

112117
if 'allOf' in schema_deref:
113118
for inner_schema in schema_deref['allOf']:
114-
yield from self.iter_errors(inner_schema)
119+
for err in self.iter_errors(inner_schema):
120+
yield err
115121

116122
required = schema_deref.get('required', [])
117123
properties = schema_deref.get('properties', {}).keys()
@@ -132,7 +138,8 @@ def __init__(self, dereferencer):
132138
def iter_errors(self, paths):
133139
paths_deref = self.dereferencer.dereference(paths)
134140
for url, path_item in iteritems(paths_deref):
135-
yield from self._iter_path_errors(url, path_item)
141+
for err in self._iter_path_errors(url, path_item):
142+
yield err
136143

137144
def _iter_path_errors(self, url, path_item):
138145
return PathValidator(self.dereferencer).iter_errors(url, path_item)
@@ -146,7 +153,8 @@ def __init__(self, dereferencer):
146153
def iter_errors(self, url, path_item):
147154
path_item_deref = self.dereferencer.dereference(path_item)
148155

149-
yield from self._iter_path_item_errors(url, path_item_deref)
156+
for err in self._iter_path_item_errors(url, path_item_deref):
157+
yield err
150158

151159
def _iter_path_item_errors(self, url, path_item):
152160
return PathItemValidator(self.dereferencer).iter_errors(url, path_item)
@@ -165,14 +173,16 @@ def iter_errors(self, url, path_item):
165173
path_item_deref = self.dereferencer.dereference(path_item)
166174

167175
parameters = path_item_deref.get('parameters', [])
168-
yield from self._iter_parameters_errors(parameters)
176+
for err in self._iter_parameters_errors(parameters):
177+
yield err
169178

170179
for field_name, operation in iteritems(path_item):
171180
if field_name not in self.OPERATIONS:
172181
continue
173182

174-
yield from self._iter_operation_errors(
175-
url, field_name, operation, parameters)
183+
for err in self._iter_operation_errors(
184+
url, field_name, operation, parameters):
185+
yield err
176186

177187
def _iter_operation_errors(self, url, name, operation, path_parameters):
178188
return OperationValidator(self.dereferencer).iter_errors(
@@ -192,7 +202,8 @@ def iter_errors(self, url, name, operation, path_parameters=None):
192202
operation_deref = self.dereferencer.dereference(operation)
193203

194204
parameters = operation_deref.get('parameters', [])
195-
yield from self._iter_parameters_errors(parameters)
205+
for err in self._iter_parameters_errors(parameters):
206+
yield err
196207

197208
all_params = list(set(
198209
list(self._get_path_param_names(path_parameters)) +
@@ -205,8 +216,7 @@ def iter_errors(self, url, name, operation, path_parameters=None):
205216
"Path parameter '{0}' for '{1}' operation in '{2}' "
206217
"was not resolved".format(path, name, url)
207218
)
208-
209-
return []
219+
return
210220

211221
def _get_path_param_names(self, params):
212222
for param in params:

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ def run_tests(self):
8686
"Intended Audience :: Developers",
8787
"Topic :: Software Development :: Libraries :: Python Modules",
8888
"Operating System :: OS Independent",
89+
"Programming Language :: Python :: 2.7",
8990
"Programming Language :: Python :: 3.4",
9091
"Programming Language :: Python :: 3.5",
9192
"Programming Language :: Python :: 3.6",

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[tox]
2-
envlist = {py34,py35,py36}-{default,simplejson}
2+
envlist = {py27,py34,py35,py36}-{default,simplejson}
33

44
[testenv]
55
deps =

0 commit comments

Comments
 (0)