def check(self, etree): dataset = get_dataset(etree) props = {} for prop_name in drs_prop_map: prop = get_property(dataset, prop_name) if prop_name == 'dataset_version': prop = int(prop) elif prop_name == 'ensemble': #!TODO: refactor this to share code with drslib.translate mo = re.match(r'(?:r(\d+))?(?:i(\d+))?(?:p(\d+))?', prop) if not mo: raise InvalidThreddsException('Unrecognised ensemble syntax %s' % prop) (r, i, p) = mo.groups() prop = tuple(x and int(x) for x in (r, i, p)) props[drs_prop_map[prop_name]] = prop drs = CmipDRS(**props) # If present in environ check against drs_id if 'drs_id' in self.environ: if drs.to_dataset_id() != self.environ['drs_id']: raise InvalidThreddsException("drs properties inconsistent with drs_id for dataset %s" % dataset.get('ID')) self.environ['drs'] = drs
def init_drs(self, drs=None): if drs is None: drs = CmipDRS() drs.activity = 'cmip3' drs.version = 1 drs.product = 'output' return drs