예제 #1
0
    def test(self):
        env.DIR_DATA = ocgis.env.DIR_TEST_DATA

        daymet = self.test_data.get_rd('daymet_tmax')
        tas = self.test_data.get_rd('cancm4_tas')

        uris = [daymet.uri,
                tas.uri]
        variables = ['foo1', 'foo2']
        rdc = RequestDatasetCollection()
        for uri, variable in zip(uris, variables):
            rd = RequestDataset(uri, variable)
            rdc.update(rd)
        self.assertEqual([1, 2], [rd.did for rd in rdc.values()])

        variables = ['foo1', 'foo1']
        rdc = RequestDatasetCollection()
        for ii, (uri, variable) in enumerate(zip(uris, variables)):
            rd = RequestDataset(uri, variable)
            if ii == 1:
                with self.assertRaises(KeyError):
                    rdc.update(rd)
            else:
                rdc.update(rd)

        aliases = ['a1', 'a2']
        for uri, variable, alias in zip(uris, variables, aliases):
            rd = RequestDataset(uri, variable, alias=alias)
            rdc.update(rd)
        for row in rdc.values():
            self.assertIsInstance(row, RequestDataset)
        self.assertIsInstance(rdc.first(), RequestDataset)
        self.assertIsInstance(rdc['a2'], RequestDataset)
예제 #2
0
    def __init__(self, init_value):
        if isinstance(init_value, self.__class__):
            # Allow the dataset object to be initialized by an instance of itself.
            self.__dict__ = init_value.__dict__
        else:
            if init_value is not None:
                if isinstance(init_value, RequestDatasetCollection):
                    init_value = deepcopy(init_value)
                else:
                    if isinstance(init_value, (RequestDataset, dict, Field)):
                        itr = [init_value]
                    elif type(init_value) in [list, tuple]:
                        itr = init_value
                    else:
                        should_raise = True
                        try:
                            import ESMF
                        except ImportError:
                            # ESMF is not a required library
                            ocgis_lh('Could not import ESMF library.', level=logging.WARN)
                        else:
                            if isinstance(init_value, ESMF.Field):
                                from ocgis.regrid.base import get_ocgis_field_from_esmf_field

                                field = get_ocgis_field_from_esmf_field(init_value)
                                itr = [field]
                                should_raise = False
                        if should_raise:
                            raise DefinitionValidationError(self, 'Type not accepted: {0}'.format(type(init_value)))
                    rdc = RequestDatasetCollection()
                    for rd in itr:
                        if not isinstance(rd, Field):
                            rd = deepcopy(rd)
                        try:
                            rdc.update(rd)
                        except NoDimensionedVariablesFound:
                            if rd._name is None:
                                msg = messages.M2.format(rd.uri)
                                raise DefinitionValidationError(self, msg)
                            else:
                                raise
                    init_value = rdc
            else:
                init_value = init_value
            super(Dataset, self).__init__(init_value)
예제 #3
0
 def __init__(self,arg):
     if arg is not None:
         if isinstance(arg,RequestDatasetCollection):
             init_value = arg
         else:
             if isinstance(arg,RequestDataset):
                 itr = [arg]
             elif isinstance(arg,dict):
                 itr = [arg]
             else:
                 itr = arg
             rdc = RequestDatasetCollection()
             for rd in itr:
                 rdc.update(rd)
             init_value = rdc
     else:
         init_value = arg
     super(Dataset,self).__init__(init_value)
예제 #4
0
파일: definition.py 프로젝트: cjh1/ocgis
 def __init__(self,arg):
     if arg is not None:
         if isinstance(arg,RequestDatasetCollection):
             init_value = arg
         else:
             if isinstance(arg,RequestDataset):
                 itr = [arg]
             elif isinstance(arg,dict):
                 itr = [arg]
             else:
                 itr = arg
             rdc = RequestDatasetCollection()
             for rd in itr:
                 rdc.update(rd)
             init_value = rdc
         ## dereference any prior dataset connections
         for rd in init_value:
             rd._ds = None
     else:
         init_value = arg
     super(Dataset,self).__init__(init_value)
예제 #5
0
    def test_update(self):
        rd = self.test_data.get_rd('cancm4_tas')
        rd.did = 10
        field = rd.get()
        self.assertEqual(field.uid, 10)
        field.uid = 20

        rdc = RequestDatasetCollection()
        rdc.update(rd)
        # name is already in collection and should yield a key error
        with self.assertRaises(KeyError):
            rdc.update(field)
        field.name = 'tas2'
        rdc.update(field)

        # add another object and check the increment
        field2 = deepcopy(field)
        field2.name = 'hanzel'
        field2.uid = None
        rdc.update(field2)
        self.assertEqual(field2.uid, 21)