Source code for janis_core.tool.documentation

from enum import Enum
from typing import Optional, Union, List, Dict


class DocumentationMeta:
    """
    Base class to provide doc tags with more information tags could be a
    """

    def __init__(self, doc: Optional[str]):
        self.doc = doc

    def __str__(self):
        return self.doc or ""


class InputQualityType(Enum):
    user = "user"
    static = "static"
    configuration = "configuration"


[docs]class InputDocumentation(DocumentationMeta):
[docs] def __init__( self, doc: Optional[str], quality: Union[InputQualityType, str] = InputQualityType.user, example: Optional[Union[str, List[str]]] = None, source: Optional[ Union[str, List[str], Dict[str, Union[str, List[str]]]] ] = None, skip_sourcing_secondary_files=False, ): """ Extended documentation for inputs :param doc: Documentation string :type doc: str :param quality: quality of input, whether the inputs are best classified by user (data), static (references), configuration (like constants, but tweakable) :type quality: InputQualityType | "user" | "static" | "configuration" :param example: An example of the filename, displayed in the generated example input.yaml :type example: str | List[str] :param source: A URI of this input, that Janis could localise if it's not provided. For example, you might want to specify a gs://<path> :type source: str | List[str] | Dict[str, str | List[str]] :param skip_sourcing_secondary_files: Skip localising the secondary files from the source. You might want to do this if the secondary files depend on the version of the tool (eg: BWA) :type skip_sourcing_secondary_files: bool """ super().__init__(doc) if quality is not None and not isinstance(quality, InputQualityType): quality = InputQualityType(quality) self.quality = quality self.example = example self.source = source self.skip_sourcing_secondary_files = skip_sourcing_secondary_files
@staticmethod def try_parse_from(doc: Union[str, Dict[str, str], any]): if doc is None or isinstance(doc, str): return InputDocumentation(doc=doc) elif isinstance(doc, InputDocumentation): return doc elif isinstance(doc, dict): return InputDocumentation(**doc) else: raise TypeError( f"Unexpected type when parsing InputDocumentation, expected " f"'Union[str, Dict[str, any], InputDocumentation]', received '{type(doc)}'." )
class OutputDocumentation(DocumentationMeta): def __init__(self, doc: Optional[str]): super().__init__(doc)