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