Exemplo n.º 1
0
def encode(doc):
    """Encodes a document.

    :param doc: Document being encoded.
    :type doc: object

    :returns: An encoded document representation.
    :rtype: unicode

    """
    if type(doc) not in _PAGE_FACTORIES:
        raise ValueError("PDF encoding unsupported for documents of type {}.".format(type(doc)))

    # Ensure archive is initialized.
    pyesdoc.archive.init()

    # Ensure document is extended.
    pyesdoc.extend(doc)

    # Initialise PDF output.
    u.story = []
    u.set_frontis(doc)

    # Set document page factory & emit pages.
    page_factory = _PAGE_FACTORIES[type(doc)]
    page_factory(doc)

    return u.get_content()
Exemplo n.º 2
0
def encode(doc):
    """Encodes a document to HTML.

    :param object doc: Document being encoded.

    :returns: An HTML representation of a document.
    :rtype: str

    """
    # Convert to sorted iterable.
    try:
        iter(doc)
    except TypeError:
        document_set = [doc]
    else:
        document_set = sorted(doc, key=lambda d: d.meta.sort_key)

    # Filter out documents without a matching template.
    document_set = [d for d in document_set if type(doc) in TEMPLATE_TYPE_MAPPINGS]

    # Ensure that documents are extended.
    for document in document_set:
        pyesdoc.extend(document)

    # Ensure templates are initialized.
    _init_templates()

    # Return generated template.
    return _DOCUMENT_SET_TEMPLATE.generate(
        document_set=document_set,
        document_group_set=_get_group_set(document_set),
        generate_document=_generate)
Exemplo n.º 3
0
    def get_document(self, extend=True):
        """Returns deserialized document.

        :returns: Deserialized archived document.
        :rtype: object

        """
        # Read from file system.
        try:
            document = pyesdoc.read(self.path)
        except Exception as err:
            raise exceptions.LoadingException(err)

        # Parse - performs project/source specific processing.
        try:
            pyesdoc.archive.parse(document, self.encoding, self.project, self.source)
        except Exception as err:
            raise exceptions.ParsingException(err)

        # Extend - performs generic processing.
        if extend:
            try:
                pyesdoc.extend(document)
            except exceptions.ExtendingException as err:
                raise err
            except Exception as err:
                raise exceptions.ExtendingException(err)

        return document
Exemplo n.º 4
0
    def get_document(self, extend=True):
        """Returns deserialized document.

        :returns: Deserialized archived document.
        :rtype: object

        """
        # Read from file system.
        try:
            document = pyesdoc.read(self.path)
        except Exception as err:
            raise exceptions.LoadingException(err)

        # Parse - performs project/source specific processing.
        try:
            pyesdoc.archive.parse(document, self.encoding, self.project,
                                  self.source)
        except Exception as err:
            raise exceptions.ParsingException(err)

        # Extend - performs generic processing.
        if extend:
            try:
                pyesdoc.extend(document)
            except exceptions.ExtendingException as err:
                raise err
            except Exception as err:
                raise exceptions.ExtendingException(err)

        return document
Exemplo n.º 5
0
def init(institution_id):
    """Initialises seedings from institutional seeding config files.

    :param str institution_id: ID of institution being processed.

    """
    # Reset.
    global DOCUMENTS
    DOCUMENTS = list()

    # Set root folder path.
    fpath = os.getenv('CMIP6_HOME')
    fpath = os.path.join(fpath, 'repos')
    fpath = os.path.join(fpath, 'institutional')
    fpath = os.path.join(fpath, institution_id)
    fpath = os.path.join(fpath, 'cmip5')
    fpath = os.path.join(fpath, 'models')
    if not os.path.exists(fpath):
        return

    # Cache each model's cim document.
    for model_id in os.listdir(fpath):
        path = os.path.join(fpath, model_id)
        path = os.path.join(path, 'cim')
        if not os.path.exists(path):
            continue

        # Cache extended documents.
        for fname in os.listdir(path):
            doc_path = os.path.join(path, fname)
            DOCUMENTS.append(pyesdoc.extend(pyesdoc.read(doc_path)))

    return len(DOCUMENTS) > 0
Exemplo n.º 6
0
def get_doc(mod):
    """Returns a test document."""
    # Reset module state.
    tt.reset(mod)

    # Create.
    doc = _decode_from_xml_metafor_cim_v1(mod.DOC_FILE, mod.DOC_TYPE,
                                          mod.DOC_PROJECT, mod.DOC_INSTITUTE)

    # Extend.
    pyesdoc.extend(doc)

    # Verify.
    assert_doc(mod, doc)

    return doc
