Exemple #1
0
    def _build_parser(self, parser_state, stream_in, data_key):
        """
        Build the requested parser based on the data key
        @param parser_state starting parser state to pass to parser
        @param stream_in Handle of open file to pass to parser
        @param stream_in Filename string to pass to parser
        @param data_key Key to determine which parser type is built
        """

        #
        # Build the telemetered parser if requested.
        #
        if data_key == DataTypeKey.CTDMO_GHQR_SIO_MULE:
            config = self._parser_config[data_key]
            config.update({
                DataSetDriverConfigKeys.PARTICLE_MODULE:
                'mi.dataset.parser.ctdmo',
                DataSetDriverConfigKeys.PARTICLE_CLASS: [
                    'CtdmoTelemeteredInstrumentDataParticle',
                    'CtdmoTelemeteredOffsetDataParticle'
                ]
            })
            log.debug("MYCONFIG Telemetered: CONFIG %s, STATE %s", config,
                      parser_state)

            parser = CtdmoTelemeteredParser(
                config, stream_in, parser_state,
                lambda state: self._save_parser_state(state, data_key),
                self._data_callback, self._sample_exception_callback)

            if parser is None:
                raise ConfigurationException(
                    'Unable to build CTDMO Telemetered Parser')

        #
        # Build the recovered parser for CO data if requested.
        #
        elif data_key == DataTypeKey.CTDMO_GHQR_CO:
            config = self._parser_config[data_key]
            config.update({
                DataSetDriverConfigKeys.PARTICLE_MODULE:
                'mi.dataset.parser.ctdmo',
                DataSetDriverConfigKeys.PARTICLE_CLASS:
                'CtdmoRecoveredOffsetDataParticle'
            })
            log.debug("MYCONFIG CO Recovered:CONFIG %s, STATE %s", config,
                      parser_state)

            parser = CtdmoRecoveredCoParser(
                config, stream_in, parser_state,
                lambda state, ingested: self._save_parser_state(
                    state, data_key, ingested), self._data_callback,
                self._sample_exception_callback)

            if parser is None:
                raise ConfigurationException(
                    'Unable to build CTDMO Recovered CO Parser')

        #
        # Build the recovered parser for CT data if requested.
        #
        elif data_key == DataTypeKey.CTDMO_GHQR_CT:
            config = self._parser_config[data_key]
            config.update({
                DataSetDriverConfigKeys.PARTICLE_MODULE:
                'mi.dataset.parser.ctdmo',
                DataSetDriverConfigKeys.PARTICLE_CLASS:
                'CtdmoRecoveredInstrumentDataParticle'
            })
            log.debug("MYCONFIG CT Recovered: CONFIG %s, STATE %s", config,
                      parser_state)

            parser = CtdmoRecoveredCtParser(
                config, stream_in, parser_state,
                lambda state, ingested: self._save_parser_state(
                    state, data_key, ingested), self._data_callback,
                self._sample_exception_callback)

            if parser is None:
                raise ConfigurationException(
                    'Unable to build CTDMO Recovered CT Parser')

        #
        # Not one of the keys we recognize?
        # No parser for you!
        #
        else:
            raise ConfigurationException(
                'CTDMO Parser configuration incorrect %s', data_key)

        return parser