Пример #1
0
    def _parse_header(self):
        """
        Parse the start time of the profile and the sensor
        """
        # read the first bytes from the file
        header = self._stream_handle.read(HEADER_BYTES)

        match = WFP_E_COASTAL_FLAGS_HEADER_MATCHER.match(header)

        # parse the header
        if match is not None:

            # use the profile start time as the timestamp
            fields = struct.unpack('>II', match.group(2))
            timestamp = int(fields[1])
            self._timestamp = float(ntplib.system_to_ntp_time(timestamp))
            log.debug(self._start_data_particle_class)
            sample = self._extract_sample(self._start_data_particle_class,
                                          None,
                                          header, self._timestamp)

            if sample:
                # create particle
                self._increment_state(HEADER_BYTES)
                log.debug("Extracting header %s with read_state: %s", sample, self._read_state)
                self._saved_header = (sample, copy.copy(self._read_state))
        else:
            raise SampleException("File header does not match header regex")
    def _build_parsed_values(self):
        """
        Take something in the data format and turn it into
        a particle with the appropriate tag.
        @throws SampleException If there is a problem with sample creation
        """
        match = WFP_E_COASTAL_FLAGS_HEADER_MATCHER.match(self.raw_data)

        if not match:
            raise SampleException(
                "WfpEngStcImodemStartDataParticle: No regex match of parsed sample data: [%s]",
                self.raw_data)

        try:
            fields = struct.unpack('>II', match.group(2))
            sensor_start = int(fields[0])
            profile_start = int(fields[1])
            log.debug('Unpacked sensor start %d, profile start %d', sensor_start, profile_start)
        except (ValueError, TypeError, IndexError) as ex:
            raise SampleException("Error (%s) while decoding parameters in data: [%s]"
                                  % (ex, match.group(0)))

        result = [self._encode_value(WfpEngStcImodemStartDataParticleKey.SENSOR_START, sensor_start, int),
                  self._encode_value(WfpEngStcImodemStartDataParticleKey.PROFILE_START, profile_start, int)]
        log.debug('WfpEngStcImodemStartDataParticle: particle=%s', result)
        return result