コード例 #1
0
    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))
コード例 #2
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))
コード例 #3
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))
コード例 #4
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