[BUGFIX] Only apply --dl-override to subscriptions in --match (#890)

As title, to not accidently add breaking changes for subscriptions that are not going to run
This commit is contained in:
Jesse Bannon 2024-01-09 20:50:31 -08:00 committed by GitHub
parent 3b36ffd050
commit 305d084a6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 12 deletions

View file

@ -107,15 +107,10 @@ def _download_subscriptions_from_yaml_files(
subscriptions += Subscription.from_file_path( subscriptions += Subscription.from_file_path(
config=config, config=config,
subscription_path=path, subscription_path=path,
subscription_matches=subscription_matches,
subscription_override_dict=subscription_override_dict, subscription_override_dict=subscription_override_dict,
) )
if subscriptions and subscription_matches:
logger.info("Filtering subscriptions by name based on --match arguments")
subscriptions = [
sub for sub in subscriptions if any(match in sub.name for match in subscription_matches)
]
for subscription in subscriptions: for subscription in subscriptions:
with subscription.exception_handling(): with subscription.exception_handling():
logger.info( logger.info(

View file

@ -75,6 +75,7 @@ class Subscription(SubscriptionDownload):
cls, cls,
config: ConfigFile, config: ConfigFile,
subscription_path: str | Path, subscription_path: str | Path,
subscription_matches: Optional[List[str]] = None,
subscription_override_dict: Optional[Dict] = None, subscription_override_dict: Optional[Dict] = None,
) -> List["Subscription"]: ) -> List["Subscription"]:
""" """
@ -86,6 +87,8 @@ class Subscription(SubscriptionDownload):
Validated instance of the config Validated instance of the config
subscription_path: subscription_path:
File path to the subscription yaml file File path to the subscription yaml file
subscription_matches:
Optional list, only output subscriptions that match one or more of these values
subscription_override_dict: subscription_override_dict:
Optional dict containing overrides to every subscription Optional dict containing overrides to every subscription
@ -99,16 +102,16 @@ class Subscription(SubscriptionDownload):
If subscription file is misconfigured If subscription file is misconfigured
""" """
subscriptions: List["Subscription"] = [] subscriptions: List["Subscription"] = []
subscription_dict = load_yaml(file_path=subscription_path) subscription_object = load_yaml(file_path=subscription_path)
has_file_preset = FILE_PRESET_APPLY_KEY in subscription_dict has_file_preset = FILE_PRESET_APPLY_KEY in subscription_object
# If a file preset is present... # If a file preset is present...
if has_file_preset: if has_file_preset:
# Validate it (make sure it is a dict) # Validate it (make sure it is a dict)
file_preset = LiteralDictValidator( file_preset = LiteralDictValidator(
name=f"{subscription_path}.{FILE_PRESET_APPLY_KEY}", name=f"{subscription_path}.{FILE_PRESET_APPLY_KEY}",
value=subscription_dict[FILE_PRESET_APPLY_KEY], value=subscription_object[FILE_PRESET_APPLY_KEY],
) )
# Deep copy the config and add this file preset to its preset list # Deep copy the config and add this file preset to its preset list
@ -116,7 +119,9 @@ class Subscription(SubscriptionDownload):
config.presets.dict[FILE_PRESET_APPLY_KEY] = file_preset.dict config.presets.dict[FILE_PRESET_APPLY_KEY] = file_preset.dict
subscriptions_dict: Dict[str, Any] = { subscriptions_dict: Dict[str, Any] = {
key: obj for key, obj in subscription_dict.items() if key not in [FILE_PRESET_APPLY_KEY] key: obj
for key, obj in subscription_object.items()
if key not in [FILE_PRESET_APPLY_KEY]
} }
subscriptions_dicts = SubscriptionValidator( subscriptions_dicts = SubscriptionValidator(
@ -129,7 +134,16 @@ class Subscription(SubscriptionDownload):
global_presets_to_apply=[FILE_PRESET_APPLY_KEY] if has_file_preset else [] global_presets_to_apply=[FILE_PRESET_APPLY_KEY] if has_file_preset else []
) )
for subscription_key, subscription_object in subscriptions_dicts.items(): if subscriptions_dicts and subscription_matches:
logger.info("Filtering subscriptions by name based on --match arguments")
subscriptions_dicts = {
subscription_name: subscription_object
for subscription_name, subscription_object in subscriptions_dicts.items()
if any(match in subscription_name for match in subscription_matches)
}
for subscription_name, subscription_object in subscriptions_dicts.items():
# Hard-override subscriptions here # Hard-override subscriptions here
mergedeep.merge( mergedeep.merge(
subscription_object, subscription_object,
@ -140,7 +154,7 @@ class Subscription(SubscriptionDownload):
subscriptions.append( subscriptions.append(
cls.from_dict( cls.from_dict(
config=config, config=config,
preset_name=subscription_key, preset_name=subscription_name,
preset_dict=subscription_object, preset_dict=subscription_object,
) )
) )