Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/xml/validation.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/planemo/xml/validation.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -"""Module describing abstractions for validating XML content.""" -import abc -import subprocess -from collections import namedtuple - -from galaxy.tool_util.deps.commands import which -from galaxy.util import unicodify -try: - from lxml import etree -except ImportError: - etree = None - -XMLLINT_COMMAND = "xmllint --noout --schema {0} {1} 2>&1" -INSTALL_VALIDATOR_MESSAGE = ("This feature requires an external dependency " - "to function, pleaes install xmllint (e.g 'brew " - "install libxml2' or 'apt-get install " - "libxml2-utils'.") - - -class XsdValidator(object): - """Class allowing validation of XML files against XSD schema.""" - - __metaclass__ = abc.ABCMeta - - @abc.abstractmethod - def validate(self, schema_path, target_path): - """Validate ``target_path`` against ``schema_path``. - - :return type: ValidationResult - """ - - @abc.abstractmethod - def enabled(self): - """Return True iff system has dependencies for this validator. - - :return type: bool - """ - - -ValidationResult = namedtuple("ValidationResult", ["passed", "output"]) - - -class LxmlValidator(XsdValidator): - """Validate XSD files using lxml library.""" - - def validate(self, schema_path, target_path): - try: - xsd_doc = etree.parse(schema_path) - xsd = etree.XMLSchema(xsd_doc) - xml = etree.parse(target_path) - passed = xsd.validate(xml) - return ValidationResult(passed, xsd.error_log) - except etree.XMLSyntaxError as e: - return ValidationResult(False, unicodify(e)) - - def enabled(self): - return etree is not None - - -class XmllintValidator(XsdValidator): - """Validate XSD files with the external tool xmllint.""" - - def validate(self, schema_path, target_path): - command = XMLLINT_COMMAND.format(schema_path, target_path) - p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - stdout, _ = p.communicate() - passed = p.returncode == 0 - return ValidationResult(passed, stdout) - - def enabled(self): - return bool(which("xmllint")) - - -VALIDATORS = [LxmlValidator(), XmllintValidator()] - - -def get_validator(require=True): - """Return a :class:`XsdValidator` object based on available dependencies.""" - for validator in VALIDATORS: - if validator.enabled(): - return validator - - if require: - raise Exception(INSTALL_VALIDATOR_MESSAGE) - - return None - - -__all__ = ( - "get_validator", - "XsdValidator", -)
