Exemple #1
0
def _set_base_classes(ontology):
    """Sets base classes.

    """
    for cls in [c for c in ontology.classes if c.base]:
        base_cls = ontology.get_type(cls.base)
        if base_cls:
            cls.base = base_cls
        else:
            msg = "Base class not found :: class = {0}.{1} :: base = {2}"
            msg = msg.format(cls.package, cls, cls.base)
            utils.log(msg)
Exemple #2
0
    def _parse_realm(self, realm):
        """Parses a realm.

        """
        # Raise realm parse event.
        if self.verbose:
            log("parsing: {}".format(realm))
        self.on_realm_parse(realm)

        # Parse child processes.
        processes = sorted(realm.processes, key = lambda p: p.name)
        for process in processes:
            self._parse_process(realm, process)
Exemple #3
0
    def _parse_process(self, realm, process):
        """Parses a realm process.

        """
        # Raise process parse event.
        if self.verbose:
            log("parsing: {}".format(process))
        self.on_process_parse(realm, process)

        # Parse child sub-processes.
        sub_processes = sorted(process.sub_processes, key = lambda sp: sp.name)
        for sub_process in sub_processes:
            self._parse_subprocess(realm, process, sub_process)
Exemple #4
0
    def parse(self):
        """Parses the CMIP6 vocabulary raising events as it does so.

        """
        # Instantiate vocab wrapper.
        vocab = Vocab()

        # Raise vocab parse event.
        if self.verbose:
            log("parsing vocabulary --> {}".format(vocab))
        self.on_vocab_parse(vocab)

        # Parse child realms.
        realms = vocab.realms
        if self.realm_filter:
            realms = [d for d in realms if self.realm_filter == d.name]
        for realm in realms:
            self._parse_realm(realm)
Exemple #5
0
    def _parse_subprocess(self, realm, process, sub_process):
        """Parses a realm sub process.

        """
        # Raise sub-process parse event.
        if self.verbose:
            log("parsing: {}".format(sub_process))
        self.on_subprocess_parse(process, sub_process)

        # Iterate set of sub-process details.
        for detail in sub_process.details:
            # Raise sub-process detail parse event.
            if self.verbose:
                log("parsing: {}".format(detail))
            self.on_detail_parse(sub_process, detail)

            # Iterate set of detail properties.
            for detail_property in detail.properties:
                # Raise detail-property parse event.
                if self.verbose:
                    log("parsing: {}".format(detail_property))
                self.on_detail_property_parse(detail, detail_property)