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