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()
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)
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
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
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
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
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)
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)
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)
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)