def _register_sensor_from_pack(self, pack, sensor): sensor_metadata_file_path = sensor LOG.debug("Loading sensor from %s.", sensor_metadata_file_path) content = self._meta_loader.load(file_path=sensor_metadata_file_path) pack_field = content.get("pack", None) if not pack_field: content["pack"] = pack pack_field = pack if pack_field != pack: raise Exception( 'Model is in pack "%s" but field "pack" is different: %s' % (pack, pack_field) ) entry_point = content.get("entry_point", None) if not entry_point: raise ValueError("Sensor definition missing entry_point") # Add in "metadata_file" attribute which stores path to the pack metadata file relative to # the pack directory metadata_file = content_utils.get_relative_path_to_pack_file( pack_ref=pack, file_path=sensor, use_pack_cache=True ) content["metadata_file"] = metadata_file # Pass override information altered = self._override_loader.override(pack, "sensors", content) sensors_dir = os.path.dirname(sensor_metadata_file_path) sensor_file_path = os.path.join(sensors_dir, entry_point) artifact_uri = "file://%s" % (sensor_file_path) content["artifact_uri"] = artifact_uri content["entry_point"] = entry_point sensor_api = SensorTypeAPI(**content) sensor_model = SensorTypeAPI.to_model(sensor_api) sensor_types = SensorType.query(pack=sensor_model.pack, name=sensor_model.name) if len(sensor_types) >= 1: sensor_type = sensor_types[0] LOG.debug( "Found existing sensor id:%s with name:%s. Will update it.", sensor_type.id, sensor_type.name, ) sensor_model.id = sensor_type.id try: sensor_model = SensorType.add_or_update(sensor_model) except: LOG.exception("Failed creating sensor model for %s", sensor) return sensor_model, altered
def test_to_sensor_db_model_with_trigger_types(self): sensor_meta = { 'artifact_uri': 'file:///data/st2contrib/packs/jira/sensors/jira_sensor.py', 'class_name': 'JIRASensor', 'pack': 'jira', 'trigger_types': [{'pack': 'jira', 'name': 'issue_created', 'parameters': {}}] } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertListEqual(sensor_model.trigger_types, ['mock.trigger_ref'])
def test_to_sensor_db_model_with_trigger_types(self): sensor_meta = { "artifact_uri": "file:///data/st2contrib/packs/jira/sensors/jira_sensor.py", "class_name": "JIRASensor", "pack": "jira", "trigger_types": [{"pack": "jira", "name": "issue_created", "parameters": {}}], } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertListEqual(sensor_model.trigger_types, ["mock.trigger_ref"])
def test_to_sensor_db_model_no_trigger_types(self): sensor_meta = { 'artifact_uri': 'file:///data/st2contrib/packs/jira/sensors/jira_sensor.py', 'class_name': 'JIRASensor', 'pack': 'jira' } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertEqual(sensor_model.name, sensor_meta['class_name']) self.assertEqual(sensor_model.pack, sensor_meta['pack']) self.assertEqual(sensor_model.artifact_uri, sensor_meta['artifact_uri']) self.assertListEqual(sensor_model.trigger_types, [])
def test_to_sensor_db_model_no_trigger_types(self): sensor_meta = { "artifact_uri": "file:///data/st2contrib/packs/jira/sensors/jira_sensor.py", "class_name": "JIRASensor", "pack": "jira", } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertEqual(sensor_model.name, sensor_meta["class_name"]) self.assertEqual(sensor_model.pack, sensor_meta["pack"]) self.assertEqual(sensor_model.artifact_uri, sensor_meta["artifact_uri"]) self.assertListEqual(sensor_model.trigger_types, [])
def test_to_sensor_db_model_no_trigger_types(self): sensor_meta = { "artifact_uri": "file:///data/st2contrib/packs/jira/sensors/jira_sensor.py", "class_name": "JIRASensor", "pack": "jira", } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertEqual(sensor_model.name, sensor_meta["class_name"]) self.assertEqual(sensor_model.pack, sensor_meta["pack"]) self.assertEqual(sensor_model.artifact_uri, sensor_meta["artifact_uri"]) self.assertListEqual(sensor_model.trigger_types, [])
def _register_sensor_from_pack(self, pack, sensor): sensor_metadata_file_path = sensor LOG.debug('Loading sensor from %s.', sensor_metadata_file_path) content = self._meta_loader.load(file_path=sensor_metadata_file_path) pack_field = content.get('pack', None) if not pack_field: content['pack'] = pack pack_field = pack if pack_field != pack: raise Exception('Model is in pack "%s" but field "pack" is different: %s' % (pack, pack_field)) entry_point = content.get('entry_point', None) if not entry_point: raise ValueError('Sensor definition missing entry_point') # Add in "metadata_file" attribute which stores path to the pack metadata file relative to # the pack directory metadata_file = content_utils.get_relative_path_to_pack_file(pack_ref=pack, file_path=sensor, use_pack_cache=True) content['metadata_file'] = metadata_file sensors_dir = os.path.dirname(sensor_metadata_file_path) sensor_file_path = os.path.join(sensors_dir, entry_point) artifact_uri = 'file://%s' % (sensor_file_path) content['artifact_uri'] = artifact_uri content['entry_point'] = entry_point sensor_api = SensorTypeAPI(**content) sensor_model = SensorTypeAPI.to_model(sensor_api) sensor_types = SensorType.query(pack=sensor_model.pack, name=sensor_model.name) if len(sensor_types) >= 1: sensor_type = sensor_types[0] LOG.debug('Found existing sensor id:%s with name:%s. Will update it.', sensor_type.id, sensor_type.name) sensor_model.id = sensor_type.id try: sensor_model = SensorType.add_or_update(sensor_model) except: LOG.exception('Failed creating sensor model for %s', sensor) return sensor_model
def test_to_sensor_db_model_with_trigger_types(self): sensor_meta = { "artifact_uri": "file:///data/st2contrib/packs/jira/sensors/jira_sensor.py", "class_name": "JIRASensor", "pack": "jira", "trigger_types": [{ "pack": "jira", "name": "issue_created", "parameters": {} }], } sensor_api = SensorTypeAPI(**sensor_meta) sensor_model = SensorTypeAPI.to_model(sensor_api) self.assertListEqual(sensor_model.trigger_types, ["mock.trigger_ref"])
def _register_sensor_from_pack(self, pack, sensor): sensor_metadata_file_path = sensor LOG.debug('Loading sensor from %s.', sensor_metadata_file_path) content = self._meta_loader.load(file_path=sensor_metadata_file_path) pack_field = content.get('pack', None) if not pack_field: content['pack'] = pack pack_field = pack if pack_field != pack: raise Exception( 'Model is in pack "%s" but field "pack" is different: %s' % (pack, pack_field)) entry_point = content.get('entry_point', None) if not entry_point: raise ValueError('Sensor definition missing entry_point') sensors_dir = os.path.dirname(sensor_metadata_file_path) sensor_file_path = os.path.join(sensors_dir, entry_point) artifact_uri = 'file://%s' % (sensor_file_path) content['artifact_uri'] = artifact_uri content['entry_point'] = entry_point sensor_api = SensorTypeAPI(**content) sensor_model = SensorTypeAPI.to_model(sensor_api) sensor_types = SensorType.query(pack=sensor_model.pack, name=sensor_model.name) if len(sensor_types) >= 1: sensor_type = sensor_types[0] LOG.debug( 'Found existing sensor id:%s with name:%s. Will update it.', sensor_type.id, sensor_type.name) sensor_model.id = sensor_type.id try: sensor_model = SensorType.add_or_update(sensor_model) except: LOG.exception('Failed creating sensor model for %s', sensor) return sensor_model