Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/schema_salad/metaschema.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler |
|---|---|
| date | Fri, 31 Jul 2020 00:32:28 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:d30785e31577 | 1:56ad4e20f292 |
|---|---|
| 1 # | |
| 2 # This file was autogenerated using schema-salad-tool --codegen=python | |
| 3 # The code itself is released under the Apache 2.0 license and the help text is | |
| 4 # subject to the license of the original schema. | |
| 5 # | |
| 6 import copy | |
| 7 import os | |
| 8 import re | |
| 9 import uuid # pylint: disable=unused-import # noqa: F401 | |
| 10 from typing import ( | |
| 11 Any, | |
| 12 Dict, | |
| 13 List, | |
| 14 MutableMapping, | |
| 15 MutableSequence, | |
| 16 Optional, | |
| 17 Sequence, | |
| 18 Tuple, | |
| 19 Type, | |
| 20 Union, | |
| 21 ) | |
| 22 | |
| 23 from six import iteritems, string_types, text_type | |
| 24 from six.moves import StringIO, urllib | |
| 25 from typing_extensions import Text # pylint: disable=unused-import | |
| 26 | |
| 27 from ruamel import yaml | |
| 28 from ruamel.yaml.comments import CommentedMap | |
| 29 from schema_salad.ref_resolver import Fetcher | |
| 30 from schema_salad.sourceline import SourceLine, add_lc_filename | |
| 31 from schema_salad.exceptions import SchemaSaladException, ValidationException | |
| 32 | |
| 33 # move to a regular typing import when Python 3.3-3.6 is no longer supported | |
| 34 | |
| 35 _vocab = {} # type: Dict[Text, Text] | |
| 36 _rvocab = {} # type: Dict[Text, Text] | |
| 37 | |
| 38 | |
| 39 class Savable(object): | |
| 40 @classmethod | |
| 41 def fromDoc(cls, _doc, baseuri, loadingOptions, docRoot=None): | |
| 42 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Savable | |
| 43 pass | |
| 44 | |
| 45 def save(self, top=False, base_url="", relative_uris=True): | |
| 46 # type: (bool, Text, bool) -> Dict[Text, Text] | |
| 47 pass | |
| 48 | |
| 49 | |
| 50 class LoadingOptions(object): | |
| 51 def __init__( | |
| 52 self, | |
| 53 fetcher=None, # type: Optional[Fetcher] | |
| 54 namespaces=None, # type: Optional[Dict[Text, Text]] | |
| 55 fileuri=None, # type: Optional[Text] | |
| 56 copyfrom=None, # type: Optional[LoadingOptions] | |
| 57 schemas=None, # type: Optional[List[Text]] | |
| 58 original_doc=None, # type: Optional[Any] | |
| 59 ): # type: (...) -> None | |
| 60 self.idx = {} # type: Dict[Text, Text] | |
| 61 self.fileuri = fileuri # type: Optional[Text] | |
| 62 self.namespaces = namespaces | |
| 63 self.schemas = schemas | |
| 64 self.original_doc = original_doc | |
| 65 if copyfrom is not None: | |
| 66 self.idx = copyfrom.idx | |
| 67 if fetcher is None: | |
| 68 fetcher = copyfrom.fetcher | |
| 69 if fileuri is None: | |
| 70 self.fileuri = copyfrom.fileuri | |
| 71 if namespaces is None: | |
| 72 self.namespaces = copyfrom.namespaces | |
| 73 if namespaces is None: | |
| 74 schemas = copyfrom.schemas | |
| 75 | |
| 76 if fetcher is None: | |
| 77 import requests | |
| 78 from cachecontrol.wrapper import CacheControl | |
| 79 from cachecontrol.caches import FileCache | |
| 80 from schema_salad.ref_resolver import DefaultFetcher | |
| 81 | |
| 82 if "HOME" in os.environ: | |
| 83 session = CacheControl( | |
| 84 requests.Session(), | |
| 85 cache=FileCache( | |
| 86 os.path.join(os.environ["HOME"], ".cache", "salad") | |
| 87 ), | |
| 88 ) | |
| 89 elif "TMPDIR" in os.environ: | |
| 90 session = CacheControl( | |
| 91 requests.Session(), | |
| 92 cache=FileCache( | |
| 93 os.path.join(os.environ["TMPDIR"], ".cache", "salad") | |
| 94 ), | |
| 95 ) | |
| 96 else: | |
| 97 session = CacheControl( | |
| 98 requests.Session(), cache=FileCache("/tmp", ".cache", "salad") | |
| 99 ) | |
| 100 self.fetcher = DefaultFetcher({}, session) # type: Fetcher | |
| 101 else: | |
| 102 self.fetcher = fetcher | |
| 103 | |
| 104 self.vocab = _vocab | |
| 105 self.rvocab = _rvocab | |
| 106 | |
| 107 if namespaces is not None: | |
| 108 self.vocab = self.vocab.copy() | |
| 109 self.rvocab = self.rvocab.copy() | |
| 110 for k, v in iteritems(namespaces): | |
| 111 self.vocab[k] = v | |
| 112 self.rvocab[v] = k | |
| 113 | |
| 114 | |
| 115 def load_field(val, fieldtype, baseuri, loadingOptions): | |
| 116 # type: (Union[Text, Dict[Text, Text]], _Loader, Text, LoadingOptions) -> Any | |
| 117 if isinstance(val, MutableMapping): | |
| 118 if "$import" in val: | |
| 119 if loadingOptions.fileuri is None: | |
| 120 raise SchemaSaladException("Cannot load $import without fileuri") | |
| 121 return _document_load_by_url( | |
| 122 fieldtype, | |
| 123 loadingOptions.fetcher.urljoin(loadingOptions.fileuri, val["$import"]), | |
| 124 loadingOptions, | |
| 125 ) | |
| 126 elif "$include" in val: | |
| 127 if loadingOptions.fileuri is None: | |
| 128 raise SchemaSaladException("Cannot load $import without fileuri") | |
| 129 val = loadingOptions.fetcher.fetch_text( | |
| 130 loadingOptions.fetcher.urljoin(loadingOptions.fileuri, val["$include"]) | |
| 131 ) | |
| 132 return fieldtype.load(val, baseuri, loadingOptions) | |
| 133 | |
| 134 | |
| 135 save_type = Union[ | |
| 136 Dict[Text, Text], List[Union[Dict[Text, Text], List[Any], None]], None | |
| 137 ] | |
| 138 | |
| 139 | |
| 140 def save( | |
| 141 val, # type: Optional[Union[Savable, MutableSequence[Savable]]] | |
| 142 top=True, # type: bool | |
| 143 base_url="", # type: Text | |
| 144 relative_uris=True, # type: bool | |
| 145 ): # type: (...) -> save_type | |
| 146 | |
| 147 if isinstance(val, Savable): | |
| 148 return val.save(top=top, base_url=base_url, relative_uris=relative_uris) | |
| 149 if isinstance(val, MutableSequence): | |
| 150 return [ | |
| 151 save(v, top=False, base_url=base_url, relative_uris=relative_uris) | |
| 152 for v in val | |
| 153 ] | |
| 154 if isinstance(val, MutableMapping): | |
| 155 newdict = {} | |
| 156 for key in val: | |
| 157 newdict[key] = save( | |
| 158 val[key], top=False, base_url=base_url, relative_uris=relative_uris | |
| 159 ) | |
| 160 return newdict | |
| 161 return val | |
| 162 | |
| 163 | |
| 164 def expand_url( | |
| 165 url, # type: Union[str, Text] | |
| 166 base_url, # type: Union[str, Text] | |
| 167 loadingOptions, # type: LoadingOptions | |
| 168 scoped_id=False, # type: bool | |
| 169 vocab_term=False, # type: bool | |
| 170 scoped_ref=None, # type: Optional[int] | |
| 171 ): | |
| 172 # type: (...) -> Text | |
| 173 | |
| 174 if not isinstance(url, string_types): | |
| 175 return url | |
| 176 | |
| 177 url = Text(url) | |
| 178 | |
| 179 if url in (u"@id", u"@type"): | |
| 180 return url | |
| 181 | |
| 182 if vocab_term and url in loadingOptions.vocab: | |
| 183 return url | |
| 184 | |
| 185 if bool(loadingOptions.vocab) and u":" in url: | |
| 186 prefix = url.split(u":")[0] | |
| 187 if prefix in loadingOptions.vocab: | |
| 188 url = loadingOptions.vocab[prefix] + url[len(prefix) + 1 :] | |
| 189 | |
| 190 split = urllib.parse.urlsplit(url) | |
| 191 | |
| 192 if ( | |
| 193 (bool(split.scheme) and split.scheme in [u"http", u"https", u"file"]) | |
| 194 or url.startswith(u"$(") | |
| 195 or url.startswith(u"${") | |
| 196 ): | |
| 197 pass | |
| 198 elif scoped_id and not bool(split.fragment): | |
| 199 splitbase = urllib.parse.urlsplit(base_url) | |
| 200 frg = u"" | |
| 201 if bool(splitbase.fragment): | |
| 202 frg = splitbase.fragment + u"/" + split.path | |
| 203 else: | |
| 204 frg = split.path | |
| 205 pt = splitbase.path if splitbase.path != "" else "/" | |
| 206 url = urllib.parse.urlunsplit( | |
| 207 (splitbase.scheme, splitbase.netloc, pt, splitbase.query, frg) | |
| 208 ) | |
| 209 elif scoped_ref is not None and not bool(split.fragment): | |
| 210 splitbase = urllib.parse.urlsplit(base_url) | |
| 211 sp = splitbase.fragment.split(u"/") | |
| 212 n = scoped_ref | |
| 213 while n > 0 and len(sp) > 0: | |
| 214 sp.pop() | |
| 215 n -= 1 | |
| 216 sp.append(url) | |
| 217 url = urllib.parse.urlunsplit( | |
| 218 ( | |
| 219 splitbase.scheme, | |
| 220 splitbase.netloc, | |
| 221 splitbase.path, | |
| 222 splitbase.query, | |
| 223 u"/".join(sp), | |
| 224 ) | |
| 225 ) | |
| 226 else: | |
| 227 url = loadingOptions.fetcher.urljoin(base_url, url) | |
| 228 | |
| 229 if vocab_term: | |
| 230 split = urllib.parse.urlsplit(url) | |
| 231 if bool(split.scheme): | |
| 232 if url in loadingOptions.rvocab: | |
| 233 return loadingOptions.rvocab[url] | |
| 234 else: | |
| 235 raise ValidationException("Term '{}' not in vocabulary".format(url)) | |
| 236 | |
| 237 return url | |
| 238 | |
| 239 | |
| 240 class _Loader(object): | |
| 241 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 242 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 243 pass | |
| 244 | |
| 245 | |
| 246 class _AnyLoader(_Loader): | |
| 247 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 248 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 249 if doc is not None: | |
| 250 return doc | |
| 251 raise ValidationException("Expected non-null") | |
| 252 | |
| 253 | |
| 254 class _PrimitiveLoader(_Loader): | |
| 255 def __init__(self, tp): | |
| 256 # type: (Union[type, Tuple[Type[Text], Type[Text]]]) -> None | |
| 257 self.tp = tp | |
| 258 | |
| 259 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 260 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 261 if not isinstance(doc, self.tp): | |
| 262 raise ValidationException( | |
| 263 "Expected a {} but got {}".format( | |
| 264 self.tp.__class__.__name__, doc.__class__.__name__ | |
| 265 ) | |
| 266 ) | |
| 267 return doc | |
| 268 | |
| 269 def __repr__(self): # type: () -> str | |
| 270 return str(self.tp) | |
| 271 | |
| 272 | |
| 273 class _ArrayLoader(_Loader): | |
| 274 def __init__(self, items): | |
| 275 # type: (_Loader) -> None | |
| 276 self.items = items | |
| 277 | |
| 278 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 279 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 280 if not isinstance(doc, MutableSequence): | |
| 281 raise ValidationException("Expected a list") | |
| 282 r = [] # type: List[Any] | |
| 283 errors = [] # type: List[SchemaSaladException] | |
| 284 for i in range(0, len(doc)): | |
| 285 try: | |
| 286 lf = load_field( | |
| 287 doc[i], _UnionLoader((self, self.items)), baseuri, loadingOptions | |
| 288 ) | |
| 289 if isinstance(lf, MutableSequence): | |
| 290 r.extend(lf) | |
| 291 else: | |
| 292 r.append(lf) | |
| 293 except ValidationException as e: | |
| 294 errors.append(e.with_sourceline(SourceLine(doc, i, str))) | |
| 295 if errors: | |
| 296 raise ValidationException("", None, errors) | |
| 297 return r | |
| 298 | |
| 299 def __repr__(self): # type: () -> str | |
| 300 return "array<{}>".format(self.items) | |
| 301 | |
| 302 | |
| 303 class _EnumLoader(_Loader): | |
| 304 def __init__(self, symbols): | |
| 305 # type: (Sequence[Text]) -> None | |
| 306 self.symbols = symbols | |
| 307 | |
| 308 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 309 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 310 if doc in self.symbols: | |
| 311 return doc | |
| 312 else: | |
| 313 raise ValidationException("Expected one of {}".format(self.symbols)) | |
| 314 | |
| 315 | |
| 316 class _RecordLoader(_Loader): | |
| 317 def __init__(self, classtype): | |
| 318 # type: (Type[Savable]) -> None | |
| 319 self.classtype = classtype | |
| 320 | |
| 321 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 322 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 323 if not isinstance(doc, MutableMapping): | |
| 324 raise ValidationException("Expected a dict") | |
| 325 return self.classtype.fromDoc(doc, baseuri, loadingOptions, docRoot=docRoot) | |
| 326 | |
| 327 def __repr__(self): # type: () -> str | |
| 328 return str(self.classtype) | |
| 329 | |
| 330 | |
| 331 class _UnionLoader(_Loader): | |
| 332 def __init__(self, alternates): | |
| 333 # type: (Sequence[_Loader]) -> None | |
| 334 self.alternates = alternates | |
| 335 | |
| 336 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 337 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 338 errors = [] | |
| 339 for t in self.alternates: | |
| 340 try: | |
| 341 return t.load(doc, baseuri, loadingOptions, docRoot=docRoot) | |
| 342 except ValidationException as e: | |
| 343 errors.append( | |
| 344 ValidationException( | |
| 345 u"tried {} but".format(t.__class__.__name__), None, [e] | |
| 346 ) | |
| 347 ) | |
| 348 raise ValidationException("", None, errors, u"-") | |
| 349 | |
| 350 def __repr__(self): # type: () -> str | |
| 351 return " | ".join(str(a) for a in self.alternates) | |
| 352 | |
| 353 | |
| 354 class _URILoader(_Loader): | |
| 355 def __init__(self, inner, scoped_id, vocab_term, scoped_ref): | |
| 356 # type: (_Loader, bool, bool, Union[int, None]) -> None | |
| 357 self.inner = inner | |
| 358 self.scoped_id = scoped_id | |
| 359 self.vocab_term = vocab_term | |
| 360 self.scoped_ref = scoped_ref | |
| 361 | |
| 362 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 363 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 364 if isinstance(doc, MutableSequence): | |
| 365 doc = [ | |
| 366 expand_url( | |
| 367 i, | |
| 368 baseuri, | |
| 369 loadingOptions, | |
| 370 self.scoped_id, | |
| 371 self.vocab_term, | |
| 372 self.scoped_ref, | |
| 373 ) | |
| 374 for i in doc | |
| 375 ] | |
| 376 if isinstance(doc, string_types): | |
| 377 doc = expand_url( | |
| 378 doc, | |
| 379 baseuri, | |
| 380 loadingOptions, | |
| 381 self.scoped_id, | |
| 382 self.vocab_term, | |
| 383 self.scoped_ref, | |
| 384 ) | |
| 385 return self.inner.load(doc, baseuri, loadingOptions) | |
| 386 | |
| 387 | |
| 388 class _TypeDSLLoader(_Loader): | |
| 389 typeDSLregex = re.compile(r"^([^[?]+)(\[\])?(\?)?$") | |
| 390 | |
| 391 def __init__(self, inner, refScope): | |
| 392 # type: (_Loader, Union[int, None]) -> None | |
| 393 self.inner = inner | |
| 394 self.refScope = refScope | |
| 395 | |
| 396 def resolve(self, doc, baseuri, loadingOptions): | |
| 397 # type: (Any, Text, LoadingOptions) -> Any | |
| 398 m = self.typeDSLregex.match(doc) | |
| 399 if m: | |
| 400 first = expand_url( | |
| 401 m.group(1), baseuri, loadingOptions, False, True, self.refScope | |
| 402 ) | |
| 403 second = third = None | |
| 404 if bool(m.group(2)): | |
| 405 second = {"type": "array", "items": first} | |
| 406 # second = CommentedMap((("type", "array"), | |
| 407 # ("items", first))) | |
| 408 # second.lc.add_kv_line_col("type", lc) | |
| 409 # second.lc.add_kv_line_col("items", lc) | |
| 410 # second.lc.filename = filename | |
| 411 if bool(m.group(3)): | |
| 412 third = [u"null", second or first] | |
| 413 # third = CommentedSeq([u"null", second or first]) | |
| 414 # third.lc.add_kv_line_col(0, lc) | |
| 415 # third.lc.add_kv_line_col(1, lc) | |
| 416 # third.lc.filename = filename | |
| 417 doc = third or second or first | |
| 418 return doc | |
| 419 | |
| 420 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 421 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 422 if isinstance(doc, MutableSequence): | |
| 423 r = [] # type: List[Any] | |
| 424 for d in doc: | |
| 425 if isinstance(d, string_types): | |
| 426 resolved = self.resolve(d, baseuri, loadingOptions) | |
| 427 if isinstance(resolved, MutableSequence): | |
| 428 for i in resolved: | |
| 429 if i not in r: | |
| 430 r.append(i) | |
| 431 else: | |
| 432 if resolved not in r: | |
| 433 r.append(resolved) | |
| 434 else: | |
| 435 r.append(d) | |
| 436 doc = r | |
| 437 elif isinstance(doc, string_types): | |
| 438 doc = self.resolve(doc, baseuri, loadingOptions) | |
| 439 | |
| 440 return self.inner.load(doc, baseuri, loadingOptions) | |
| 441 | |
| 442 | |
| 443 class _IdMapLoader(_Loader): | |
| 444 def __init__(self, inner, mapSubject, mapPredicate): | |
| 445 # type: (_Loader, Text, Union[Text, None]) -> None | |
| 446 self.inner = inner | |
| 447 self.mapSubject = mapSubject | |
| 448 self.mapPredicate = mapPredicate | |
| 449 | |
| 450 def load(self, doc, baseuri, loadingOptions, docRoot=None): | |
| 451 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Any | |
| 452 if isinstance(doc, MutableMapping): | |
| 453 r = [] # type: List[Any] | |
| 454 for k in sorted(doc.keys()): | |
| 455 val = doc[k] | |
| 456 if isinstance(val, CommentedMap): | |
| 457 v = copy.copy(val) | |
| 458 v.lc.data = val.lc.data | |
| 459 v.lc.filename = val.lc.filename | |
| 460 v[self.mapSubject] = k | |
| 461 r.append(v) | |
| 462 elif isinstance(val, MutableMapping): | |
| 463 v2 = copy.copy(val) | |
| 464 v2[self.mapSubject] = k | |
| 465 r.append(v2) | |
| 466 else: | |
| 467 if self.mapPredicate: | |
| 468 v3 = {self.mapPredicate: val} | |
| 469 v3[self.mapSubject] = k | |
| 470 r.append(v3) | |
| 471 else: | |
| 472 raise ValidationException("No mapPredicate") | |
| 473 doc = r | |
| 474 return self.inner.load(doc, baseuri, loadingOptions) | |
| 475 | |
| 476 | |
| 477 def _document_load(loader, doc, baseuri, loadingOptions): | |
| 478 # type: (_Loader, Any, Text, LoadingOptions) -> Any | |
| 479 if isinstance(doc, string_types): | |
| 480 return _document_load_by_url( | |
| 481 loader, loadingOptions.fetcher.urljoin(baseuri, doc), loadingOptions | |
| 482 ) | |
| 483 | |
| 484 if isinstance(doc, MutableMapping): | |
| 485 if "$namespaces" in doc: | |
| 486 loadingOptions = LoadingOptions( | |
| 487 copyfrom=loadingOptions, namespaces=doc["$namespaces"] | |
| 488 ) | |
| 489 doc = {k: v for k, v in doc.items() if k != "$namespaces"} | |
| 490 | |
| 491 if "$schemas" in doc: | |
| 492 loadingOptions = LoadingOptions( | |
| 493 copyfrom=loadingOptions, schemas=doc["$schemas"] | |
| 494 ) | |
| 495 doc = {k: v for k, v in doc.items() if k != "$schemas"} | |
| 496 | |
| 497 if "$base" in doc: | |
| 498 baseuri = doc["$base"] | |
| 499 | |
| 500 if "$graph" in doc: | |
| 501 return loader.load(doc["$graph"], baseuri, loadingOptions) | |
| 502 else: | |
| 503 return loader.load(doc, baseuri, loadingOptions, docRoot=baseuri) | |
| 504 | |
| 505 if isinstance(doc, MutableSequence): | |
| 506 return loader.load(doc, baseuri, loadingOptions) | |
| 507 | |
| 508 raise ValidationException("Oops, we shouldn't be here!") | |
| 509 | |
| 510 | |
| 511 def _document_load_by_url(loader, url, loadingOptions): | |
| 512 # type: (_Loader, Text, LoadingOptions) -> Any | |
| 513 if url in loadingOptions.idx: | |
| 514 return _document_load(loader, loadingOptions.idx[url], url, loadingOptions) | |
| 515 | |
| 516 text = loadingOptions.fetcher.fetch_text(url) | |
| 517 if isinstance(text, bytes): | |
| 518 textIO = StringIO(text.decode("utf-8")) | |
| 519 else: | |
| 520 textIO = StringIO(text) | |
| 521 textIO.name = str(url) | |
| 522 result = yaml.round_trip_load(textIO, preserve_quotes=True) | |
| 523 add_lc_filename(result, url) | |
| 524 | |
| 525 loadingOptions.idx[url] = result | |
| 526 | |
| 527 loadingOptions = LoadingOptions(copyfrom=loadingOptions, fileuri=url) | |
| 528 | |
| 529 return _document_load(loader, result, url, loadingOptions) | |
| 530 | |
| 531 | |
| 532 def file_uri(path, split_frag=False): # type: (str, bool) -> str | |
| 533 if path.startswith("file://"): | |
| 534 return path | |
| 535 if split_frag: | |
| 536 pathsp = path.split("#", 2) | |
| 537 frag = "#" + urllib.parse.quote(str(pathsp[1])) if len(pathsp) == 2 else "" | |
| 538 urlpath = urllib.request.pathname2url(str(pathsp[0])) | |
| 539 else: | |
| 540 urlpath = urllib.request.pathname2url(path) | |
| 541 frag = "" | |
| 542 if urlpath.startswith("//"): | |
| 543 return "file:{}{}".format(urlpath, frag) | |
| 544 else: | |
| 545 return "file://{}{}".format(urlpath, frag) | |
| 546 | |
| 547 | |
| 548 def prefix_url(url, namespaces): # type: (Text, Dict[Text, Text]) -> Text | |
| 549 for k, v in namespaces.items(): | |
| 550 if url.startswith(v): | |
| 551 return k + ":" + url[len(v) :] | |
| 552 return url | |
| 553 | |
| 554 | |
| 555 def save_relative_uri(uri, base_url, scoped_id, ref_scope, relative_uris): | |
| 556 # type: (Text, Text, bool, Optional[int], bool) -> Union[Text, List[Text]] | |
| 557 if not relative_uris: | |
| 558 return uri | |
| 559 if isinstance(uri, MutableSequence): | |
| 560 return [ | |
| 561 save_relative_uri(u, base_url, scoped_id, ref_scope, relative_uris) | |
| 562 for u in uri | |
| 563 ] | |
| 564 elif isinstance(uri, text_type): | |
| 565 urisplit = urllib.parse.urlsplit(uri) | |
| 566 basesplit = urllib.parse.urlsplit(base_url) | |
| 567 if urisplit.scheme == basesplit.scheme and urisplit.netloc == basesplit.netloc: | |
| 568 if urisplit.path != basesplit.path: | |
| 569 p = os.path.relpath(urisplit.path, os.path.dirname(basesplit.path)) | |
| 570 if urisplit.fragment: | |
| 571 p = p + "#" + urisplit.fragment | |
| 572 return p | |
| 573 | |
| 574 basefrag = basesplit.fragment + "/" | |
| 575 if ref_scope: | |
| 576 sp = basefrag.split("/") | |
| 577 i = 0 | |
| 578 while i < ref_scope: | |
| 579 sp.pop() | |
| 580 i += 1 | |
| 581 basefrag = "/".join(sp) | |
| 582 | |
| 583 if urisplit.fragment.startswith(basefrag): | |
| 584 return urisplit.fragment[len(basefrag) :] | |
| 585 else: | |
| 586 return urisplit.fragment | |
| 587 return uri | |
| 588 else: | |
| 589 return save(uri, top=False, base_url=base_url) | |
| 590 | |
| 591 | |
| 592 class Documented(Savable): | |
| 593 pass | |
| 594 | |
| 595 | |
| 596 class RecordField(Documented): | |
| 597 """ | |
| 598 A field of a record. | |
| 599 """ | |
| 600 def __init__( | |
| 601 self, | |
| 602 doc, # type: Any | |
| 603 name, # type: Any | |
| 604 type, # type: Any | |
| 605 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 606 loadingOptions=None # type: Optional[LoadingOptions] | |
| 607 ): # type: (...) -> None | |
| 608 | |
| 609 if extension_fields: | |
| 610 self.extension_fields = extension_fields | |
| 611 else: | |
| 612 self.extension_fields = yaml.comments.CommentedMap() | |
| 613 if loadingOptions: | |
| 614 self.loadingOptions = loadingOptions | |
| 615 else: | |
| 616 self.loadingOptions = LoadingOptions() | |
| 617 self.doc = doc | |
| 618 self.name = name | |
| 619 self.type = type | |
| 620 | |
| 621 @classmethod | |
| 622 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 623 # type: (Any, Text, LoadingOptions, Optional[Text]) -> RecordField | |
| 624 | |
| 625 _doc = copy.copy(doc) | |
| 626 if hasattr(doc, 'lc'): | |
| 627 _doc.lc.data = doc.lc.data | |
| 628 _doc.lc.filename = doc.lc.filename | |
| 629 errors = [] | |
| 630 if 'name' in _doc: | |
| 631 try: | |
| 632 name = load_field(_doc.get( | |
| 633 'name'), uri_strtype_True_False_None, baseuri, loadingOptions) | |
| 634 except ValidationException as e: | |
| 635 errors.append( | |
| 636 ValidationException( | |
| 637 "the `name` field is not valid because:", | |
| 638 SourceLine(_doc, 'name', str), | |
| 639 [e] | |
| 640 ) | |
| 641 ) | |
| 642 else: | |
| 643 name = None | |
| 644 | |
| 645 if name is None: | |
| 646 if docRoot is not None: | |
| 647 name = docRoot | |
| 648 else: | |
| 649 raise ValidationException("Missing name") | |
| 650 baseuri = name | |
| 651 if 'doc' in _doc: | |
| 652 try: | |
| 653 doc = load_field(_doc.get( | |
| 654 'doc'), union_of_None_type_or_strtype_or_array_of_strtype, baseuri, loadingOptions) | |
| 655 except ValidationException as e: | |
| 656 errors.append( | |
| 657 ValidationException( | |
| 658 "the `doc` field is not valid because:", | |
| 659 SourceLine(_doc, 'doc', str), | |
| 660 [e] | |
| 661 ) | |
| 662 ) | |
| 663 else: | |
| 664 doc = None | |
| 665 try: | |
| 666 type = load_field(_doc.get( | |
| 667 'type'), typedsl_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_2, baseuri, loadingOptions) | |
| 668 except ValidationException as e: | |
| 669 errors.append( | |
| 670 ValidationException( | |
| 671 "the `type` field is not valid because:", | |
| 672 SourceLine(_doc, 'type', str), | |
| 673 [e] | |
| 674 ) | |
| 675 ) | |
| 676 | |
| 677 extension_fields = yaml.comments.CommentedMap() | |
| 678 for k in _doc.keys(): | |
| 679 if k not in cls.attrs: | |
| 680 if ":" in k: | |
| 681 ex = expand_url(k, | |
| 682 u"", | |
| 683 loadingOptions, | |
| 684 scoped_id=False, | |
| 685 vocab_term=False) | |
| 686 extension_fields[ex] = _doc[k] | |
| 687 else: | |
| 688 errors.append( | |
| 689 ValidationException( | |
| 690 "invalid field `%s`, expected one of: `doc`, `name`, `type`" % (k), | |
| 691 SourceLine(_doc, k, str) | |
| 692 ) | |
| 693 ) | |
| 694 break | |
| 695 | |
| 696 if errors: | |
| 697 raise ValidationException("Trying 'RecordField'", None, errors) | |
| 698 loadingOptions = copy.deepcopy(loadingOptions) | |
| 699 loadingOptions.original_doc = _doc | |
| 700 return cls(doc, name, type, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 701 | |
| 702 def save(self, top=False, base_url="", relative_uris=True): | |
| 703 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 704 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 705 for ef in self.extension_fields: | |
| 706 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 707 | |
| 708 if self.name is not None: | |
| 709 u = save_relative_uri( | |
| 710 self.name, | |
| 711 base_url, | |
| 712 True, | |
| 713 None, | |
| 714 relative_uris) | |
| 715 if u: | |
| 716 r['name'] = u | |
| 717 | |
| 718 if self.doc is not None: | |
| 719 r['doc'] = save( | |
| 720 self.doc, | |
| 721 top=False, | |
| 722 base_url=self.name, | |
| 723 relative_uris=relative_uris) | |
| 724 | |
| 725 if self.type is not None: | |
| 726 r['type'] = save( | |
| 727 self.type, | |
| 728 top=False, | |
| 729 base_url=self.name, | |
| 730 relative_uris=relative_uris) | |
| 731 | |
| 732 if top and self.loadingOptions.namespaces: | |
| 733 r["$namespaces"] = self.loadingOptions.namespaces | |
| 734 | |
| 735 return r | |
| 736 | |
| 737 attrs = frozenset(['doc', 'name', 'type']) | |
| 738 | |
| 739 | |
| 740 class RecordSchema(Savable): | |
| 741 def __init__( | |
| 742 self, | |
| 743 fields, # type: Any | |
| 744 type, # type: Any | |
| 745 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 746 loadingOptions=None # type: Optional[LoadingOptions] | |
| 747 ): # type: (...) -> None | |
| 748 | |
| 749 if extension_fields: | |
| 750 self.extension_fields = extension_fields | |
| 751 else: | |
| 752 self.extension_fields = yaml.comments.CommentedMap() | |
| 753 if loadingOptions: | |
| 754 self.loadingOptions = loadingOptions | |
| 755 else: | |
| 756 self.loadingOptions = LoadingOptions() | |
| 757 self.fields = fields | |
| 758 self.type = type | |
| 759 | |
| 760 @classmethod | |
| 761 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 762 # type: (Any, Text, LoadingOptions, Optional[Text]) -> RecordSchema | |
| 763 | |
| 764 _doc = copy.copy(doc) | |
| 765 if hasattr(doc, 'lc'): | |
| 766 _doc.lc.data = doc.lc.data | |
| 767 _doc.lc.filename = doc.lc.filename | |
| 768 errors = [] | |
| 769 if 'fields' in _doc: | |
| 770 try: | |
| 771 fields = load_field(_doc.get( | |
| 772 'fields'), idmap_fields_union_of_None_type_or_array_of_RecordFieldLoader, baseuri, loadingOptions) | |
| 773 except ValidationException as e: | |
| 774 errors.append( | |
| 775 ValidationException( | |
| 776 "the `fields` field is not valid because:", | |
| 777 SourceLine(_doc, 'fields', str), | |
| 778 [e] | |
| 779 ) | |
| 780 ) | |
| 781 else: | |
| 782 fields = None | |
| 783 try: | |
| 784 type = load_field(_doc.get( | |
| 785 'type'), typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2, baseuri, loadingOptions) | |
| 786 except ValidationException as e: | |
| 787 errors.append( | |
| 788 ValidationException( | |
| 789 "the `type` field is not valid because:", | |
| 790 SourceLine(_doc, 'type', str), | |
| 791 [e] | |
| 792 ) | |
| 793 ) | |
| 794 | |
| 795 extension_fields = yaml.comments.CommentedMap() | |
| 796 for k in _doc.keys(): | |
| 797 if k not in cls.attrs: | |
| 798 if ":" in k: | |
| 799 ex = expand_url(k, | |
| 800 u"", | |
| 801 loadingOptions, | |
| 802 scoped_id=False, | |
| 803 vocab_term=False) | |
| 804 extension_fields[ex] = _doc[k] | |
| 805 else: | |
| 806 errors.append( | |
| 807 ValidationException( | |
| 808 "invalid field `%s`, expected one of: `fields`, `type`" % (k), | |
| 809 SourceLine(_doc, k, str) | |
| 810 ) | |
| 811 ) | |
| 812 break | |
| 813 | |
| 814 if errors: | |
| 815 raise ValidationException("Trying 'RecordSchema'", None, errors) | |
| 816 loadingOptions = copy.deepcopy(loadingOptions) | |
| 817 loadingOptions.original_doc = _doc | |
| 818 return cls(fields, type, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 819 | |
| 820 def save(self, top=False, base_url="", relative_uris=True): | |
| 821 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 822 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 823 for ef in self.extension_fields: | |
| 824 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 825 | |
| 826 if self.fields is not None: | |
| 827 r['fields'] = save( | |
| 828 self.fields, | |
| 829 top=False, | |
| 830 base_url=base_url, | |
| 831 relative_uris=relative_uris) | |
| 832 | |
| 833 if self.type is not None: | |
| 834 r['type'] = save( | |
| 835 self.type, | |
| 836 top=False, | |
| 837 base_url=base_url, | |
| 838 relative_uris=relative_uris) | |
| 839 | |
| 840 if top and self.loadingOptions.namespaces: | |
| 841 r["$namespaces"] = self.loadingOptions.namespaces | |
| 842 | |
| 843 return r | |
| 844 | |
| 845 attrs = frozenset(['fields', 'type']) | |
| 846 | |
| 847 | |
| 848 class EnumSchema(Savable): | |
| 849 """ | |
| 850 Define an enumerated type. | |
| 851 | |
| 852 """ | |
| 853 def __init__( | |
| 854 self, | |
| 855 symbols, # type: Any | |
| 856 type, # type: Any | |
| 857 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 858 loadingOptions=None # type: Optional[LoadingOptions] | |
| 859 ): # type: (...) -> None | |
| 860 | |
| 861 if extension_fields: | |
| 862 self.extension_fields = extension_fields | |
| 863 else: | |
| 864 self.extension_fields = yaml.comments.CommentedMap() | |
| 865 if loadingOptions: | |
| 866 self.loadingOptions = loadingOptions | |
| 867 else: | |
| 868 self.loadingOptions = LoadingOptions() | |
| 869 self.symbols = symbols | |
| 870 self.type = type | |
| 871 | |
| 872 @classmethod | |
| 873 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 874 # type: (Any, Text, LoadingOptions, Optional[Text]) -> EnumSchema | |
| 875 | |
| 876 _doc = copy.copy(doc) | |
| 877 if hasattr(doc, 'lc'): | |
| 878 _doc.lc.data = doc.lc.data | |
| 879 _doc.lc.filename = doc.lc.filename | |
| 880 errors = [] | |
| 881 try: | |
| 882 symbols = load_field(_doc.get( | |
| 883 'symbols'), uri_array_of_strtype_True_False_None, baseuri, loadingOptions) | |
| 884 except ValidationException as e: | |
| 885 errors.append( | |
| 886 ValidationException( | |
| 887 "the `symbols` field is not valid because:", | |
| 888 SourceLine(_doc, 'symbols', str), | |
| 889 [e] | |
| 890 ) | |
| 891 ) | |
| 892 try: | |
| 893 type = load_field(_doc.get( | |
| 894 'type'), typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2, baseuri, loadingOptions) | |
| 895 except ValidationException as e: | |
| 896 errors.append( | |
| 897 ValidationException( | |
| 898 "the `type` field is not valid because:", | |
| 899 SourceLine(_doc, 'type', str), | |
| 900 [e] | |
| 901 ) | |
| 902 ) | |
| 903 | |
| 904 extension_fields = yaml.comments.CommentedMap() | |
| 905 for k in _doc.keys(): | |
| 906 if k not in cls.attrs: | |
| 907 if ":" in k: | |
| 908 ex = expand_url(k, | |
| 909 u"", | |
| 910 loadingOptions, | |
| 911 scoped_id=False, | |
| 912 vocab_term=False) | |
| 913 extension_fields[ex] = _doc[k] | |
| 914 else: | |
| 915 errors.append( | |
| 916 ValidationException( | |
| 917 "invalid field `%s`, expected one of: `symbols`, `type`" % (k), | |
| 918 SourceLine(_doc, k, str) | |
| 919 ) | |
| 920 ) | |
| 921 break | |
| 922 | |
| 923 if errors: | |
| 924 raise ValidationException("Trying 'EnumSchema'", None, errors) | |
| 925 loadingOptions = copy.deepcopy(loadingOptions) | |
| 926 loadingOptions.original_doc = _doc | |
| 927 return cls(symbols, type, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 928 | |
| 929 def save(self, top=False, base_url="", relative_uris=True): | |
| 930 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 931 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 932 for ef in self.extension_fields: | |
| 933 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 934 | |
| 935 if self.symbols is not None: | |
| 936 u = save_relative_uri( | |
| 937 self.symbols, | |
| 938 base_url, | |
| 939 True, | |
| 940 None, | |
| 941 relative_uris) | |
| 942 if u: | |
| 943 r['symbols'] = u | |
| 944 | |
| 945 if self.type is not None: | |
| 946 r['type'] = save( | |
| 947 self.type, | |
| 948 top=False, | |
| 949 base_url=base_url, | |
| 950 relative_uris=relative_uris) | |
| 951 | |
| 952 if top and self.loadingOptions.namespaces: | |
| 953 r["$namespaces"] = self.loadingOptions.namespaces | |
| 954 | |
| 955 return r | |
| 956 | |
| 957 attrs = frozenset(['symbols', 'type']) | |
| 958 | |
| 959 | |
| 960 class ArraySchema(Savable): | |
| 961 def __init__( | |
| 962 self, | |
| 963 items, # type: Any | |
| 964 type, # type: Any | |
| 965 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 966 loadingOptions=None # type: Optional[LoadingOptions] | |
| 967 ): # type: (...) -> None | |
| 968 | |
| 969 if extension_fields: | |
| 970 self.extension_fields = extension_fields | |
| 971 else: | |
| 972 self.extension_fields = yaml.comments.CommentedMap() | |
| 973 if loadingOptions: | |
| 974 self.loadingOptions = loadingOptions | |
| 975 else: | |
| 976 self.loadingOptions = LoadingOptions() | |
| 977 self.items = items | |
| 978 self.type = type | |
| 979 | |
| 980 @classmethod | |
| 981 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 982 # type: (Any, Text, LoadingOptions, Optional[Text]) -> ArraySchema | |
| 983 | |
| 984 _doc = copy.copy(doc) | |
| 985 if hasattr(doc, 'lc'): | |
| 986 _doc.lc.data = doc.lc.data | |
| 987 _doc.lc.filename = doc.lc.filename | |
| 988 errors = [] | |
| 989 try: | |
| 990 items = load_field(_doc.get( | |
| 991 'items'), uri_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_False_True_2, baseuri, loadingOptions) | |
| 992 except ValidationException as e: | |
| 993 errors.append( | |
| 994 ValidationException( | |
| 995 "the `items` field is not valid because:", | |
| 996 SourceLine(_doc, 'items', str), | |
| 997 [e] | |
| 998 ) | |
| 999 ) | |
| 1000 try: | |
| 1001 type = load_field(_doc.get( | |
| 1002 'type'), typedsl_enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader_2, baseuri, loadingOptions) | |
| 1003 except ValidationException as e: | |
| 1004 errors.append( | |
| 1005 ValidationException( | |
| 1006 "the `type` field is not valid because:", | |
| 1007 SourceLine(_doc, 'type', str), | |
| 1008 [e] | |
| 1009 ) | |
| 1010 ) | |
| 1011 | |
| 1012 extension_fields = yaml.comments.CommentedMap() | |
| 1013 for k in _doc.keys(): | |
| 1014 if k not in cls.attrs: | |
| 1015 if ":" in k: | |
| 1016 ex = expand_url(k, | |
| 1017 u"", | |
| 1018 loadingOptions, | |
| 1019 scoped_id=False, | |
| 1020 vocab_term=False) | |
| 1021 extension_fields[ex] = _doc[k] | |
| 1022 else: | |
| 1023 errors.append( | |
| 1024 ValidationException( | |
| 1025 "invalid field `%s`, expected one of: `items`, `type`" % (k), | |
| 1026 SourceLine(_doc, k, str) | |
| 1027 ) | |
| 1028 ) | |
| 1029 break | |
| 1030 | |
| 1031 if errors: | |
| 1032 raise ValidationException("Trying 'ArraySchema'", None, errors) | |
| 1033 loadingOptions = copy.deepcopy(loadingOptions) | |
| 1034 loadingOptions.original_doc = _doc | |
| 1035 return cls(items, type, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 1036 | |
| 1037 def save(self, top=False, base_url="", relative_uris=True): | |
| 1038 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 1039 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 1040 for ef in self.extension_fields: | |
| 1041 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 1042 | |
| 1043 if self.items is not None: | |
| 1044 u = save_relative_uri( | |
| 1045 self.items, | |
| 1046 base_url, | |
| 1047 False, | |
| 1048 2, | |
| 1049 relative_uris) | |
| 1050 if u: | |
| 1051 r['items'] = u | |
| 1052 | |
| 1053 if self.type is not None: | |
| 1054 r['type'] = save( | |
| 1055 self.type, | |
| 1056 top=False, | |
| 1057 base_url=base_url, | |
| 1058 relative_uris=relative_uris) | |
| 1059 | |
| 1060 if top and self.loadingOptions.namespaces: | |
| 1061 r["$namespaces"] = self.loadingOptions.namespaces | |
| 1062 | |
| 1063 return r | |
| 1064 | |
| 1065 attrs = frozenset(['items', 'type']) | |
| 1066 | |
| 1067 | |
| 1068 class JsonldPredicate(Savable): | |
| 1069 """ | |
| 1070 Attached to a record field to define how the parent record field is handled for | |
| 1071 URI resolution and JSON-LD context generation. | |
| 1072 | |
| 1073 """ | |
| 1074 def __init__( | |
| 1075 self, | |
| 1076 _id, # type: Any | |
| 1077 _type, # type: Any | |
| 1078 _container, # type: Any | |
| 1079 identity, # type: Any | |
| 1080 noLinkCheck, # type: Any | |
| 1081 mapSubject, # type: Any | |
| 1082 mapPredicate, # type: Any | |
| 1083 refScope, # type: Any | |
| 1084 typeDSL, # type: Any | |
| 1085 secondaryFilesDSL, # type: Any | |
| 1086 subscope, # type: Any | |
| 1087 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 1088 loadingOptions=None # type: Optional[LoadingOptions] | |
| 1089 ): # type: (...) -> None | |
| 1090 | |
| 1091 if extension_fields: | |
| 1092 self.extension_fields = extension_fields | |
| 1093 else: | |
| 1094 self.extension_fields = yaml.comments.CommentedMap() | |
| 1095 if loadingOptions: | |
| 1096 self.loadingOptions = loadingOptions | |
| 1097 else: | |
| 1098 self.loadingOptions = LoadingOptions() | |
| 1099 self._id = _id | |
| 1100 self._type = _type | |
| 1101 self._container = _container | |
| 1102 self.identity = identity | |
| 1103 self.noLinkCheck = noLinkCheck | |
| 1104 self.mapSubject = mapSubject | |
| 1105 self.mapPredicate = mapPredicate | |
| 1106 self.refScope = refScope | |
| 1107 self.typeDSL = typeDSL | |
| 1108 self.secondaryFilesDSL = secondaryFilesDSL | |
| 1109 self.subscope = subscope | |
| 1110 | |
| 1111 @classmethod | |
| 1112 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 1113 # type: (Any, Text, LoadingOptions, Optional[Text]) -> JsonldPredicate | |
| 1114 | |
| 1115 _doc = copy.copy(doc) | |
| 1116 if hasattr(doc, 'lc'): | |
| 1117 _doc.lc.data = doc.lc.data | |
| 1118 _doc.lc.filename = doc.lc.filename | |
| 1119 errors = [] | |
| 1120 if '_id' in _doc: | |
| 1121 try: | |
| 1122 _id = load_field(_doc.get( | |
| 1123 '_id'), uri_union_of_None_type_or_strtype_True_False_None, baseuri, loadingOptions) | |
| 1124 except ValidationException as e: | |
| 1125 errors.append( | |
| 1126 ValidationException( | |
| 1127 "the `_id` field is not valid because:", | |
| 1128 SourceLine(_doc, '_id', str), | |
| 1129 [e] | |
| 1130 ) | |
| 1131 ) | |
| 1132 else: | |
| 1133 _id = None | |
| 1134 if '_type' in _doc: | |
| 1135 try: | |
| 1136 _type = load_field(_doc.get( | |
| 1137 '_type'), union_of_None_type_or_strtype, baseuri, loadingOptions) | |
| 1138 except ValidationException as e: | |
| 1139 errors.append( | |
| 1140 ValidationException( | |
| 1141 "the `_type` field is not valid because:", | |
| 1142 SourceLine(_doc, '_type', str), | |
| 1143 [e] | |
| 1144 ) | |
| 1145 ) | |
| 1146 else: | |
| 1147 _type = None | |
| 1148 if '_container' in _doc: | |
| 1149 try: | |
| 1150 _container = load_field(_doc.get( | |
| 1151 '_container'), union_of_None_type_or_strtype, baseuri, loadingOptions) | |
| 1152 except ValidationException as e: | |
| 1153 errors.append( | |
| 1154 ValidationException( | |
| 1155 "the `_container` field is not valid because:", | |
| 1156 SourceLine(_doc, '_container', str), | |
| 1157 [e] | |
| 1158 ) | |
| 1159 ) | |
| 1160 else: | |
| 1161 _container = None | |
| 1162 if 'identity' in _doc: | |
| 1163 try: | |
| 1164 identity = load_field(_doc.get( | |
| 1165 'identity'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1166 except ValidationException as e: | |
| 1167 errors.append( | |
| 1168 ValidationException( | |
| 1169 "the `identity` field is not valid because:", | |
| 1170 SourceLine(_doc, 'identity', str), | |
| 1171 [e] | |
| 1172 ) | |
| 1173 ) | |
| 1174 else: | |
| 1175 identity = None | |
| 1176 if 'noLinkCheck' in _doc: | |
| 1177 try: | |
| 1178 noLinkCheck = load_field(_doc.get( | |
| 1179 'noLinkCheck'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1180 except ValidationException as e: | |
| 1181 errors.append( | |
| 1182 ValidationException( | |
| 1183 "the `noLinkCheck` field is not valid because:", | |
| 1184 SourceLine(_doc, 'noLinkCheck', str), | |
| 1185 [e] | |
| 1186 ) | |
| 1187 ) | |
| 1188 else: | |
| 1189 noLinkCheck = None | |
| 1190 if 'mapSubject' in _doc: | |
| 1191 try: | |
| 1192 mapSubject = load_field(_doc.get( | |
| 1193 'mapSubject'), union_of_None_type_or_strtype, baseuri, loadingOptions) | |
| 1194 except ValidationException as e: | |
| 1195 errors.append( | |
| 1196 ValidationException( | |
| 1197 "the `mapSubject` field is not valid because:", | |
| 1198 SourceLine(_doc, 'mapSubject', str), | |
| 1199 [e] | |
| 1200 ) | |
| 1201 ) | |
| 1202 else: | |
| 1203 mapSubject = None | |
| 1204 if 'mapPredicate' in _doc: | |
| 1205 try: | |
| 1206 mapPredicate = load_field(_doc.get( | |
| 1207 'mapPredicate'), union_of_None_type_or_strtype, baseuri, loadingOptions) | |
| 1208 except ValidationException as e: | |
| 1209 errors.append( | |
| 1210 ValidationException( | |
| 1211 "the `mapPredicate` field is not valid because:", | |
| 1212 SourceLine(_doc, 'mapPredicate', str), | |
| 1213 [e] | |
| 1214 ) | |
| 1215 ) | |
| 1216 else: | |
| 1217 mapPredicate = None | |
| 1218 if 'refScope' in _doc: | |
| 1219 try: | |
| 1220 refScope = load_field(_doc.get( | |
| 1221 'refScope'), union_of_None_type_or_inttype, baseuri, loadingOptions) | |
| 1222 except ValidationException as e: | |
| 1223 errors.append( | |
| 1224 ValidationException( | |
| 1225 "the `refScope` field is not valid because:", | |
| 1226 SourceLine(_doc, 'refScope', str), | |
| 1227 [e] | |
| 1228 ) | |
| 1229 ) | |
| 1230 else: | |
| 1231 refScope = None | |
| 1232 if 'typeDSL' in _doc: | |
| 1233 try: | |
| 1234 typeDSL = load_field(_doc.get( | |
| 1235 'typeDSL'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1236 except ValidationException as e: | |
| 1237 errors.append( | |
| 1238 ValidationException( | |
| 1239 "the `typeDSL` field is not valid because:", | |
| 1240 SourceLine(_doc, 'typeDSL', str), | |
| 1241 [e] | |
| 1242 ) | |
| 1243 ) | |
| 1244 else: | |
| 1245 typeDSL = None | |
| 1246 if 'secondaryFilesDSL' in _doc: | |
| 1247 try: | |
| 1248 secondaryFilesDSL = load_field(_doc.get( | |
| 1249 'secondaryFilesDSL'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1250 except ValidationException as e: | |
| 1251 errors.append( | |
| 1252 ValidationException( | |
| 1253 "the `secondaryFilesDSL` field is not valid because:", | |
| 1254 SourceLine(_doc, 'secondaryFilesDSL', str), | |
| 1255 [e] | |
| 1256 ) | |
| 1257 ) | |
| 1258 else: | |
| 1259 secondaryFilesDSL = None | |
| 1260 if 'subscope' in _doc: | |
| 1261 try: | |
| 1262 subscope = load_field(_doc.get( | |
| 1263 'subscope'), union_of_None_type_or_strtype, baseuri, loadingOptions) | |
| 1264 except ValidationException as e: | |
| 1265 errors.append( | |
| 1266 ValidationException( | |
| 1267 "the `subscope` field is not valid because:", | |
| 1268 SourceLine(_doc, 'subscope', str), | |
| 1269 [e] | |
| 1270 ) | |
| 1271 ) | |
| 1272 else: | |
| 1273 subscope = None | |
| 1274 | |
| 1275 extension_fields = yaml.comments.CommentedMap() | |
| 1276 for k in _doc.keys(): | |
| 1277 if k not in cls.attrs: | |
| 1278 if ":" in k: | |
| 1279 ex = expand_url(k, | |
| 1280 u"", | |
| 1281 loadingOptions, | |
| 1282 scoped_id=False, | |
| 1283 vocab_term=False) | |
| 1284 extension_fields[ex] = _doc[k] | |
| 1285 else: | |
| 1286 errors.append( | |
| 1287 ValidationException( | |
| 1288 "invalid field `%s`, expected one of: `_id`, `_type`, `_container`, `identity`, `noLinkCheck`, `mapSubject`, `mapPredicate`, `refScope`, `typeDSL`, `secondaryFilesDSL`, `subscope`" % (k), | |
| 1289 SourceLine(_doc, k, str) | |
| 1290 ) | |
| 1291 ) | |
| 1292 break | |
| 1293 | |
| 1294 if errors: | |
| 1295 raise ValidationException("Trying 'JsonldPredicate'", None, errors) | |
| 1296 loadingOptions = copy.deepcopy(loadingOptions) | |
| 1297 loadingOptions.original_doc = _doc | |
| 1298 return cls(_id, _type, _container, identity, noLinkCheck, mapSubject, mapPredicate, refScope, typeDSL, secondaryFilesDSL, subscope, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 1299 | |
| 1300 def save(self, top=False, base_url="", relative_uris=True): | |
| 1301 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 1302 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 1303 for ef in self.extension_fields: | |
| 1304 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 1305 | |
| 1306 if self._id is not None: | |
| 1307 u = save_relative_uri( | |
| 1308 self._id, | |
| 1309 base_url, | |
| 1310 True, | |
| 1311 None, | |
| 1312 relative_uris) | |
| 1313 if u: | |
| 1314 r['_id'] = u | |
| 1315 | |
| 1316 if self._type is not None: | |
| 1317 r['_type'] = save( | |
| 1318 self._type, | |
| 1319 top=False, | |
| 1320 base_url=base_url, | |
| 1321 relative_uris=relative_uris) | |
| 1322 | |
| 1323 if self._container is not None: | |
| 1324 r['_container'] = save( | |
| 1325 self._container, | |
| 1326 top=False, | |
| 1327 base_url=base_url, | |
| 1328 relative_uris=relative_uris) | |
| 1329 | |
| 1330 if self.identity is not None: | |
| 1331 r['identity'] = save( | |
| 1332 self.identity, | |
| 1333 top=False, | |
| 1334 base_url=base_url, | |
| 1335 relative_uris=relative_uris) | |
| 1336 | |
| 1337 if self.noLinkCheck is not None: | |
| 1338 r['noLinkCheck'] = save( | |
| 1339 self.noLinkCheck, | |
| 1340 top=False, | |
| 1341 base_url=base_url, | |
| 1342 relative_uris=relative_uris) | |
| 1343 | |
| 1344 if self.mapSubject is not None: | |
| 1345 r['mapSubject'] = save( | |
| 1346 self.mapSubject, | |
| 1347 top=False, | |
| 1348 base_url=base_url, | |
| 1349 relative_uris=relative_uris) | |
| 1350 | |
| 1351 if self.mapPredicate is not None: | |
| 1352 r['mapPredicate'] = save( | |
| 1353 self.mapPredicate, | |
| 1354 top=False, | |
| 1355 base_url=base_url, | |
| 1356 relative_uris=relative_uris) | |
| 1357 | |
| 1358 if self.refScope is not None: | |
| 1359 r['refScope'] = save( | |
| 1360 self.refScope, | |
| 1361 top=False, | |
| 1362 base_url=base_url, | |
| 1363 relative_uris=relative_uris) | |
| 1364 | |
| 1365 if self.typeDSL is not None: | |
| 1366 r['typeDSL'] = save( | |
| 1367 self.typeDSL, | |
| 1368 top=False, | |
| 1369 base_url=base_url, | |
| 1370 relative_uris=relative_uris) | |
| 1371 | |
| 1372 if self.secondaryFilesDSL is not None: | |
| 1373 r['secondaryFilesDSL'] = save( | |
| 1374 self.secondaryFilesDSL, | |
| 1375 top=False, | |
| 1376 base_url=base_url, | |
| 1377 relative_uris=relative_uris) | |
| 1378 | |
| 1379 if self.subscope is not None: | |
| 1380 r['subscope'] = save( | |
| 1381 self.subscope, | |
| 1382 top=False, | |
| 1383 base_url=base_url, | |
| 1384 relative_uris=relative_uris) | |
| 1385 | |
| 1386 if top and self.loadingOptions.namespaces: | |
| 1387 r["$namespaces"] = self.loadingOptions.namespaces | |
| 1388 | |
| 1389 return r | |
| 1390 | |
| 1391 attrs = frozenset(['_id', '_type', '_container', 'identity', 'noLinkCheck', 'mapSubject', 'mapPredicate', 'refScope', 'typeDSL', 'secondaryFilesDSL', 'subscope']) | |
| 1392 | |
| 1393 | |
| 1394 class SpecializeDef(Savable): | |
| 1395 def __init__( | |
| 1396 self, | |
| 1397 specializeFrom, # type: Any | |
| 1398 specializeTo, # type: Any | |
| 1399 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 1400 loadingOptions=None # type: Optional[LoadingOptions] | |
| 1401 ): # type: (...) -> None | |
| 1402 | |
| 1403 if extension_fields: | |
| 1404 self.extension_fields = extension_fields | |
| 1405 else: | |
| 1406 self.extension_fields = yaml.comments.CommentedMap() | |
| 1407 if loadingOptions: | |
| 1408 self.loadingOptions = loadingOptions | |
| 1409 else: | |
| 1410 self.loadingOptions = LoadingOptions() | |
| 1411 self.specializeFrom = specializeFrom | |
| 1412 self.specializeTo = specializeTo | |
| 1413 | |
| 1414 @classmethod | |
| 1415 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 1416 # type: (Any, Text, LoadingOptions, Optional[Text]) -> SpecializeDef | |
| 1417 | |
| 1418 _doc = copy.copy(doc) | |
| 1419 if hasattr(doc, 'lc'): | |
| 1420 _doc.lc.data = doc.lc.data | |
| 1421 _doc.lc.filename = doc.lc.filename | |
| 1422 errors = [] | |
| 1423 try: | |
| 1424 specializeFrom = load_field(_doc.get( | |
| 1425 'specializeFrom'), uri_strtype_False_False_1, baseuri, loadingOptions) | |
| 1426 except ValidationException as e: | |
| 1427 errors.append( | |
| 1428 ValidationException( | |
| 1429 "the `specializeFrom` field is not valid because:", | |
| 1430 SourceLine(_doc, 'specializeFrom', str), | |
| 1431 [e] | |
| 1432 ) | |
| 1433 ) | |
| 1434 try: | |
| 1435 specializeTo = load_field(_doc.get( | |
| 1436 'specializeTo'), uri_strtype_False_False_1, baseuri, loadingOptions) | |
| 1437 except ValidationException as e: | |
| 1438 errors.append( | |
| 1439 ValidationException( | |
| 1440 "the `specializeTo` field is not valid because:", | |
| 1441 SourceLine(_doc, 'specializeTo', str), | |
| 1442 [e] | |
| 1443 ) | |
| 1444 ) | |
| 1445 | |
| 1446 extension_fields = yaml.comments.CommentedMap() | |
| 1447 for k in _doc.keys(): | |
| 1448 if k not in cls.attrs: | |
| 1449 if ":" in k: | |
| 1450 ex = expand_url(k, | |
| 1451 u"", | |
| 1452 loadingOptions, | |
| 1453 scoped_id=False, | |
| 1454 vocab_term=False) | |
| 1455 extension_fields[ex] = _doc[k] | |
| 1456 else: | |
| 1457 errors.append( | |
| 1458 ValidationException( | |
| 1459 "invalid field `%s`, expected one of: `specializeFrom`, `specializeTo`" % (k), | |
| 1460 SourceLine(_doc, k, str) | |
| 1461 ) | |
| 1462 ) | |
| 1463 break | |
| 1464 | |
| 1465 if errors: | |
| 1466 raise ValidationException("Trying 'SpecializeDef'", None, errors) | |
| 1467 loadingOptions = copy.deepcopy(loadingOptions) | |
| 1468 loadingOptions.original_doc = _doc | |
| 1469 return cls(specializeFrom, specializeTo, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 1470 | |
| 1471 def save(self, top=False, base_url="", relative_uris=True): | |
| 1472 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 1473 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 1474 for ef in self.extension_fields: | |
| 1475 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 1476 | |
| 1477 if self.specializeFrom is not None: | |
| 1478 u = save_relative_uri( | |
| 1479 self.specializeFrom, | |
| 1480 base_url, | |
| 1481 False, | |
| 1482 1, | |
| 1483 relative_uris) | |
| 1484 if u: | |
| 1485 r['specializeFrom'] = u | |
| 1486 | |
| 1487 if self.specializeTo is not None: | |
| 1488 u = save_relative_uri( | |
| 1489 self.specializeTo, | |
| 1490 base_url, | |
| 1491 False, | |
| 1492 1, | |
| 1493 relative_uris) | |
| 1494 if u: | |
| 1495 r['specializeTo'] = u | |
| 1496 | |
| 1497 if top and self.loadingOptions.namespaces: | |
| 1498 r["$namespaces"] = self.loadingOptions.namespaces | |
| 1499 | |
| 1500 return r | |
| 1501 | |
| 1502 attrs = frozenset(['specializeFrom', 'specializeTo']) | |
| 1503 | |
| 1504 | |
| 1505 class NamedType(Savable): | |
| 1506 pass | |
| 1507 | |
| 1508 | |
| 1509 class DocType(Documented): | |
| 1510 pass | |
| 1511 | |
| 1512 | |
| 1513 class SchemaDefinedType(DocType): | |
| 1514 """ | |
| 1515 Abstract base for schema-defined types. | |
| 1516 | |
| 1517 """ | |
| 1518 pass | |
| 1519 | |
| 1520 | |
| 1521 class SaladRecordField(RecordField): | |
| 1522 """ | |
| 1523 A field of a record. | |
| 1524 """ | |
| 1525 def __init__( | |
| 1526 self, | |
| 1527 doc, # type: Any | |
| 1528 name, # type: Any | |
| 1529 type, # type: Any | |
| 1530 jsonldPredicate, # type: Any | |
| 1531 default, # type: Any | |
| 1532 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 1533 loadingOptions=None # type: Optional[LoadingOptions] | |
| 1534 ): # type: (...) -> None | |
| 1535 | |
| 1536 if extension_fields: | |
| 1537 self.extension_fields = extension_fields | |
| 1538 else: | |
| 1539 self.extension_fields = yaml.comments.CommentedMap() | |
| 1540 if loadingOptions: | |
| 1541 self.loadingOptions = loadingOptions | |
| 1542 else: | |
| 1543 self.loadingOptions = LoadingOptions() | |
| 1544 self.doc = doc | |
| 1545 self.name = name | |
| 1546 self.type = type | |
| 1547 self.jsonldPredicate = jsonldPredicate | |
| 1548 self.default = default | |
| 1549 | |
| 1550 @classmethod | |
| 1551 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 1552 # type: (Any, Text, LoadingOptions, Optional[Text]) -> SaladRecordField | |
| 1553 | |
| 1554 _doc = copy.copy(doc) | |
| 1555 if hasattr(doc, 'lc'): | |
| 1556 _doc.lc.data = doc.lc.data | |
| 1557 _doc.lc.filename = doc.lc.filename | |
| 1558 errors = [] | |
| 1559 if 'name' in _doc: | |
| 1560 try: | |
| 1561 name = load_field(_doc.get( | |
| 1562 'name'), uri_strtype_True_False_None, baseuri, loadingOptions) | |
| 1563 except ValidationException as e: | |
| 1564 errors.append( | |
| 1565 ValidationException( | |
| 1566 "the `name` field is not valid because:", | |
| 1567 SourceLine(_doc, 'name', str), | |
| 1568 [e] | |
| 1569 ) | |
| 1570 ) | |
| 1571 else: | |
| 1572 name = None | |
| 1573 | |
| 1574 if name is None: | |
| 1575 if docRoot is not None: | |
| 1576 name = docRoot | |
| 1577 else: | |
| 1578 raise ValidationException("Missing name") | |
| 1579 baseuri = name | |
| 1580 if 'doc' in _doc: | |
| 1581 try: | |
| 1582 doc = load_field(_doc.get( | |
| 1583 'doc'), union_of_None_type_or_strtype_or_array_of_strtype, baseuri, loadingOptions) | |
| 1584 except ValidationException as e: | |
| 1585 errors.append( | |
| 1586 ValidationException( | |
| 1587 "the `doc` field is not valid because:", | |
| 1588 SourceLine(_doc, 'doc', str), | |
| 1589 [e] | |
| 1590 ) | |
| 1591 ) | |
| 1592 else: | |
| 1593 doc = None | |
| 1594 try: | |
| 1595 type = load_field(_doc.get( | |
| 1596 'type'), typedsl_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_2, baseuri, loadingOptions) | |
| 1597 except ValidationException as e: | |
| 1598 errors.append( | |
| 1599 ValidationException( | |
| 1600 "the `type` field is not valid because:", | |
| 1601 SourceLine(_doc, 'type', str), | |
| 1602 [e] | |
| 1603 ) | |
| 1604 ) | |
| 1605 if 'jsonldPredicate' in _doc: | |
| 1606 try: | |
| 1607 jsonldPredicate = load_field(_doc.get( | |
| 1608 'jsonldPredicate'), union_of_None_type_or_strtype_or_JsonldPredicateLoader, baseuri, loadingOptions) | |
| 1609 except ValidationException as e: | |
| 1610 errors.append( | |
| 1611 ValidationException( | |
| 1612 "the `jsonldPredicate` field is not valid because:", | |
| 1613 SourceLine(_doc, 'jsonldPredicate', str), | |
| 1614 [e] | |
| 1615 ) | |
| 1616 ) | |
| 1617 else: | |
| 1618 jsonldPredicate = None | |
| 1619 if 'default' in _doc: | |
| 1620 try: | |
| 1621 default = load_field(_doc.get( | |
| 1622 'default'), union_of_None_type_or_Any_type, baseuri, loadingOptions) | |
| 1623 except ValidationException as e: | |
| 1624 errors.append( | |
| 1625 ValidationException( | |
| 1626 "the `default` field is not valid because:", | |
| 1627 SourceLine(_doc, 'default', str), | |
| 1628 [e] | |
| 1629 ) | |
| 1630 ) | |
| 1631 else: | |
| 1632 default = None | |
| 1633 | |
| 1634 extension_fields = yaml.comments.CommentedMap() | |
| 1635 for k in _doc.keys(): | |
| 1636 if k not in cls.attrs: | |
| 1637 if ":" in k: | |
| 1638 ex = expand_url(k, | |
| 1639 u"", | |
| 1640 loadingOptions, | |
| 1641 scoped_id=False, | |
| 1642 vocab_term=False) | |
| 1643 extension_fields[ex] = _doc[k] | |
| 1644 else: | |
| 1645 errors.append( | |
| 1646 ValidationException( | |
| 1647 "invalid field `%s`, expected one of: `doc`, `name`, `type`, `jsonldPredicate`, `default`" % (k), | |
| 1648 SourceLine(_doc, k, str) | |
| 1649 ) | |
| 1650 ) | |
| 1651 break | |
| 1652 | |
| 1653 if errors: | |
| 1654 raise ValidationException("Trying 'SaladRecordField'", None, errors) | |
| 1655 loadingOptions = copy.deepcopy(loadingOptions) | |
| 1656 loadingOptions.original_doc = _doc | |
| 1657 return cls(doc, name, type, jsonldPredicate, default, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 1658 | |
| 1659 def save(self, top=False, base_url="", relative_uris=True): | |
| 1660 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 1661 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 1662 for ef in self.extension_fields: | |
| 1663 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 1664 | |
| 1665 if self.name is not None: | |
| 1666 u = save_relative_uri( | |
| 1667 self.name, | |
| 1668 base_url, | |
| 1669 True, | |
| 1670 None, | |
| 1671 relative_uris) | |
| 1672 if u: | |
| 1673 r['name'] = u | |
| 1674 | |
| 1675 if self.doc is not None: | |
| 1676 r['doc'] = save( | |
| 1677 self.doc, | |
| 1678 top=False, | |
| 1679 base_url=self.name, | |
| 1680 relative_uris=relative_uris) | |
| 1681 | |
| 1682 if self.type is not None: | |
| 1683 r['type'] = save( | |
| 1684 self.type, | |
| 1685 top=False, | |
| 1686 base_url=self.name, | |
| 1687 relative_uris=relative_uris) | |
| 1688 | |
| 1689 if self.jsonldPredicate is not None: | |
| 1690 r['jsonldPredicate'] = save( | |
| 1691 self.jsonldPredicate, | |
| 1692 top=False, | |
| 1693 base_url=self.name, | |
| 1694 relative_uris=relative_uris) | |
| 1695 | |
| 1696 if self.default is not None: | |
| 1697 r['default'] = save( | |
| 1698 self.default, | |
| 1699 top=False, | |
| 1700 base_url=self.name, | |
| 1701 relative_uris=relative_uris) | |
| 1702 | |
| 1703 if top and self.loadingOptions.namespaces: | |
| 1704 r["$namespaces"] = self.loadingOptions.namespaces | |
| 1705 | |
| 1706 return r | |
| 1707 | |
| 1708 attrs = frozenset(['doc', 'name', 'type', 'jsonldPredicate', 'default']) | |
| 1709 | |
| 1710 | |
| 1711 class SaladRecordSchema(NamedType, RecordSchema, SchemaDefinedType): | |
| 1712 def __init__( | |
| 1713 self, | |
| 1714 name, # type: Any | |
| 1715 inVocab, # type: Any | |
| 1716 fields, # type: Any | |
| 1717 type, # type: Any | |
| 1718 doc, # type: Any | |
| 1719 docParent, # type: Any | |
| 1720 docChild, # type: Any | |
| 1721 docAfter, # type: Any | |
| 1722 jsonldPredicate, # type: Any | |
| 1723 documentRoot, # type: Any | |
| 1724 abstract, # type: Any | |
| 1725 extends, # type: Any | |
| 1726 specialize, # type: Any | |
| 1727 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 1728 loadingOptions=None # type: Optional[LoadingOptions] | |
| 1729 ): # type: (...) -> None | |
| 1730 | |
| 1731 if extension_fields: | |
| 1732 self.extension_fields = extension_fields | |
| 1733 else: | |
| 1734 self.extension_fields = yaml.comments.CommentedMap() | |
| 1735 if loadingOptions: | |
| 1736 self.loadingOptions = loadingOptions | |
| 1737 else: | |
| 1738 self.loadingOptions = LoadingOptions() | |
| 1739 self.name = name | |
| 1740 self.inVocab = inVocab | |
| 1741 self.fields = fields | |
| 1742 self.type = type | |
| 1743 self.doc = doc | |
| 1744 self.docParent = docParent | |
| 1745 self.docChild = docChild | |
| 1746 self.docAfter = docAfter | |
| 1747 self.jsonldPredicate = jsonldPredicate | |
| 1748 self.documentRoot = documentRoot | |
| 1749 self.abstract = abstract | |
| 1750 self.extends = extends | |
| 1751 self.specialize = specialize | |
| 1752 | |
| 1753 @classmethod | |
| 1754 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 1755 # type: (Any, Text, LoadingOptions, Optional[Text]) -> SaladRecordSchema | |
| 1756 | |
| 1757 _doc = copy.copy(doc) | |
| 1758 if hasattr(doc, 'lc'): | |
| 1759 _doc.lc.data = doc.lc.data | |
| 1760 _doc.lc.filename = doc.lc.filename | |
| 1761 errors = [] | |
| 1762 if 'name' in _doc: | |
| 1763 try: | |
| 1764 name = load_field(_doc.get( | |
| 1765 'name'), uri_strtype_True_False_None, baseuri, loadingOptions) | |
| 1766 except ValidationException as e: | |
| 1767 errors.append( | |
| 1768 ValidationException( | |
| 1769 "the `name` field is not valid because:", | |
| 1770 SourceLine(_doc, 'name', str), | |
| 1771 [e] | |
| 1772 ) | |
| 1773 ) | |
| 1774 else: | |
| 1775 name = None | |
| 1776 | |
| 1777 if name is None: | |
| 1778 if docRoot is not None: | |
| 1779 name = docRoot | |
| 1780 else: | |
| 1781 raise ValidationException("Missing name") | |
| 1782 baseuri = name | |
| 1783 if 'inVocab' in _doc: | |
| 1784 try: | |
| 1785 inVocab = load_field(_doc.get( | |
| 1786 'inVocab'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1787 except ValidationException as e: | |
| 1788 errors.append( | |
| 1789 ValidationException( | |
| 1790 "the `inVocab` field is not valid because:", | |
| 1791 SourceLine(_doc, 'inVocab', str), | |
| 1792 [e] | |
| 1793 ) | |
| 1794 ) | |
| 1795 else: | |
| 1796 inVocab = None | |
| 1797 if 'fields' in _doc: | |
| 1798 try: | |
| 1799 fields = load_field(_doc.get( | |
| 1800 'fields'), idmap_fields_union_of_None_type_or_array_of_SaladRecordFieldLoader, baseuri, loadingOptions) | |
| 1801 except ValidationException as e: | |
| 1802 errors.append( | |
| 1803 ValidationException( | |
| 1804 "the `fields` field is not valid because:", | |
| 1805 SourceLine(_doc, 'fields', str), | |
| 1806 [e] | |
| 1807 ) | |
| 1808 ) | |
| 1809 else: | |
| 1810 fields = None | |
| 1811 try: | |
| 1812 type = load_field(_doc.get( | |
| 1813 'type'), typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2, baseuri, loadingOptions) | |
| 1814 except ValidationException as e: | |
| 1815 errors.append( | |
| 1816 ValidationException( | |
| 1817 "the `type` field is not valid because:", | |
| 1818 SourceLine(_doc, 'type', str), | |
| 1819 [e] | |
| 1820 ) | |
| 1821 ) | |
| 1822 if 'doc' in _doc: | |
| 1823 try: | |
| 1824 doc = load_field(_doc.get( | |
| 1825 'doc'), union_of_None_type_or_strtype_or_array_of_strtype, baseuri, loadingOptions) | |
| 1826 except ValidationException as e: | |
| 1827 errors.append( | |
| 1828 ValidationException( | |
| 1829 "the `doc` field is not valid because:", | |
| 1830 SourceLine(_doc, 'doc', str), | |
| 1831 [e] | |
| 1832 ) | |
| 1833 ) | |
| 1834 else: | |
| 1835 doc = None | |
| 1836 if 'docParent' in _doc: | |
| 1837 try: | |
| 1838 docParent = load_field(_doc.get( | |
| 1839 'docParent'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 1840 except ValidationException as e: | |
| 1841 errors.append( | |
| 1842 ValidationException( | |
| 1843 "the `docParent` field is not valid because:", | |
| 1844 SourceLine(_doc, 'docParent', str), | |
| 1845 [e] | |
| 1846 ) | |
| 1847 ) | |
| 1848 else: | |
| 1849 docParent = None | |
| 1850 if 'docChild' in _doc: | |
| 1851 try: | |
| 1852 docChild = load_field(_doc.get( | |
| 1853 'docChild'), uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_None, baseuri, loadingOptions) | |
| 1854 except ValidationException as e: | |
| 1855 errors.append( | |
| 1856 ValidationException( | |
| 1857 "the `docChild` field is not valid because:", | |
| 1858 SourceLine(_doc, 'docChild', str), | |
| 1859 [e] | |
| 1860 ) | |
| 1861 ) | |
| 1862 else: | |
| 1863 docChild = None | |
| 1864 if 'docAfter' in _doc: | |
| 1865 try: | |
| 1866 docAfter = load_field(_doc.get( | |
| 1867 'docAfter'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 1868 except ValidationException as e: | |
| 1869 errors.append( | |
| 1870 ValidationException( | |
| 1871 "the `docAfter` field is not valid because:", | |
| 1872 SourceLine(_doc, 'docAfter', str), | |
| 1873 [e] | |
| 1874 ) | |
| 1875 ) | |
| 1876 else: | |
| 1877 docAfter = None | |
| 1878 if 'jsonldPredicate' in _doc: | |
| 1879 try: | |
| 1880 jsonldPredicate = load_field(_doc.get( | |
| 1881 'jsonldPredicate'), union_of_None_type_or_strtype_or_JsonldPredicateLoader, baseuri, loadingOptions) | |
| 1882 except ValidationException as e: | |
| 1883 errors.append( | |
| 1884 ValidationException( | |
| 1885 "the `jsonldPredicate` field is not valid because:", | |
| 1886 SourceLine(_doc, 'jsonldPredicate', str), | |
| 1887 [e] | |
| 1888 ) | |
| 1889 ) | |
| 1890 else: | |
| 1891 jsonldPredicate = None | |
| 1892 if 'documentRoot' in _doc: | |
| 1893 try: | |
| 1894 documentRoot = load_field(_doc.get( | |
| 1895 'documentRoot'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1896 except ValidationException as e: | |
| 1897 errors.append( | |
| 1898 ValidationException( | |
| 1899 "the `documentRoot` field is not valid because:", | |
| 1900 SourceLine(_doc, 'documentRoot', str), | |
| 1901 [e] | |
| 1902 ) | |
| 1903 ) | |
| 1904 else: | |
| 1905 documentRoot = None | |
| 1906 if 'abstract' in _doc: | |
| 1907 try: | |
| 1908 abstract = load_field(_doc.get( | |
| 1909 'abstract'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 1910 except ValidationException as e: | |
| 1911 errors.append( | |
| 1912 ValidationException( | |
| 1913 "the `abstract` field is not valid because:", | |
| 1914 SourceLine(_doc, 'abstract', str), | |
| 1915 [e] | |
| 1916 ) | |
| 1917 ) | |
| 1918 else: | |
| 1919 abstract = None | |
| 1920 if 'extends' in _doc: | |
| 1921 try: | |
| 1922 extends = load_field(_doc.get( | |
| 1923 'extends'), uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_1, baseuri, loadingOptions) | |
| 1924 except ValidationException as e: | |
| 1925 errors.append( | |
| 1926 ValidationException( | |
| 1927 "the `extends` field is not valid because:", | |
| 1928 SourceLine(_doc, 'extends', str), | |
| 1929 [e] | |
| 1930 ) | |
| 1931 ) | |
| 1932 else: | |
| 1933 extends = None | |
| 1934 if 'specialize' in _doc: | |
| 1935 try: | |
| 1936 specialize = load_field(_doc.get( | |
| 1937 'specialize'), idmap_specialize_union_of_None_type_or_array_of_SpecializeDefLoader, baseuri, loadingOptions) | |
| 1938 except ValidationException as e: | |
| 1939 errors.append( | |
| 1940 ValidationException( | |
| 1941 "the `specialize` field is not valid because:", | |
| 1942 SourceLine(_doc, 'specialize', str), | |
| 1943 [e] | |
| 1944 ) | |
| 1945 ) | |
| 1946 else: | |
| 1947 specialize = None | |
| 1948 | |
| 1949 extension_fields = yaml.comments.CommentedMap() | |
| 1950 for k in _doc.keys(): | |
| 1951 if k not in cls.attrs: | |
| 1952 if ":" in k: | |
| 1953 ex = expand_url(k, | |
| 1954 u"", | |
| 1955 loadingOptions, | |
| 1956 scoped_id=False, | |
| 1957 vocab_term=False) | |
| 1958 extension_fields[ex] = _doc[k] | |
| 1959 else: | |
| 1960 errors.append( | |
| 1961 ValidationException( | |
| 1962 "invalid field `%s`, expected one of: `name`, `inVocab`, `fields`, `type`, `doc`, `docParent`, `docChild`, `docAfter`, `jsonldPredicate`, `documentRoot`, `abstract`, `extends`, `specialize`" % (k), | |
| 1963 SourceLine(_doc, k, str) | |
| 1964 ) | |
| 1965 ) | |
| 1966 break | |
| 1967 | |
| 1968 if errors: | |
| 1969 raise ValidationException("Trying 'SaladRecordSchema'", None, errors) | |
| 1970 loadingOptions = copy.deepcopy(loadingOptions) | |
| 1971 loadingOptions.original_doc = _doc | |
| 1972 return cls(name, inVocab, fields, type, doc, docParent, docChild, docAfter, jsonldPredicate, documentRoot, abstract, extends, specialize, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 1973 | |
| 1974 def save(self, top=False, base_url="", relative_uris=True): | |
| 1975 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 1976 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 1977 for ef in self.extension_fields: | |
| 1978 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 1979 | |
| 1980 if self.name is not None: | |
| 1981 u = save_relative_uri( | |
| 1982 self.name, | |
| 1983 base_url, | |
| 1984 True, | |
| 1985 None, | |
| 1986 relative_uris) | |
| 1987 if u: | |
| 1988 r['name'] = u | |
| 1989 | |
| 1990 if self.inVocab is not None: | |
| 1991 r['inVocab'] = save( | |
| 1992 self.inVocab, | |
| 1993 top=False, | |
| 1994 base_url=self.name, | |
| 1995 relative_uris=relative_uris) | |
| 1996 | |
| 1997 if self.fields is not None: | |
| 1998 r['fields'] = save( | |
| 1999 self.fields, | |
| 2000 top=False, | |
| 2001 base_url=self.name, | |
| 2002 relative_uris=relative_uris) | |
| 2003 | |
| 2004 if self.type is not None: | |
| 2005 r['type'] = save( | |
| 2006 self.type, | |
| 2007 top=False, | |
| 2008 base_url=self.name, | |
| 2009 relative_uris=relative_uris) | |
| 2010 | |
| 2011 if self.doc is not None: | |
| 2012 r['doc'] = save( | |
| 2013 self.doc, | |
| 2014 top=False, | |
| 2015 base_url=self.name, | |
| 2016 relative_uris=relative_uris) | |
| 2017 | |
| 2018 if self.docParent is not None: | |
| 2019 u = save_relative_uri( | |
| 2020 self.docParent, | |
| 2021 self.name, | |
| 2022 False, | |
| 2023 None, | |
| 2024 relative_uris) | |
| 2025 if u: | |
| 2026 r['docParent'] = u | |
| 2027 | |
| 2028 if self.docChild is not None: | |
| 2029 u = save_relative_uri( | |
| 2030 self.docChild, | |
| 2031 self.name, | |
| 2032 False, | |
| 2033 None, | |
| 2034 relative_uris) | |
| 2035 if u: | |
| 2036 r['docChild'] = u | |
| 2037 | |
| 2038 if self.docAfter is not None: | |
| 2039 u = save_relative_uri( | |
| 2040 self.docAfter, | |
| 2041 self.name, | |
| 2042 False, | |
| 2043 None, | |
| 2044 relative_uris) | |
| 2045 if u: | |
| 2046 r['docAfter'] = u | |
| 2047 | |
| 2048 if self.jsonldPredicate is not None: | |
| 2049 r['jsonldPredicate'] = save( | |
| 2050 self.jsonldPredicate, | |
| 2051 top=False, | |
| 2052 base_url=self.name, | |
| 2053 relative_uris=relative_uris) | |
| 2054 | |
| 2055 if self.documentRoot is not None: | |
| 2056 r['documentRoot'] = save( | |
| 2057 self.documentRoot, | |
| 2058 top=False, | |
| 2059 base_url=self.name, | |
| 2060 relative_uris=relative_uris) | |
| 2061 | |
| 2062 if self.abstract is not None: | |
| 2063 r['abstract'] = save( | |
| 2064 self.abstract, | |
| 2065 top=False, | |
| 2066 base_url=self.name, | |
| 2067 relative_uris=relative_uris) | |
| 2068 | |
| 2069 if self.extends is not None: | |
| 2070 u = save_relative_uri( | |
| 2071 self.extends, | |
| 2072 self.name, | |
| 2073 False, | |
| 2074 1, | |
| 2075 relative_uris) | |
| 2076 if u: | |
| 2077 r['extends'] = u | |
| 2078 | |
| 2079 if self.specialize is not None: | |
| 2080 r['specialize'] = save( | |
| 2081 self.specialize, | |
| 2082 top=False, | |
| 2083 base_url=self.name, | |
| 2084 relative_uris=relative_uris) | |
| 2085 | |
| 2086 if top and self.loadingOptions.namespaces: | |
| 2087 r["$namespaces"] = self.loadingOptions.namespaces | |
| 2088 | |
| 2089 return r | |
| 2090 | |
| 2091 attrs = frozenset(['name', 'inVocab', 'fields', 'type', 'doc', 'docParent', 'docChild', 'docAfter', 'jsonldPredicate', 'documentRoot', 'abstract', 'extends', 'specialize']) | |
| 2092 | |
| 2093 | |
| 2094 class SaladEnumSchema(NamedType, EnumSchema, SchemaDefinedType): | |
| 2095 """ | |
| 2096 Define an enumerated type. | |
| 2097 | |
| 2098 """ | |
| 2099 def __init__( | |
| 2100 self, | |
| 2101 name, # type: Any | |
| 2102 inVocab, # type: Any | |
| 2103 symbols, # type: Any | |
| 2104 type, # type: Any | |
| 2105 doc, # type: Any | |
| 2106 docParent, # type: Any | |
| 2107 docChild, # type: Any | |
| 2108 docAfter, # type: Any | |
| 2109 jsonldPredicate, # type: Any | |
| 2110 documentRoot, # type: Any | |
| 2111 extends, # type: Any | |
| 2112 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 2113 loadingOptions=None # type: Optional[LoadingOptions] | |
| 2114 ): # type: (...) -> None | |
| 2115 | |
| 2116 if extension_fields: | |
| 2117 self.extension_fields = extension_fields | |
| 2118 else: | |
| 2119 self.extension_fields = yaml.comments.CommentedMap() | |
| 2120 if loadingOptions: | |
| 2121 self.loadingOptions = loadingOptions | |
| 2122 else: | |
| 2123 self.loadingOptions = LoadingOptions() | |
| 2124 self.name = name | |
| 2125 self.inVocab = inVocab | |
| 2126 self.symbols = symbols | |
| 2127 self.type = type | |
| 2128 self.doc = doc | |
| 2129 self.docParent = docParent | |
| 2130 self.docChild = docChild | |
| 2131 self.docAfter = docAfter | |
| 2132 self.jsonldPredicate = jsonldPredicate | |
| 2133 self.documentRoot = documentRoot | |
| 2134 self.extends = extends | |
| 2135 | |
| 2136 @classmethod | |
| 2137 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 2138 # type: (Any, Text, LoadingOptions, Optional[Text]) -> SaladEnumSchema | |
| 2139 | |
| 2140 _doc = copy.copy(doc) | |
| 2141 if hasattr(doc, 'lc'): | |
| 2142 _doc.lc.data = doc.lc.data | |
| 2143 _doc.lc.filename = doc.lc.filename | |
| 2144 errors = [] | |
| 2145 if 'name' in _doc: | |
| 2146 try: | |
| 2147 name = load_field(_doc.get( | |
| 2148 'name'), uri_strtype_True_False_None, baseuri, loadingOptions) | |
| 2149 except ValidationException as e: | |
| 2150 errors.append( | |
| 2151 ValidationException( | |
| 2152 "the `name` field is not valid because:", | |
| 2153 SourceLine(_doc, 'name', str), | |
| 2154 [e] | |
| 2155 ) | |
| 2156 ) | |
| 2157 else: | |
| 2158 name = None | |
| 2159 | |
| 2160 if name is None: | |
| 2161 if docRoot is not None: | |
| 2162 name = docRoot | |
| 2163 else: | |
| 2164 raise ValidationException("Missing name") | |
| 2165 baseuri = name | |
| 2166 if 'inVocab' in _doc: | |
| 2167 try: | |
| 2168 inVocab = load_field(_doc.get( | |
| 2169 'inVocab'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 2170 except ValidationException as e: | |
| 2171 errors.append( | |
| 2172 ValidationException( | |
| 2173 "the `inVocab` field is not valid because:", | |
| 2174 SourceLine(_doc, 'inVocab', str), | |
| 2175 [e] | |
| 2176 ) | |
| 2177 ) | |
| 2178 else: | |
| 2179 inVocab = None | |
| 2180 try: | |
| 2181 symbols = load_field(_doc.get( | |
| 2182 'symbols'), uri_array_of_strtype_True_False_None, baseuri, loadingOptions) | |
| 2183 except ValidationException as e: | |
| 2184 errors.append( | |
| 2185 ValidationException( | |
| 2186 "the `symbols` field is not valid because:", | |
| 2187 SourceLine(_doc, 'symbols', str), | |
| 2188 [e] | |
| 2189 ) | |
| 2190 ) | |
| 2191 try: | |
| 2192 type = load_field(_doc.get( | |
| 2193 'type'), typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2, baseuri, loadingOptions) | |
| 2194 except ValidationException as e: | |
| 2195 errors.append( | |
| 2196 ValidationException( | |
| 2197 "the `type` field is not valid because:", | |
| 2198 SourceLine(_doc, 'type', str), | |
| 2199 [e] | |
| 2200 ) | |
| 2201 ) | |
| 2202 if 'doc' in _doc: | |
| 2203 try: | |
| 2204 doc = load_field(_doc.get( | |
| 2205 'doc'), union_of_None_type_or_strtype_or_array_of_strtype, baseuri, loadingOptions) | |
| 2206 except ValidationException as e: | |
| 2207 errors.append( | |
| 2208 ValidationException( | |
| 2209 "the `doc` field is not valid because:", | |
| 2210 SourceLine(_doc, 'doc', str), | |
| 2211 [e] | |
| 2212 ) | |
| 2213 ) | |
| 2214 else: | |
| 2215 doc = None | |
| 2216 if 'docParent' in _doc: | |
| 2217 try: | |
| 2218 docParent = load_field(_doc.get( | |
| 2219 'docParent'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 2220 except ValidationException as e: | |
| 2221 errors.append( | |
| 2222 ValidationException( | |
| 2223 "the `docParent` field is not valid because:", | |
| 2224 SourceLine(_doc, 'docParent', str), | |
| 2225 [e] | |
| 2226 ) | |
| 2227 ) | |
| 2228 else: | |
| 2229 docParent = None | |
| 2230 if 'docChild' in _doc: | |
| 2231 try: | |
| 2232 docChild = load_field(_doc.get( | |
| 2233 'docChild'), uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_None, baseuri, loadingOptions) | |
| 2234 except ValidationException as e: | |
| 2235 errors.append( | |
| 2236 ValidationException( | |
| 2237 "the `docChild` field is not valid because:", | |
| 2238 SourceLine(_doc, 'docChild', str), | |
| 2239 [e] | |
| 2240 ) | |
| 2241 ) | |
| 2242 else: | |
| 2243 docChild = None | |
| 2244 if 'docAfter' in _doc: | |
| 2245 try: | |
| 2246 docAfter = load_field(_doc.get( | |
| 2247 'docAfter'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 2248 except ValidationException as e: | |
| 2249 errors.append( | |
| 2250 ValidationException( | |
| 2251 "the `docAfter` field is not valid because:", | |
| 2252 SourceLine(_doc, 'docAfter', str), | |
| 2253 [e] | |
| 2254 ) | |
| 2255 ) | |
| 2256 else: | |
| 2257 docAfter = None | |
| 2258 if 'jsonldPredicate' in _doc: | |
| 2259 try: | |
| 2260 jsonldPredicate = load_field(_doc.get( | |
| 2261 'jsonldPredicate'), union_of_None_type_or_strtype_or_JsonldPredicateLoader, baseuri, loadingOptions) | |
| 2262 except ValidationException as e: | |
| 2263 errors.append( | |
| 2264 ValidationException( | |
| 2265 "the `jsonldPredicate` field is not valid because:", | |
| 2266 SourceLine(_doc, 'jsonldPredicate', str), | |
| 2267 [e] | |
| 2268 ) | |
| 2269 ) | |
| 2270 else: | |
| 2271 jsonldPredicate = None | |
| 2272 if 'documentRoot' in _doc: | |
| 2273 try: | |
| 2274 documentRoot = load_field(_doc.get( | |
| 2275 'documentRoot'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 2276 except ValidationException as e: | |
| 2277 errors.append( | |
| 2278 ValidationException( | |
| 2279 "the `documentRoot` field is not valid because:", | |
| 2280 SourceLine(_doc, 'documentRoot', str), | |
| 2281 [e] | |
| 2282 ) | |
| 2283 ) | |
| 2284 else: | |
| 2285 documentRoot = None | |
| 2286 if 'extends' in _doc: | |
| 2287 try: | |
| 2288 extends = load_field(_doc.get( | |
| 2289 'extends'), uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_1, baseuri, loadingOptions) | |
| 2290 except ValidationException as e: | |
| 2291 errors.append( | |
| 2292 ValidationException( | |
| 2293 "the `extends` field is not valid because:", | |
| 2294 SourceLine(_doc, 'extends', str), | |
| 2295 [e] | |
| 2296 ) | |
| 2297 ) | |
| 2298 else: | |
| 2299 extends = None | |
| 2300 | |
| 2301 extension_fields = yaml.comments.CommentedMap() | |
| 2302 for k in _doc.keys(): | |
| 2303 if k not in cls.attrs: | |
| 2304 if ":" in k: | |
| 2305 ex = expand_url(k, | |
| 2306 u"", | |
| 2307 loadingOptions, | |
| 2308 scoped_id=False, | |
| 2309 vocab_term=False) | |
| 2310 extension_fields[ex] = _doc[k] | |
| 2311 else: | |
| 2312 errors.append( | |
| 2313 ValidationException( | |
| 2314 "invalid field `%s`, expected one of: `name`, `inVocab`, `symbols`, `type`, `doc`, `docParent`, `docChild`, `docAfter`, `jsonldPredicate`, `documentRoot`, `extends`" % (k), | |
| 2315 SourceLine(_doc, k, str) | |
| 2316 ) | |
| 2317 ) | |
| 2318 break | |
| 2319 | |
| 2320 if errors: | |
| 2321 raise ValidationException("Trying 'SaladEnumSchema'", None, errors) | |
| 2322 loadingOptions = copy.deepcopy(loadingOptions) | |
| 2323 loadingOptions.original_doc = _doc | |
| 2324 return cls(name, inVocab, symbols, type, doc, docParent, docChild, docAfter, jsonldPredicate, documentRoot, extends, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 2325 | |
| 2326 def save(self, top=False, base_url="", relative_uris=True): | |
| 2327 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 2328 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 2329 for ef in self.extension_fields: | |
| 2330 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 2331 | |
| 2332 if self.name is not None: | |
| 2333 u = save_relative_uri( | |
| 2334 self.name, | |
| 2335 base_url, | |
| 2336 True, | |
| 2337 None, | |
| 2338 relative_uris) | |
| 2339 if u: | |
| 2340 r['name'] = u | |
| 2341 | |
| 2342 if self.inVocab is not None: | |
| 2343 r['inVocab'] = save( | |
| 2344 self.inVocab, | |
| 2345 top=False, | |
| 2346 base_url=self.name, | |
| 2347 relative_uris=relative_uris) | |
| 2348 | |
| 2349 if self.symbols is not None: | |
| 2350 u = save_relative_uri( | |
| 2351 self.symbols, | |
| 2352 self.name, | |
| 2353 True, | |
| 2354 None, | |
| 2355 relative_uris) | |
| 2356 if u: | |
| 2357 r['symbols'] = u | |
| 2358 | |
| 2359 if self.type is not None: | |
| 2360 r['type'] = save( | |
| 2361 self.type, | |
| 2362 top=False, | |
| 2363 base_url=self.name, | |
| 2364 relative_uris=relative_uris) | |
| 2365 | |
| 2366 if self.doc is not None: | |
| 2367 r['doc'] = save( | |
| 2368 self.doc, | |
| 2369 top=False, | |
| 2370 base_url=self.name, | |
| 2371 relative_uris=relative_uris) | |
| 2372 | |
| 2373 if self.docParent is not None: | |
| 2374 u = save_relative_uri( | |
| 2375 self.docParent, | |
| 2376 self.name, | |
| 2377 False, | |
| 2378 None, | |
| 2379 relative_uris) | |
| 2380 if u: | |
| 2381 r['docParent'] = u | |
| 2382 | |
| 2383 if self.docChild is not None: | |
| 2384 u = save_relative_uri( | |
| 2385 self.docChild, | |
| 2386 self.name, | |
| 2387 False, | |
| 2388 None, | |
| 2389 relative_uris) | |
| 2390 if u: | |
| 2391 r['docChild'] = u | |
| 2392 | |
| 2393 if self.docAfter is not None: | |
| 2394 u = save_relative_uri( | |
| 2395 self.docAfter, | |
| 2396 self.name, | |
| 2397 False, | |
| 2398 None, | |
| 2399 relative_uris) | |
| 2400 if u: | |
| 2401 r['docAfter'] = u | |
| 2402 | |
| 2403 if self.jsonldPredicate is not None: | |
| 2404 r['jsonldPredicate'] = save( | |
| 2405 self.jsonldPredicate, | |
| 2406 top=False, | |
| 2407 base_url=self.name, | |
| 2408 relative_uris=relative_uris) | |
| 2409 | |
| 2410 if self.documentRoot is not None: | |
| 2411 r['documentRoot'] = save( | |
| 2412 self.documentRoot, | |
| 2413 top=False, | |
| 2414 base_url=self.name, | |
| 2415 relative_uris=relative_uris) | |
| 2416 | |
| 2417 if self.extends is not None: | |
| 2418 u = save_relative_uri( | |
| 2419 self.extends, | |
| 2420 self.name, | |
| 2421 False, | |
| 2422 1, | |
| 2423 relative_uris) | |
| 2424 if u: | |
| 2425 r['extends'] = u | |
| 2426 | |
| 2427 if top and self.loadingOptions.namespaces: | |
| 2428 r["$namespaces"] = self.loadingOptions.namespaces | |
| 2429 | |
| 2430 return r | |
| 2431 | |
| 2432 attrs = frozenset(['name', 'inVocab', 'symbols', 'type', 'doc', 'docParent', 'docChild', 'docAfter', 'jsonldPredicate', 'documentRoot', 'extends']) | |
| 2433 | |
| 2434 | |
| 2435 class Documentation(NamedType, DocType): | |
| 2436 """ | |
| 2437 A documentation section. This type exists to facilitate self-documenting | |
| 2438 schemas but has no role in formal validation. | |
| 2439 | |
| 2440 """ | |
| 2441 def __init__( | |
| 2442 self, | |
| 2443 name, # type: Any | |
| 2444 inVocab, # type: Any | |
| 2445 doc, # type: Any | |
| 2446 docParent, # type: Any | |
| 2447 docChild, # type: Any | |
| 2448 docAfter, # type: Any | |
| 2449 type, # type: Any | |
| 2450 extension_fields=None, # type: Optional[Dict[Text, Any]] | |
| 2451 loadingOptions=None # type: Optional[LoadingOptions] | |
| 2452 ): # type: (...) -> None | |
| 2453 | |
| 2454 if extension_fields: | |
| 2455 self.extension_fields = extension_fields | |
| 2456 else: | |
| 2457 self.extension_fields = yaml.comments.CommentedMap() | |
| 2458 if loadingOptions: | |
| 2459 self.loadingOptions = loadingOptions | |
| 2460 else: | |
| 2461 self.loadingOptions = LoadingOptions() | |
| 2462 self.name = name | |
| 2463 self.inVocab = inVocab | |
| 2464 self.doc = doc | |
| 2465 self.docParent = docParent | |
| 2466 self.docChild = docChild | |
| 2467 self.docAfter = docAfter | |
| 2468 self.type = type | |
| 2469 | |
| 2470 @classmethod | |
| 2471 def fromDoc(cls, doc, baseuri, loadingOptions, docRoot=None): | |
| 2472 # type: (Any, Text, LoadingOptions, Optional[Text]) -> Documentation | |
| 2473 | |
| 2474 _doc = copy.copy(doc) | |
| 2475 if hasattr(doc, 'lc'): | |
| 2476 _doc.lc.data = doc.lc.data | |
| 2477 _doc.lc.filename = doc.lc.filename | |
| 2478 errors = [] | |
| 2479 if 'name' in _doc: | |
| 2480 try: | |
| 2481 name = load_field(_doc.get( | |
| 2482 'name'), uri_strtype_True_False_None, baseuri, loadingOptions) | |
| 2483 except ValidationException as e: | |
| 2484 errors.append( | |
| 2485 ValidationException( | |
| 2486 "the `name` field is not valid because:", | |
| 2487 SourceLine(_doc, 'name', str), | |
| 2488 [e] | |
| 2489 ) | |
| 2490 ) | |
| 2491 else: | |
| 2492 name = None | |
| 2493 | |
| 2494 if name is None: | |
| 2495 if docRoot is not None: | |
| 2496 name = docRoot | |
| 2497 else: | |
| 2498 raise ValidationException("Missing name") | |
| 2499 baseuri = name | |
| 2500 if 'inVocab' in _doc: | |
| 2501 try: | |
| 2502 inVocab = load_field(_doc.get( | |
| 2503 'inVocab'), union_of_None_type_or_booltype, baseuri, loadingOptions) | |
| 2504 except ValidationException as e: | |
| 2505 errors.append( | |
| 2506 ValidationException( | |
| 2507 "the `inVocab` field is not valid because:", | |
| 2508 SourceLine(_doc, 'inVocab', str), | |
| 2509 [e] | |
| 2510 ) | |
| 2511 ) | |
| 2512 else: | |
| 2513 inVocab = None | |
| 2514 if 'doc' in _doc: | |
| 2515 try: | |
| 2516 doc = load_field(_doc.get( | |
| 2517 'doc'), union_of_None_type_or_strtype_or_array_of_strtype, baseuri, loadingOptions) | |
| 2518 except ValidationException as e: | |
| 2519 errors.append( | |
| 2520 ValidationException( | |
| 2521 "the `doc` field is not valid because:", | |
| 2522 SourceLine(_doc, 'doc', str), | |
| 2523 [e] | |
| 2524 ) | |
| 2525 ) | |
| 2526 else: | |
| 2527 doc = None | |
| 2528 if 'docParent' in _doc: | |
| 2529 try: | |
| 2530 docParent = load_field(_doc.get( | |
| 2531 'docParent'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 2532 except ValidationException as e: | |
| 2533 errors.append( | |
| 2534 ValidationException( | |
| 2535 "the `docParent` field is not valid because:", | |
| 2536 SourceLine(_doc, 'docParent', str), | |
| 2537 [e] | |
| 2538 ) | |
| 2539 ) | |
| 2540 else: | |
| 2541 docParent = None | |
| 2542 if 'docChild' in _doc: | |
| 2543 try: | |
| 2544 docChild = load_field(_doc.get( | |
| 2545 'docChild'), uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_None, baseuri, loadingOptions) | |
| 2546 except ValidationException as e: | |
| 2547 errors.append( | |
| 2548 ValidationException( | |
| 2549 "the `docChild` field is not valid because:", | |
| 2550 SourceLine(_doc, 'docChild', str), | |
| 2551 [e] | |
| 2552 ) | |
| 2553 ) | |
| 2554 else: | |
| 2555 docChild = None | |
| 2556 if 'docAfter' in _doc: | |
| 2557 try: | |
| 2558 docAfter = load_field(_doc.get( | |
| 2559 'docAfter'), uri_union_of_None_type_or_strtype_False_False_None, baseuri, loadingOptions) | |
| 2560 except ValidationException as e: | |
| 2561 errors.append( | |
| 2562 ValidationException( | |
| 2563 "the `docAfter` field is not valid because:", | |
| 2564 SourceLine(_doc, 'docAfter', str), | |
| 2565 [e] | |
| 2566 ) | |
| 2567 ) | |
| 2568 else: | |
| 2569 docAfter = None | |
| 2570 try: | |
| 2571 type = load_field(_doc.get( | |
| 2572 'type'), typedsl_enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader_2, baseuri, loadingOptions) | |
| 2573 except ValidationException as e: | |
| 2574 errors.append( | |
| 2575 ValidationException( | |
| 2576 "the `type` field is not valid because:", | |
| 2577 SourceLine(_doc, 'type', str), | |
| 2578 [e] | |
| 2579 ) | |
| 2580 ) | |
| 2581 | |
| 2582 extension_fields = yaml.comments.CommentedMap() | |
| 2583 for k in _doc.keys(): | |
| 2584 if k not in cls.attrs: | |
| 2585 if ":" in k: | |
| 2586 ex = expand_url(k, | |
| 2587 u"", | |
| 2588 loadingOptions, | |
| 2589 scoped_id=False, | |
| 2590 vocab_term=False) | |
| 2591 extension_fields[ex] = _doc[k] | |
| 2592 else: | |
| 2593 errors.append( | |
| 2594 ValidationException( | |
| 2595 "invalid field `%s`, expected one of: `name`, `inVocab`, `doc`, `docParent`, `docChild`, `docAfter`, `type`" % (k), | |
| 2596 SourceLine(_doc, k, str) | |
| 2597 ) | |
| 2598 ) | |
| 2599 break | |
| 2600 | |
| 2601 if errors: | |
| 2602 raise ValidationException("Trying 'Documentation'", None, errors) | |
| 2603 loadingOptions = copy.deepcopy(loadingOptions) | |
| 2604 loadingOptions.original_doc = _doc | |
| 2605 return cls(name, inVocab, doc, docParent, docChild, docAfter, type, extension_fields=extension_fields, loadingOptions=loadingOptions) | |
| 2606 | |
| 2607 def save(self, top=False, base_url="", relative_uris=True): | |
| 2608 # type: (bool, Text, bool) -> Dict[Text, Any] | |
| 2609 r = yaml.comments.CommentedMap() # type: Dict[Text, Any] | |
| 2610 for ef in self.extension_fields: | |
| 2611 r[prefix_url(ef, self.loadingOptions.vocab)] = self.extension_fields[ef] | |
| 2612 | |
| 2613 if self.name is not None: | |
| 2614 u = save_relative_uri( | |
| 2615 self.name, | |
| 2616 base_url, | |
| 2617 True, | |
| 2618 None, | |
| 2619 relative_uris) | |
| 2620 if u: | |
| 2621 r['name'] = u | |
| 2622 | |
| 2623 if self.inVocab is not None: | |
| 2624 r['inVocab'] = save( | |
| 2625 self.inVocab, | |
| 2626 top=False, | |
| 2627 base_url=self.name, | |
| 2628 relative_uris=relative_uris) | |
| 2629 | |
| 2630 if self.doc is not None: | |
| 2631 r['doc'] = save( | |
| 2632 self.doc, | |
| 2633 top=False, | |
| 2634 base_url=self.name, | |
| 2635 relative_uris=relative_uris) | |
| 2636 | |
| 2637 if self.docParent is not None: | |
| 2638 u = save_relative_uri( | |
| 2639 self.docParent, | |
| 2640 self.name, | |
| 2641 False, | |
| 2642 None, | |
| 2643 relative_uris) | |
| 2644 if u: | |
| 2645 r['docParent'] = u | |
| 2646 | |
| 2647 if self.docChild is not None: | |
| 2648 u = save_relative_uri( | |
| 2649 self.docChild, | |
| 2650 self.name, | |
| 2651 False, | |
| 2652 None, | |
| 2653 relative_uris) | |
| 2654 if u: | |
| 2655 r['docChild'] = u | |
| 2656 | |
| 2657 if self.docAfter is not None: | |
| 2658 u = save_relative_uri( | |
| 2659 self.docAfter, | |
| 2660 self.name, | |
| 2661 False, | |
| 2662 None, | |
| 2663 relative_uris) | |
| 2664 if u: | |
| 2665 r['docAfter'] = u | |
| 2666 | |
| 2667 if self.type is not None: | |
| 2668 r['type'] = save( | |
| 2669 self.type, | |
| 2670 top=False, | |
| 2671 base_url=self.name, | |
| 2672 relative_uris=relative_uris) | |
| 2673 | |
| 2674 if top and self.loadingOptions.namespaces: | |
| 2675 r["$namespaces"] = self.loadingOptions.namespaces | |
| 2676 | |
| 2677 return r | |
| 2678 | |
| 2679 attrs = frozenset(['name', 'inVocab', 'doc', 'docParent', 'docChild', 'docAfter', 'type']) | |
| 2680 | |
| 2681 | |
| 2682 _vocab = { | |
| 2683 "Any": "https://w3id.org/cwl/salad#Any", | |
| 2684 "ArraySchema": "https://w3id.org/cwl/salad#ArraySchema", | |
| 2685 "DocType": "https://w3id.org/cwl/salad#DocType", | |
| 2686 "Documentation": "https://w3id.org/cwl/salad#Documentation", | |
| 2687 "Documented": "https://w3id.org/cwl/salad#Documented", | |
| 2688 "EnumSchema": "https://w3id.org/cwl/salad#EnumSchema", | |
| 2689 "JsonldPredicate": "https://w3id.org/cwl/salad#JsonldPredicate", | |
| 2690 "NamedType": "https://w3id.org/cwl/salad#NamedType", | |
| 2691 "PrimitiveType": "https://w3id.org/cwl/salad#PrimitiveType", | |
| 2692 "RecordField": "https://w3id.org/cwl/salad#RecordField", | |
| 2693 "RecordSchema": "https://w3id.org/cwl/salad#RecordSchema", | |
| 2694 "SaladEnumSchema": "https://w3id.org/cwl/salad#SaladEnumSchema", | |
| 2695 "SaladRecordField": "https://w3id.org/cwl/salad#SaladRecordField", | |
| 2696 "SaladRecordSchema": "https://w3id.org/cwl/salad#SaladRecordSchema", | |
| 2697 "SchemaDefinedType": "https://w3id.org/cwl/salad#SchemaDefinedType", | |
| 2698 "SpecializeDef": "https://w3id.org/cwl/salad#SpecializeDef", | |
| 2699 "array": "https://w3id.org/cwl/salad#array", | |
| 2700 "boolean": "http://www.w3.org/2001/XMLSchema#boolean", | |
| 2701 "documentation": "https://w3id.org/cwl/salad#documentation", | |
| 2702 "double": "http://www.w3.org/2001/XMLSchema#double", | |
| 2703 "enum": "https://w3id.org/cwl/salad#enum", | |
| 2704 "float": "http://www.w3.org/2001/XMLSchema#float", | |
| 2705 "int": "http://www.w3.org/2001/XMLSchema#int", | |
| 2706 "long": "http://www.w3.org/2001/XMLSchema#long", | |
| 2707 "null": "https://w3id.org/cwl/salad#null", | |
| 2708 "record": "https://w3id.org/cwl/salad#record", | |
| 2709 "string": "http://www.w3.org/2001/XMLSchema#string", | |
| 2710 } | |
| 2711 _rvocab = { | |
| 2712 "https://w3id.org/cwl/salad#Any": "Any", | |
| 2713 "https://w3id.org/cwl/salad#ArraySchema": "ArraySchema", | |
| 2714 "https://w3id.org/cwl/salad#DocType": "DocType", | |
| 2715 "https://w3id.org/cwl/salad#Documentation": "Documentation", | |
| 2716 "https://w3id.org/cwl/salad#Documented": "Documented", | |
| 2717 "https://w3id.org/cwl/salad#EnumSchema": "EnumSchema", | |
| 2718 "https://w3id.org/cwl/salad#JsonldPredicate": "JsonldPredicate", | |
| 2719 "https://w3id.org/cwl/salad#NamedType": "NamedType", | |
| 2720 "https://w3id.org/cwl/salad#PrimitiveType": "PrimitiveType", | |
| 2721 "https://w3id.org/cwl/salad#RecordField": "RecordField", | |
| 2722 "https://w3id.org/cwl/salad#RecordSchema": "RecordSchema", | |
| 2723 "https://w3id.org/cwl/salad#SaladEnumSchema": "SaladEnumSchema", | |
| 2724 "https://w3id.org/cwl/salad#SaladRecordField": "SaladRecordField", | |
| 2725 "https://w3id.org/cwl/salad#SaladRecordSchema": "SaladRecordSchema", | |
| 2726 "https://w3id.org/cwl/salad#SchemaDefinedType": "SchemaDefinedType", | |
| 2727 "https://w3id.org/cwl/salad#SpecializeDef": "SpecializeDef", | |
| 2728 "https://w3id.org/cwl/salad#array": "array", | |
| 2729 "http://www.w3.org/2001/XMLSchema#boolean": "boolean", | |
| 2730 "https://w3id.org/cwl/salad#documentation": "documentation", | |
| 2731 "http://www.w3.org/2001/XMLSchema#double": "double", | |
| 2732 "https://w3id.org/cwl/salad#enum": "enum", | |
| 2733 "http://www.w3.org/2001/XMLSchema#float": "float", | |
| 2734 "http://www.w3.org/2001/XMLSchema#int": "int", | |
| 2735 "http://www.w3.org/2001/XMLSchema#long": "long", | |
| 2736 "https://w3id.org/cwl/salad#null": "null", | |
| 2737 "https://w3id.org/cwl/salad#record": "record", | |
| 2738 "http://www.w3.org/2001/XMLSchema#string": "string", | |
| 2739 } | |
| 2740 | |
| 2741 strtype = _PrimitiveLoader((str, text_type)) | |
| 2742 inttype = _PrimitiveLoader(int) | |
| 2743 floattype = _PrimitiveLoader(float) | |
| 2744 booltype = _PrimitiveLoader(bool) | |
| 2745 None_type = _PrimitiveLoader(type(None)) | |
| 2746 Any_type = _AnyLoader() | |
| 2747 DocumentedLoader = _RecordLoader(Documented) | |
| 2748 PrimitiveTypeLoader = _EnumLoader(("null", "boolean", "int", "long", "float", "double", "string",)) | |
| 2749 AnyLoader = _EnumLoader(("Any",)) | |
| 2750 RecordFieldLoader = _RecordLoader(RecordField) | |
| 2751 RecordSchemaLoader = _RecordLoader(RecordSchema) | |
| 2752 EnumSchemaLoader = _RecordLoader(EnumSchema) | |
| 2753 ArraySchemaLoader = _RecordLoader(ArraySchema) | |
| 2754 JsonldPredicateLoader = _RecordLoader(JsonldPredicate) | |
| 2755 SpecializeDefLoader = _RecordLoader(SpecializeDef) | |
| 2756 NamedTypeLoader = _RecordLoader(NamedType) | |
| 2757 DocTypeLoader = _RecordLoader(DocType) | |
| 2758 SchemaDefinedTypeLoader = _RecordLoader(SchemaDefinedType) | |
| 2759 SaladRecordFieldLoader = _RecordLoader(SaladRecordField) | |
| 2760 SaladRecordSchemaLoader = _RecordLoader(SaladRecordSchema) | |
| 2761 SaladEnumSchemaLoader = _RecordLoader(SaladEnumSchema) | |
| 2762 DocumentationLoader = _RecordLoader(Documentation) | |
| 2763 array_of_strtype = _ArrayLoader(strtype) | |
| 2764 union_of_None_type_or_strtype_or_array_of_strtype = _UnionLoader((None_type, strtype, array_of_strtype,)) | |
| 2765 uri_strtype_True_False_None = _URILoader(strtype, True, False, None) | |
| 2766 union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype = _UnionLoader((PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, strtype,)) | |
| 2767 array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype = _ArrayLoader(union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype) | |
| 2768 union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype = _UnionLoader((PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, strtype, array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype,)) | |
| 2769 typedsl_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_2 = _TypeDSLLoader(union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype, 2) | |
| 2770 array_of_RecordFieldLoader = _ArrayLoader(RecordFieldLoader) | |
| 2771 union_of_None_type_or_array_of_RecordFieldLoader = _UnionLoader((None_type, array_of_RecordFieldLoader,)) | |
| 2772 idmap_fields_union_of_None_type_or_array_of_RecordFieldLoader = _IdMapLoader(union_of_None_type_or_array_of_RecordFieldLoader, 'name', 'type') | |
| 2773 enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader = _EnumLoader(("record",)) | |
| 2774 typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2 = _TypeDSLLoader(enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader, 2) | |
| 2775 uri_array_of_strtype_True_False_None = _URILoader(array_of_strtype, True, False, None) | |
| 2776 enum_d961d79c225752b9fadb617367615ab176b47d77Loader = _EnumLoader(("enum",)) | |
| 2777 typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2 = _TypeDSLLoader(enum_d961d79c225752b9fadb617367615ab176b47d77Loader, 2) | |
| 2778 uri_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_False_True_2 = _URILoader(union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype, False, True, 2) | |
| 2779 enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader = _EnumLoader(("array",)) | |
| 2780 typedsl_enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader_2 = _TypeDSLLoader(enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader, 2) | |
| 2781 union_of_None_type_or_strtype = _UnionLoader((None_type, strtype,)) | |
| 2782 uri_union_of_None_type_or_strtype_True_False_None = _URILoader(union_of_None_type_or_strtype, True, False, None) | |
| 2783 union_of_None_type_or_booltype = _UnionLoader((None_type, booltype,)) | |
| 2784 union_of_None_type_or_inttype = _UnionLoader((None_type, inttype,)) | |
| 2785 uri_strtype_False_False_1 = _URILoader(strtype, False, False, 1) | |
| 2786 uri_union_of_None_type_or_strtype_False_False_None = _URILoader(union_of_None_type_or_strtype, False, False, None) | |
| 2787 uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_None = _URILoader(union_of_None_type_or_strtype_or_array_of_strtype, False, False, None) | |
| 2788 union_of_None_type_or_strtype_or_JsonldPredicateLoader = _UnionLoader((None_type, strtype, JsonldPredicateLoader,)) | |
| 2789 union_of_None_type_or_Any_type = _UnionLoader((None_type, Any_type,)) | |
| 2790 array_of_SaladRecordFieldLoader = _ArrayLoader(SaladRecordFieldLoader) | |
| 2791 union_of_None_type_or_array_of_SaladRecordFieldLoader = _UnionLoader((None_type, array_of_SaladRecordFieldLoader,)) | |
| 2792 idmap_fields_union_of_None_type_or_array_of_SaladRecordFieldLoader = _IdMapLoader(union_of_None_type_or_array_of_SaladRecordFieldLoader, 'name', 'type') | |
| 2793 uri_union_of_None_type_or_strtype_or_array_of_strtype_False_False_1 = _URILoader(union_of_None_type_or_strtype_or_array_of_strtype, False, False, 1) | |
| 2794 array_of_SpecializeDefLoader = _ArrayLoader(SpecializeDefLoader) | |
| 2795 union_of_None_type_or_array_of_SpecializeDefLoader = _UnionLoader((None_type, array_of_SpecializeDefLoader,)) | |
| 2796 idmap_specialize_union_of_None_type_or_array_of_SpecializeDefLoader = _IdMapLoader(union_of_None_type_or_array_of_SpecializeDefLoader, 'specializeFrom', 'specializeTo') | |
| 2797 enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader = _EnumLoader(("documentation",)) | |
| 2798 typedsl_enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader_2 = _TypeDSLLoader(enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader, 2) | |
| 2799 union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader = _UnionLoader((SaladRecordSchemaLoader, SaladEnumSchemaLoader, DocumentationLoader,)) | |
| 2800 array_of_union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader = _ArrayLoader(union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader) | |
| 2801 union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader_or_array_of_union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader = _UnionLoader((SaladRecordSchemaLoader, SaladEnumSchemaLoader, DocumentationLoader, array_of_union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader,)) | |
| 2802 | |
| 2803 | |
| 2804 def load_document(doc, baseuri=None, loadingOptions=None): | |
| 2805 # type: (Any, Optional[Text], Optional[LoadingOptions]) -> Any | |
| 2806 if baseuri is None: | |
| 2807 baseuri = file_uri(os.getcwd()) + "/" | |
| 2808 if loadingOptions is None: | |
| 2809 loadingOptions = LoadingOptions() | |
| 2810 return _document_load(union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader_or_array_of_union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader, doc, baseuri, loadingOptions) | |
| 2811 | |
| 2812 | |
| 2813 def load_document_by_string(string, uri, loadingOptions=None): | |
| 2814 # type: (Any, Text, Optional[LoadingOptions]) -> Any | |
| 2815 result = yaml.round_trip_load(string, preserve_quotes=True) | |
| 2816 add_lc_filename(result, uri) | |
| 2817 | |
| 2818 if loadingOptions is None: | |
| 2819 loadingOptions = LoadingOptions(fileuri=uri) | |
| 2820 loadingOptions.idx[uri] = result | |
| 2821 | |
| 2822 return _document_load(union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader_or_array_of_union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader, result, uri, loadingOptions) |