Exemplo n.º 7
0
def init(institution_id):
    """Initialises seedings from institutional seeding config files.

    :param str institution_id: ID of institution being processed.

    """
    # Reset.
    global DOCUMENTS
    DOCUMENTS = list()

    # Set root folder path.
    fpath = os.getenv('ESDOC_HOME')
    fpath = os.path.join(fpath, 'repos')
    fpath = os.path.join(fpath, 'institutional')
    fpath = os.path.join(fpath, institution_id)
    fpath = os.path.join(fpath, 'cmip5')
    fpath = os.path.join(fpath, 'models')
    if not os.path.exists(fpath):
        return

    # Cache each model's cim document.
    for model_id in os.listdir(fpath):
        path = os.path.join(fpath, model_id)
        path = os.path.join(path, 'cim')
        if not os.path.exists(path):
            continue

        # Cache extended documents.
        for fname in os.listdir(path):
            doc_path = os.path.join(path, fname)
            DOCUMENTS.append(pyesdoc.extend(pyesdoc.read(doc_path)))

    return len(DOCUMENTS) > 0
Exemplo n.º 8
0
def encode(doc):
    """Encodes a document to HTML.

    :param object doc: Document being encoded.

    :returns: An HTML representation of a document.
    :rtype: str

    """
    # Convert to iterable.
    try:
        iter(doc)
    except TypeError:
        document_set = [doc]
    else:
        document_set = doc

    # Filter out fragments & non-templated documents.
    document_set = [d for d in document_set if hasattr(d, "meta")]
    document_set = [d for d in document_set if type(d) in TEMPLATE_TYPE_MAPPINGS]

    # Escape if no documents.
    if not document_set:
        return

    # Sort.
    document_set = sorted(document_set, key=lambda d: d.meta.sort_key)

    # Ensure documents are extended.
    for document in document_set:
        pyesdoc.extend(document)

    # Ensure templates are initialized.
    if isinstance(_DOCUMENT_SET_TEMPLATE, str):
        _init_templates()

    # Return generated template.
    try:
        return _DOCUMENT_SET_TEMPLATE.generate(
            document_set=document_set,
            document_group_set=_get_group_set(document_set),
            generate_document=_generate,
            pyesdoc=pyesdoc
            )
    except Exception as error:
        raise EncodingException('html', doc, error)
Exemplo n.º 9
0
def encode(doc):
    """Encodes a document to HTML.

    :param object doc: Document being encoded.

    :returns: An HTML representation of a document.
    :rtype: str

    """
    # Convert to iterable.
    try:
        iter(doc)
    except TypeError:
        document_set = [doc]
    else:
        document_set = doc

    # Filter out fragments & non-templated documents.
    document_set = [d for d in document_set if hasattr(d, "meta") and \
                                               isinstance(d, tuple(_TEMPLATE_TYPE_MAPPINGS.keys()))]

    # Escape if no documents.
    if not document_set:
        return

    # Sort.
    document_set = sorted(document_set, key=lambda d: d.meta.sort_key)

    # Extend.
    for document in document_set:
        pyesdoc.extend(document)

    # JIT initialize templates.
    if isinstance(_DOCUMENT_SET_TEMPLATE, str):
        _init_templates()

    # Return generated template.
    try:
        return _DOCUMENT_SET_TEMPLATE.generate(
            document_set=document_set,
            document_group_set=_get_group_set(document_set),
            generate_document=_generate,
            pyesdoc=pyesdoc)
    except Exception as error:
        raise exceptions.EncodingException('html', doc, error)
Exemplo n.º 10
0
def get_doc(mod):
    """Returns a test document."""
    # Reset module state.
    tt.reset(mod)

    # Create.
    doc = _decode_from_xml_metafor_cim_v1(mod.DOC_FILE,
                                          mod.DOC_TYPE,
                                          mod.DOC_PROJECT,
                                          mod.DOC_INSTITUTE)

    # Extend.
    pyesdoc.extend(doc)

    # Verify.
    assert_doc(mod, doc)

    return doc
Exemplo n.º 11
0
def _set_test_document():
	"""Returns a test document.

	"""
	global _DOC

	_DOC = pyesdoc.create(
		cim.v2.NumericalExperiment, project="test-project", source="unit-test")
	_DOC.canonical_name = "anexp"
	_DOC.name = "an experiment"
	_DOC.long_name = "yet another experiment"
	_DOC.rationale = "to state the bleeding obvious"
	_DOC.meta.id = unicode(_DOC.meta.id)
	_DOC.meta.version += 1
	_DOC.required_period = pyesdoc.create(
		cim.v2.TemporalConstraint, project="test-project", source="unit-test")
	_DOC.required_period.is_conformance_requested = False
	_DOC.required_period.meta.id = unicode(_DOC.required_period.meta.id)
	_DOC.required_period.name = "too long"

	pyesdoc.extend(_DOC)
Exemplo n.º 12
0
        def _validate_request_body():
            """Validates request body.

            """
            # Decode document.
            doc = pyesdoc.decode(self.request.body, 'json')
            if not doc:
                raise exceptions.DocumentDecodingException()

            # Minimally validate document.
            if not pyesdoc.is_valid(doc):
                raise exceptions.DocumentInvalidException()

            # Validate document version.
            if doc.meta.version <= 0:
                raise exceptions.DocumentInvalidException("Version must be > 0")

            # Validate document publishing state.
            if pyesdoc.archive.exists(doc.meta.id, doc.meta.version):
                raise exceptions.DocumentPublishedException()

            # Validation passed therefore cache decoded & extended payload.
            self.doc = pyesdoc.extend(doc)