Skip to content

Commit 5393edc

Browse files
committed
fixes types, removes a few more Anys
1 parent 116d9e4 commit 5393edc

File tree

3 files changed

+46
-30
lines changed

3 files changed

+46
-30
lines changed

schema_salad/makedoc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ def extendsfrom(item, ex):
383383

384384

385385
def avrold_doc(j, outdoc, renderlist, redirects, brand, brandlink):
386-
# type: (List[Dict[str, Any]], IO[Any], str, Dict, str, str) -> None
386+
# type: (List[Dict[unicode, Any]], IO[Any], str, Dict, str, str) -> None
387387
toc = ToC()
388388
toc.start_numbering = False
389389

@@ -475,7 +475,7 @@ def avrold_doc(j, outdoc, renderlist, redirects, brand, brandlink):
475475

476476
args = parser.parse_args()
477477

478-
s = [] # type: List[Dict[str, Any]]
478+
s = [] # type: List[Dict[unicode, Any]]
479479
a = args.schema
480480
with open(a) as f:
481481
if a.endswith("md"):

schema_salad/ref_resolver.py

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def __init__(self, ctx, schemagraph=None, foreign_properties=None,
103103
self.vocab = {} # type: Dict[unicode, Any]
104104
self.rvocab = {} # type: Dict[unicode, Any]
105105
self.idmap = None # type: Dict[unicode, Any]
106-
self.mapPredicate = None # type: Dict[unicode, Any]
106+
self.mapPredicate = None # type: Dict[unicode, unicode]
107107

108108
self.add_context(ctx)
109109

@@ -240,10 +240,10 @@ def add_context(self, newcontext, baseuri=""):
240240
_logger.debug("vocab is %s", self.vocab)
241241

242242
def resolve_ref(self, ref, base_url=None, checklinks=True):
243-
# type: (Union[Dict[str, Any], str, unicode], Union[str, unicode], bool) -> Tuple[Union[Dict[str, Any], str, unicode], Dict[str, Any]]
243+
# type: (Union[Dict[unicode, Any], str, unicode], Union[str, unicode], bool) -> Tuple[Union[Dict[unicode, Any], str, unicode], Dict[str, Any]]
244244
base_url = base_url or 'file://%s/' % os.path.abspath('.')
245245

246-
obj = None # type: Dict[str, Any]
246+
obj = None # type: Dict[unicode, Any]
247247
inc = False
248248

249249
# If `ref` is a dict, look for special directives.
@@ -324,41 +324,53 @@ def resolve_ref(self, ref, base_url=None, checklinks=True):
324324

325325

326326
def _resolve_idmap(self, document, loader):
327+
# type: (Dict[unicode, Union[Dict[unicode, Dict[unicode, unicode]], List[Dict[unicode, Any]]]], Loader) -> None
327328
# Convert fields with mapSubject into lists
328329
# use mapPredicate if the mapped value isn't a dict.
329330
for idmapField in loader.idmap:
330-
if (idmapField in document and isinstance(document[idmapField], dict) and
331-
"$import" not in document[idmapField] and
332-
"$include" not in document[idmapField]):
333-
ls = []
334-
for k in sorted(document[idmapField].keys()):
335-
v = document[idmapField][k]
336-
if not isinstance(v, dict):
337-
if idmapField in loader.mapPredicate:
338-
v = {loader.mapPredicate[idmapField]: v}
331+
if (idmapField in document):
332+
idmapFieldValue = document[idmapField]
333+
if (isinstance(idmapFieldValue, dict)
334+
and "$import" not in idmapFieldValue
335+
and "$include" not in idmapFieldValue):
336+
ls = []
337+
for k in sorted(idmapFieldValue.keys()):
338+
val = idmapFieldValue[k]
339+
v = None # type: Dict[unicode, Any]
340+
if not isinstance(v, dict):
341+
if idmapField in loader.mapPredicate:
342+
v = {loader.mapPredicate[idmapField]: val}
343+
else:
344+
raise validate.ValidationException(
345+
"mapSubject '%s' value '%s' is not a dict"
346+
"and does not have a mapPredicate", k, v)
339347
else:
340-
raise validate.ValidationException(
341-
"mapSubject '%s' value '%s' is not a dict and does not have a mapPredicate", k, v)
342-
v[loader.idmap[idmapField]] = k
343-
ls.append(v)
344-
document[idmapField] = ls
348+
v = val
349+
v[loader.idmap[idmapField]] = k
350+
ls.append(v)
351+
document[idmapField] = ls
345352

346353
def _resolve_identifier(self, document, loader, base_url):
354+
# type: (Dict[unicode, unicode], Loader, unicode) -> unicode
347355
# Expand identifier field (usually 'id') to resolve scope
348356
for identifer in loader.identifiers:
349357
if identifer in document:
350358
if isinstance(document[identifer], basestring):
351359
document[identifer] = loader.expand_url(
352360
document[identifer], base_url, scoped=True)
353-
if document[identifer] not in loader.idx or isinstance(loader.idx[document[identifer]], basestring):
361+
if (document[identifer] not in loader.idx
362+
or isinstance(
363+
loader.idx[document[identifer]], basestring)):
354364
loader.idx[document[identifer]] = document
355365
base_url = document[identifer]
356366
else:
357367
raise validate.ValidationException(
358-
"identifier field '%s' must be a string" % (document[identifer]))
368+
"identifier field '%s' must be a string"
369+
% (document[identifer]))
359370
return base_url
360371

