def test_create_aligned_datetime_var(self): """Test the create_aligned_datetime_var function.""" # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(5)}" result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 17, 10, 48)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 10, 0)) # Run result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 17, 3, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 0, 0)) # Run result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 16, 55, 0)) # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(15)}" result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 16, 45, 0))
def test_parse_time_with_timeslot_aligment_intervals_add(self): """Test the create_aligned_datetime_var function.""" # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(15,0,1)}" result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 0, 0)) # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(15,0,2)}" result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 15, 0)) # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(15,0,-1)}" result = create_aligned_datetime_var(filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 16, 30, 0))
def test_create_aligned_datetime_var_offsets(self): """Test the create_aligned_datetime_var function""" # Run filepattern = "{start_time:%Y%m%d%H%M%S|align(15,-2)}" result = create_aligned_datetime_var( filepattern, {'start_time': datetime(2015, 1, 9, 16, 59, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 0, 0)) filepattern = "{start_time:%Y%m%d%H%M%S|align(15,2)}" result = create_aligned_datetime_var( filepattern, {'start_time': datetime(2015, 1, 9, 17, 16, 0)}) # Assert self.assertEqual(result, datetime(2015, 1, 9, 17, 0, 0))
def parse_file_info(self, event): '''Parse satellite and orbit information from the filename. Message is sent, if a matching filepattern is found. ''' try: LOGGER.debug("filter: %s\t event: %s", self.file_parser.fmt, event.pathname) pathname_join = os.path.basename(event.pathname) if 'origin_inotify_base_dir_skip_levels' in self.custom_vars: pathname_list = event.pathname.split('/') pathname_join = "/".join(pathname_list[int( self.custom_vars['origin_inotify_base_dir_skip_levels']):]) else: LOGGER.debug( "No origin_inotify_base_dir_skip_levels in self.custom_vars" ) self.info = OrderedDict() self.info.update(self.file_parser.parse(pathname_join)) LOGGER.debug("Extracted: %s", str(self.info)) except ValueError: # Filename didn't match pattern, so empty the info dict LOGGER.info("Couldn't extract any usefull information") self.info = OrderedDict() else: self.info['uri'] = event.pathname self.info['uid'] = os.path.basename(event.pathname) self.info['sensor'] = self.instrument.split(',') LOGGER.debug("self.info['sensor']: " + str(self.info['sensor'])) if self.tbus_orbit and "orbit_number" in self.info: LOGGER.info("Changing orbit number by -1!") self.info["orbit_number"] -= 1 # replace values with corresponding aliases, if any are given if self.aliases: info = self.info.copy() for key in info: if key in self.aliases: self.info['orig_' + key] = self.info[key] self.info[key] = self.aliases[key][str(self.info[key])] # add start_time and end_time if not present try: base_time = self.info["time"] except KeyError: try: base_time = self.info["nominal_time"] except KeyError: base_time = self.info["start_time"] if "start_time" not in self.info: self.info["start_time"] = base_time if "start_date" in self.info: self.info["start_time"] = \ dt.datetime.combine(self.info["start_date"].date(), self.info["start_time"].time()) if "end_date" not in self.info: self.info["end_date"] = self.info["start_date"] del self.info["start_date"] if "end_date" in self.info: self.info["end_time"] = \ dt.datetime.combine(self.info["end_date"].date(), self.info["end_time"].time()) del self.info["end_date"] if "end_time" not in self.info and self.granule_length > 0: self.info["end_time"] = base_time + \ dt.timedelta(seconds=self.granule_length) if "end_time" in self.info: while self.info["start_time"] > self.info["end_time"]: self.info["end_time"] += dt.timedelta(days=1) if self.custom_vars is not None: for var_name in self.custom_vars: var_pattern = self.custom_vars[var_name] var_val = None if '%' in var_pattern: var_val = helper_functions.create_aligned_datetime_var( var_pattern, self.info) if var_val is None: var_val = compose(var_pattern, self.info) self.info[var_name] = var_val