Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/schema_salad/codegen.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/schema_salad/codegen.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -"""Generate langauge specific loaders for a particular SALAD schema.""" -import sys -from io import open -from typing import Any, Dict, List, MutableMapping, Optional - -from typing_extensions import Text # pylint: disable=unused-import - -from . import schema -from .codegen_base import CodeGenBase -from .exceptions import SchemaSaladException -from .java_codegen import JavaCodeGen -from .python_codegen import PythonCodeGen -from .ref_resolver import Loader # pylint: disable=unused-import -from .schema import shortname -from .utils import aslist - -# move to a regular typing import when Python 3.3-3.6 is no longer supported - - -def codegen( - lang, # type: str - i, # type: List[Dict[Text, Any]] - schema_metadata, # type: Dict[Text, Any] - loader, # type: Loader - target=None, # type: Optional[str] - examples=None, # type: Optional[str] -): # type: (...) -> None - """Generate classes with loaders for the given Schema Salad description.""" - - j = schema.extend_and_specialize(i, loader) - - gen = None # type: Optional[CodeGenBase] - if lang == "python": - if target: - dest = open(target, mode="w", encoding="utf-8") - else: - dest = sys.stdout - gen = PythonCodeGen(dest) - elif lang == "java": - gen = JavaCodeGen( - schema_metadata.get("$base", schema_metadata.get("id")), - target=target, - examples=examples, - ) - else: - raise SchemaSaladException( - "Unsupported code generation language '{}'".format(lang) - ) - assert gen is not None - - gen.prologue() - - document_roots = [] - - for rec in j: - if rec["type"] in ("enum", "record"): - gen.type_loader(rec) - gen.add_vocab(shortname(rec["name"]), rec["name"]) - - for rec in j: - if rec["type"] == "enum": - for symbol in rec["symbols"]: - gen.add_vocab(shortname(symbol), symbol) - - if rec["type"] == "record": - if rec.get("documentRoot"): - document_roots.append(rec["name"]) - - field_names = [] - for field in rec.get("fields", []): - field_names.append(shortname(field["name"])) - - idfield = "" - for field in rec.get("fields", []): - if field.get("jsonldPredicate") == "@id": - idfield = field.get("name") - - gen.begin_class( - rec["name"], - aslist(rec.get("extends", [])), - rec.get("doc", ""), - rec.get("abstract", False), - field_names, - idfield, - ) - gen.add_vocab(shortname(rec["name"]), rec["name"]) - - for field in rec.get("fields", []): - if field.get("jsonldPredicate") == "@id": - fieldpred = field["name"] - optional = bool("https://w3id.org/cwl/salad#null" in field["type"]) - uri_loader = gen.uri_loader( - gen.type_loader(field["type"]), True, False, None - ) - gen.declare_id_field( - fieldpred, uri_loader, field.get("doc"), optional - ) - break - - for field in rec.get("fields", []): - optional = bool("https://w3id.org/cwl/salad#null" in field["type"]) - type_loader = gen.type_loader(field["type"]) - jld = field.get("jsonldPredicate") - fieldpred = field["name"] - if isinstance(jld, MutableMapping): - ref_scope = jld.get("refScope") - - if jld.get("typeDSL"): - type_loader = gen.typedsl_loader(type_loader, ref_scope) - elif jld.get("_type") == "@id": - type_loader = gen.uri_loader( - type_loader, jld.get("identity", False), False, ref_scope - ) - elif jld.get("_type") == "@vocab": - type_loader = gen.uri_loader( - type_loader, False, True, ref_scope - ) - - map_subject = jld.get("mapSubject") - if map_subject: - type_loader = gen.idmap_loader( - field["name"], - type_loader, - map_subject, - jld.get("mapPredicate"), - ) - - if "_id" in jld and jld["_id"][0] != "@": - fieldpred = jld["_id"] - - if jld == "@id": - continue - - gen.declare_field(fieldpred, type_loader, field.get("doc"), optional) - - gen.end_class(rec["name"], field_names) - - root_type = list(document_roots) - root_type.append({"type": "array", "items": document_roots}) - - gen.epilogue(gen.type_loader(root_type))