361372
def _resolve_identity(self, document, loader, base_url):
373+
# type: (Dict[unicode, List[unicode]], Loader, unicode) -> None
362374
# Resolve scope for identity fields (fields where the value is the
363375
# identity of a standalone node, such as enum symbols)
364376
for identifer in loader.identity_links:
@@ -372,6 +384,7 @@ def _resolve_identity(self, document, loader, base_url):
372384
n]] = document[identifer][n]
373385

374386
def _normalize_fields(self, document, loader):
387+
# type: (Dict[unicode, unicode], Loader) -> None
375388
# Normalize fields which are prefixed or full URIn to vocabulary terms
376389
for d in document:
377390
d2 = loader.expand_url(d, "", scoped=False, vocab_term=True)
@@ -380,25 +393,28 @@ def _normalize_fields(self, document, loader):
380393
del document[d]
381394

382395
def _resolve_uris(self, document, loader, base_url):
396+
# type: (Dict[unicode, Union[unicode, List[unicode]]], Loader, unicode) -> None
383397
# Resolve remaining URLs based on document base
384398
for d in loader.url_fields:
385399
if d in self.scoped_ref_fields:
386400
continue
387401
if d in document:
388-
if isinstance(document[d], basestring):
402+
datum = document[d]
403+
if isinstance(datum, (str, unicode)):
389404
document[d] = loader.expand_url(
390-
document[d], base_url, scoped=False, vocab_term=(d in loader.vocab_fields))
391-
elif isinstance(document[d], list):
405+
datum, base_url, scoped=False,
406+
vocab_term=(d in loader.vocab_fields))
407+
elif isinstance(datum, list):
392408
document[d] = [
393409
loader.expand_url(
394410
url, base_url, scoped=False,
395411
vocab_term=(d in loader.vocab_fields))
396-
if isinstance(url, (str, unicode))
397-
else url for url in document[d]]
412+
if isinstance(url, (str, unicode)) else url
413+
for url in datum]
398414

399415

400416
def resolve_all(self, document, base_url, file_base=None, checklinks=True):
401-
# type: (Any, Union[str, unicode], Union[str, unicode], bool) -> Tuple[Any, Dict[str, Any]]
417+
# type: (Union[Dict[unicode, Any], List[Union[unicode, Dict]]], Union[str, unicode], Union[str, unicode], bool) -> Tuple[Any, Dict[str, Any]]
402418
loader = self
403419
metadata = {} # type: Dict[str, Any]
404420
if file_base is None:
@@ -468,7 +484,7 @@ def resolve_all(self, document, base_url, file_base=None, checklinks=True):
468484
val = document[i]
469485
if isinstance(val, dict) and "$import" in val:
470486
l, _ = loader.resolve_ref(val, base_url=file_base, checklinks=False)
471-
if isinstance(l, list):
487+
if isinstance(l, list): # never true?
472488
del document[i]
473489
for item in aslist(l):
474490
document.insert(i, item)

schema_salad/schema.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def get_metaschema():
159159

160160

161161
def load_schema(schema_ref, cache=None):
162-
# type: (Union[unicode, Dict[str, Any]], Dict) -> Tuple[ref_resolver.Loader, Union[avro.schema.Names, avro.schema.SchemaParseException], Dict[unicode, Any], ref_resolver.Loader]
162+
# type: (Union[unicode, Dict[unicode, Any]], Dict) -> Tuple[ref_resolver.Loader, Union[avro.schema.Names, avro.schema.SchemaParseException], Dict[unicode, Any], ref_resolver.Loader]
163163
metaschema_names, metaschema_doc, metaschema_loader = get_metaschema()
164164
if cache is not None:
165165
metaschema_loader.cache = cache
@@ -195,7 +195,7 @@ def load_and_validate(document_loader, avsc_names, document, strict):
195195

196196

197197
def validate_doc(schema_names, doc, loader, strict):
198-
# type: (avro.schema.Names, Union[Dict[str, Any], List[Dict[str, Any]], str, unicode], ref_resolver.Loader, bool) -> None
198+
# type: (avro.schema.Names, Union[Dict[unicode, Any], List[Dict[unicode, Any]], str, unicode], ref_resolver.Loader, bool) -> None
199199
has_root = False
200200
for r in schema_names.names.values():
201201
if ((hasattr(r, 'get_prop') and r.get_prop("documentRoot")) or (

0 commit comments

Comments
 (0)