def test_get_content_from_pack_no_sensors(self): loader = ContentPackLoader() pack_path = os.path.join(RESOURCES_DIR, "packs/pack2") result = loader.get_content_from_pack(pack_dir=pack_path, content_type="sensors") self.assertEqual(result, None)
def test_get_content_from_pack_success(self): loader = ContentPackLoader() pack_path = os.path.join(RESOURCES_DIR, "packs/pack1") sensors = loader.get_content_from_pack(pack_dir=pack_path, content_type="sensors") self.assertTrue(sensors.endswith("packs/pack1/sensors"))
def _get_action_alias_db_by_name(self, name): """ Retrieve ActionAlias DB object for the provided alias name. """ base_pack_path = self._get_base_pack_path() pack_yaml_path = os.path.join(base_pack_path, MANIFEST_FILE_NAME) if os.path.isfile(pack_yaml_path): # 1. 1st try to infer pack name from pack metadata file meta_loader = MetaLoader() pack_metadata = meta_loader.load(pack_yaml_path) pack = get_pack_ref_from_metadata(metadata=pack_metadata) else: # 2. If pack.yaml is not available, fail back to directory name # Note: For this to work, directory name needs to match pack name _, pack = os.path.split(base_pack_path) pack_loader = ContentPackLoader() registrar = AliasesRegistrar(use_pack_cache=False) aliases_path = pack_loader.get_content_from_pack(pack_dir=base_pack_path, content_type='aliases') aliases = registrar._get_aliases_from_pack(aliases_dir=aliases_path) for alias_path in aliases: action_alias_db = registrar._get_action_alias_db(pack=pack, action_alias=alias_path) if action_alias_db.name == name: return action_alias_db raise ValueError('Alias with name "%s" not found' % (name))
def _get_api_models_from_disk(artifact_type, pack_dir=None): loader = ContentPackLoader() artifacts = None if pack_dir: artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type) pack_name = os.path.basename(os.path.normpath(pack_dir)) artifacts = {pack_name: artifacts_dir} else: packs_dirs = content_utils.get_packs_base_paths() artifacts = loader.get_content(packs_dirs, artifact_type) artifacts_dict = {} for pack_name, pack_path in artifacts.items(): artifacts_paths = registrar.get_resources_from_pack(pack_path) for artifact_path in artifacts_paths: artifact = meta_loader.load(artifact_path) if artifact_type == "sensors": sensors_dir = os.path.dirname(artifact_path) sensor_file_path = os.path.join(sensors_dir, artifact["entry_point"]) artifact["artifact_uri"] = "file://" + sensor_file_path name = artifact.get("name", None) or artifact.get("class_name", None) if not artifact.get("pack", None): artifact["pack"] = pack_name ref = ResourceReference.to_string_reference(name=name, pack=pack_name) API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type] # Following conversions are required because we add some fields with # default values in db model. If we don't do these conversions, # we'll see a unnecessary diff for those fields. artifact_api = API_MODEL(**artifact) artifact_db = API_MODEL.to_model(artifact_api) artifact_api = API_MODEL.from_model(artifact_db) artifacts_dict[ref] = artifact_api return artifacts_dict
def _get_action_alias_db_by_name(self, name): """ Retrieve ActionAlias DB object for the provided alias name. """ base_pack_path = self._get_base_pack_path() pack_yaml_path = os.path.join(base_pack_path, MANIFEST_FILE_NAME) if os.path.isfile(pack_yaml_path): # 1. 1st try to infer pack name from pack metadata file meta_loader = MetaLoader() pack_metadata = meta_loader.load(pack_yaml_path) pack = get_pack_ref_from_metadata(metadata=pack_metadata) else: # 2. If pack.yaml is not available, fail back to directory name # Note: For this to work, directory name needs to match pack name _, pack = os.path.split(base_pack_path) pack_loader = ContentPackLoader() registrar = AliasesRegistrar(use_pack_cache=False) aliases_path = pack_loader.get_content_from_pack(pack_dir=base_pack_path, content_type='aliases') aliases = registrar._get_aliases_from_pack(aliases_dir=aliases_path) for alias_path in aliases: action_alias_db = registrar._get_action_alias_db(pack=pack, action_alias=alias_path, ignore_metadata_file_error=True) if action_alias_db.name == name: return action_alias_db raise ValueError('Alias with name "%s" not found' % (name))
def _get_action_alias_db_by_name(self, name): """ Retrieve ActionAlias DB object for the provided alias name. """ base_pack_path = self._get_base_pack_path() _, pack = os.path.split(base_pack_path) pack_loader = ContentPackLoader() registrar = AliasesRegistrar(use_pack_cache=False) aliases_path = pack_loader.get_content_from_pack(pack_dir=base_pack_path, content_type='aliases') aliases = registrar._get_aliases_from_pack(aliases_dir=aliases_path) for alias_path in aliases: action_alias_db = registrar._get_action_alias_db(pack=pack, action_alias=alias_path) if action_alias_db.name == name: return action_alias_db raise ValueError('Alias with name "%s" not found' % (name))
def _get_api_models_from_disk(artifact_type, pack_dir=None): loader = ContentPackLoader() artifacts = None if pack_dir: artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type) pack_name = os.path.basename(os.path.normpath(pack_dir)) artifacts = {pack_name: artifacts_dir} else: packs_dirs = content_utils.get_packs_base_paths() artifacts = loader.get_content(packs_dirs, artifact_type) artifacts_dict = {} for pack_name, pack_path in artifacts.items(): artifacts_paths = registrar.get_resources_from_pack(pack_path) for artifact_path in artifacts_paths: artifact = meta_loader.load(artifact_path) if artifact_type == 'sensors': sensors_dir = os.path.dirname(artifact_path) sensor_file_path = os.path.join(sensors_dir, artifact['entry_point']) artifact['artifact_uri'] = 'file://' + sensor_file_path name = artifact.get('name', None) or artifact.get( 'class_name', None) if not artifact.get('pack', None): artifact['pack'] = pack_name ref = ResourceReference.to_string_reference(name=name, pack=pack_name) API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type] # Following conversions are required because we add some fields with # default values in db model. If we don't do these conversions, # we'll see a unnecessary diff for those fields. artifact_api = API_MODEL(**artifact) artifact_db = API_MODEL.to_model(artifact_api) artifact_api = API_MODEL.from_model(artifact_db) artifacts_dict[ref] = artifact_api return artifacts_dict
def test_get_content_from_pack_no_sensors(self): loader = ContentPackLoader() pack_path = os.path.join(RESOURCES_DIR, 'packs/pack2') result = loader.get_content_from_pack(pack_dir=pack_path, content_type='sensors') self.assertEqual(result, None)
def test_get_content_from_pack_success(self): loader = ContentPackLoader() pack_path = os.path.join(RESOURCES_DIR, 'packs/pack1') sensors = loader.get_content_from_pack(pack_dir=pack_path, content_type='sensors') self.assertTrue(sensors.endswith('packs/pack1/sensors'))