Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/schema_salad/main.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/main.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,397 +0,0 @@ -"""Command line interface to schema-salad.""" -from __future__ import absolute_import, print_function - -import argparse -import logging -import os -import sys -from typing import Any, Dict, List, Mapping, MutableSequence, Optional, Union, cast - -import pkg_resources # part of setuptools -import six -from rdflib.parser import Parser -from rdflib.plugin import register -from six.moves import urllib -from typing_extensions import Text # pylint: disable=unused-import - -from ruamel.yaml.comments import CommentedSeq - -from . import codegen, jsonld_context, schema -from .avro.schema import SchemaParseException -from .exceptions import ValidationException, to_one_line_messages -from .makedoc import makedoc -from .ref_resolver import Loader, file_uri -from .utils import json_dumps - -# move to a regular typing import when Python 3.3-3.6 is no longer supported - - -register("json-ld", Parser, "rdflib_jsonld.parser", "JsonLDParser") -_logger = logging.getLogger("salad") - - -def printrdf( - workflow, # type: str - wf, # type: Union[List[Dict[Text, Any]], Dict[Text, Any]] - ctx, # type: Dict[Text, Any] - sr, # type: str -): - # type: (...) -> None - g = jsonld_context.makerdf(workflow, wf, ctx) - print(g.serialize(format=sr, encoding="utf-8").decode("utf-8")) - - -def main(argsl=None): # type: (Optional[List[str]]) -> int - if argsl is None: - argsl = sys.argv[1:] - - parser = argparse.ArgumentParser() - parser.add_argument( - "--rdf-serializer", - help="Output RDF serialization format used by --print-rdf" - "(one of turtle (default), n3, nt, xml)", - default="turtle", - ) - - parser.add_argument( - "--skip-schemas", - action="store_true", - default=False, - help="If specified, ignore $schemas sections.", - ) - parser.add_argument( - "--strict-foreign-properties", - action="store_true", - help="Strict checking of foreign properties", - default=False, - ) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument( - "--print-jsonld-context", - action="store_true", - help="Print JSON-LD context for schema", - ) - exgroup.add_argument("--print-rdfs", action="store_true", help="Print RDF schema") - exgroup.add_argument("--print-avro", action="store_true", help="Print Avro schema") - - exgroup.add_argument( - "--print-rdf", - action="store_true", - help="Print corresponding RDF graph for document", - ) - exgroup.add_argument( - "--print-pre", action="store_true", help="Print document after preprocessing" - ) - exgroup.add_argument("--print-index", action="store_true", help="Print node index") - exgroup.add_argument( - "--print-metadata", action="store_true", help="Print document metadata" - ) - exgroup.add_argument( - "--print-inheritance-dot", - action="store_true", - help="Print graphviz file of inheritance", - ) - exgroup.add_argument( - "--print-fieldrefs-dot", - action="store_true", - help="Print graphviz file of field refs", - ) - - exgroup.add_argument( - "--codegen", - type=str, - metavar="language", - help="Generate classes in target language, currently supported: python, java", - ) - - parser.add_argument( - "--codegen-target", - type=str, - default=None, - help="Defaults to sys.stdout for python and ./ for Java", - ) - - parser.add_argument( - "--codegen-examples", - type=str, - metavar="directory", - default=None, - help="Directory of example documents for test case generation (Java only).", - ) - - exgroup.add_argument( - "--print-oneline", - action="store_true", - help="Print each error message in oneline", - ) - - exgroup.add_argument( - "--print-doc", action="store_true", help="Print HTML schema documentation page" - ) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument( - "--strict", - action="store_true", - help="Strict validation (unrecognized or out of place fields are error)", - default=True, - dest="strict", - ) - exgroup.add_argument( - "--non-strict", - action="store_false", - help="Lenient validation (ignore unrecognized fields)", - default=True, - dest="strict", - ) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--verbose", action="store_true", help="Default logging") - exgroup.add_argument( - "--quiet", action="store_true", help="Only print warnings and errors." - ) - exgroup.add_argument("--debug", action="store_true", help="Print even more logging") - - parser.add_argument( - "--only", - action="append", - help="Use with --print-doc, document only listed types", - ) - parser.add_argument( - "--redirect", - action="append", - help="Use with --print-doc, override default link for type", - ) - parser.add_argument( - "--brand", help="Use with --print-doc, set the 'brand' text in nav bar" - ) - parser.add_argument( - "--brandlink", help="Use with --print-doc, set the link for 'brand' in nav bar" - ) - parser.add_argument( - "--primtype", - default="#PrimitiveType", - help="Use with --print-doc, link to use for primitive types (string, int etc)", - ) - - parser.add_argument("schema", type=str, nargs="?", default=None) - parser.add_argument("document", type=str, nargs="?", default=None) - parser.add_argument( - "--version", "-v", action="store_true", help="Print version", default=None - ) - - args = parser.parse_args(argsl) - - if args.version is None and args.schema is None: - print("{}: error: too few arguments".format(sys.argv[0])) - return 1 - - if args.quiet: - _logger.setLevel(logging.WARN) - if args.debug: - _logger.setLevel(logging.DEBUG) - - pkg = pkg_resources.require("schema_salad") - if pkg: - if args.version: - print("{} Current version: {}".format(sys.argv[0], pkg[0].version)) - return 0 - else: - _logger.info("%s Current version: %s", sys.argv[0], pkg[0].version) - - # Get the metaschema to validate the schema - metaschema_names, metaschema_doc, metaschema_loader = schema.get_metaschema() - - # Load schema document and resolve refs - - schema_uri = args.schema - if not ( - urllib.parse.urlparse(schema_uri)[0] - and urllib.parse.urlparse(schema_uri)[0] in [u"http", u"https", u"file"] - ): - schema_uri = file_uri(os.path.abspath(schema_uri)) - schema_raw_doc = metaschema_loader.fetch(schema_uri) - - try: - schema_doc, schema_metadata = metaschema_loader.resolve_all( - schema_raw_doc, schema_uri - ) - except ValidationException as e: - _logger.error( - "Schema `%s` failed link checking:\n%s", - args.schema, - Text(e), - exc_info=(True if args.debug else False), - ) - _logger.debug("Index is %s", list(metaschema_loader.idx.keys())) - _logger.debug("Vocabulary is %s", list(metaschema_loader.vocab.keys())) - return 1 - except (RuntimeError) as e: - _logger.error( - "Schema `%s` read error:\n%s", - args.schema, - Text(e), - exc_info=(True if args.debug else False), - ) - return 1 - - if args.print_doc: - makedoc(args) - return 0 - - # Optionally print the schema after ref resolution - if not args.document and args.print_pre: - print(json_dumps(schema_doc, indent=4)) - return 0 - - if not args.document and args.print_index: - print(json_dumps(list(metaschema_loader.idx.keys()), indent=4)) - return 0 - - # Validate the schema document against the metaschema - try: - schema.validate_doc( - metaschema_names, schema_doc, metaschema_loader, args.strict - ) - except ValidationException as e: - _logger.error("While validating schema `%s`:\n%s", args.schema, Text(e)) - return 1 - - # Get the json-ld context and RDFS representation from the schema - metactx = schema.collect_namespaces(schema_metadata) - if "$base" in schema_metadata: - metactx["@base"] = schema_metadata["$base"] - if isinstance(schema_doc, CommentedSeq): - (schema_ctx, rdfs) = jsonld_context.salad_to_jsonld_context(schema_doc, metactx) - else: - raise ValidationException( - "Expected a CommentedSeq, got {}: {}.".format(type(schema_doc), schema_doc) - ) - - # Create the loader that will be used to load the target document. - document_loader = Loader(schema_ctx, skip_schemas=args.skip_schemas) - - if args.codegen: - codegen.codegen( - args.codegen, - cast(List[Dict[Text, Any]], schema_doc), - schema_metadata, - document_loader, - target=args.codegen_target, - examples=args.codegen_examples, - ) - return 0 - - # Make the Avro validation that will be used to validate the target - # document - if isinstance(schema_doc, MutableSequence): - avsc_obj = schema.make_avro(schema_doc, document_loader) - try: - avsc_names = schema.make_avro_schema_from_avro(avsc_obj) - except SchemaParseException as err: - _logger.error( - "Schema `%s` error:\n%s", - args.schema, - Text(err), - exc_info=((type(err), err, None) if args.debug else None), - ) - if args.print_avro: - print(json_dumps(avsc_obj, indent=4)) - return 1 - else: - _logger.error("Schema `%s` must be a list.", args.schema) - return 1 - - # Optionally print Avro-compatible schema from schema - if args.print_avro: - print(json_dumps(avsc_obj, indent=4)) - return 0 - - # Optionally print the json-ld context from the schema - if args.print_jsonld_context: - j = {"@context": schema_ctx} - print(json_dumps(j, indent=4, sort_keys=True)) - return 0 - - # Optionally print the RDFS graph from the schema - if args.print_rdfs: - print(rdfs.serialize(format=args.rdf_serializer).decode("utf-8")) - return 0 - - if args.print_metadata and not args.document: - print(json_dumps(schema_metadata, indent=4)) - return 0 - - if args.print_inheritance_dot: - schema.print_inheritance(schema_doc, sys.stdout) - return 0 - - if args.print_fieldrefs_dot: - schema.print_fieldrefs(schema_doc, document_loader, sys.stdout) - return 0 - - # If no document specified, all done. - if not args.document: - print("Schema `{}` is valid".format(args.schema)) - return 0 - - # Load target document and resolve refs - try: - uri = args.document - document, doc_metadata = document_loader.resolve_ref( - uri, strict_foreign_properties=args.strict_foreign_properties - ) - except ValidationException as e: - msg = to_one_line_messages(e) if args.print_oneline else six.text_type(e) - _logger.error( - "Document `%s` failed validation:\n%s", - args.document, - msg, - exc_info=args.debug, - ) - return 1 - - # Optionally print the document after ref resolution - if args.print_pre: - print(json_dumps(document, indent=4)) - return 0 - - if args.print_index: - print(json_dumps(list(document_loader.idx.keys()), indent=4)) - return 0 - - # Validate the user document against the schema - try: - schema.validate_doc( - avsc_names, - document, - document_loader, - args.strict, - strict_foreign_properties=args.strict_foreign_properties, - ) - except ValidationException as e: - msg = to_one_line_messages(e) if args.print_oneline else six.text_type(e) - _logger.error("While validating document `%s`:\n%s" % (args.document, msg)) - return 1 - - # Optionally convert the document to RDF - if args.print_rdf: - if isinstance(document, (Mapping, MutableSequence)): - printrdf(args.document, document, schema_ctx, args.rdf_serializer) - return 0 - else: - print("Document must be a dictionary or list.") - return 1 - - if args.print_metadata: - print(json_dumps(doc_metadata, indent=4)) - return 0 - - print("Document `{}` is valid".format(args.document)) - - return 0 - - -if __name__ == "__main__": - sys.exit(main(sys.argv[1:]))
