diff --git a/app/config.yaml b/app/config.yaml index 6b3620d..1c08727 100644 --- a/app/config.yaml +++ b/app/config.yaml @@ -240,12 +240,10 @@ navigation: class: fa-brands fa-whatsapp url: https://wa.me/491781798023 identifier: "+491781798023" - warning: | - ⚠️ **Caution with Meta Services** - Using software and platforms from the Meta corporation (e.g., Facebook, Instagram, WhatsApp) may compromise your data privacy and digital freedom due to centralized control, extensive data collection practices, and inconsistent moderation policies. These platforms often fail to adequately address harmful content, misinformation, and abuse. - 📌 **Recommendation:** Consider using decentralized and privacy-respecting alternatives to maintain control over your data, improve security, and foster healthier online interactions. alternatives: - link: navigation.header.contact.matrix + warning: | + Using software and platforms from the Meta corporation (e.g., Facebook, Instagram, WhatsApp) may compromise your data privacy and digital freedom due to centralized control, extensive data collection practices, and inconsistent moderation policies. These platforms often fail to adequately address harmful content, misinformation, and abuse. footer: - name: External Accounts @@ -257,13 +255,14 @@ navigation: description: Social and developer networks icon: class: fa-brands fa-meta - url: subitems: - name: Instagram description: Follow me on Instagram icon: class: fa-brands fa-instagram url: https://www.instagram.com/kevinveenbirkenbach/ + identifier: kevinveenbirkenbach + link: navigation.header.contact.whatsapp.warning - name: Facebook description: Like my Facebook page icon: diff --git a/app/utils/configuration_resolver.py b/app/utils/configuration_resolver.py index a214351..a7a556e 100644 --- a/app/utils/configuration_resolver.py +++ b/app/utils/configuration_resolver.py @@ -1,9 +1,4 @@ class ConfigurationResolver: - """ - A class to resolve `link` entries in a nested configuration structure. - Supports navigation through dictionaries, lists, and `subitems`. - """ - def __init__(self, config): self.config = config @@ -21,15 +16,22 @@ class ConfigurationResolver: for key, value in list(current_config.items()): if key == "link": try: - target = self._find_entry(root_config, value.lower()) - current_config.clear() - current_config.update(target) + # Attempt to find the target entry in the root configuration + target = self._find_entry(root_config, value.lower().replace(" ", "_")) + + if isinstance(target, dict): + # Replace the current config dictionary with the target dictionary + current_config.clear() + current_config.update(target) + else: + current_config[value.split(".")[-1]] = target except Exception as e: raise ValueError( f"Error resolving link '{value}': {str(e)}. " f"Current path: {key}, Current config: {current_config}" ) else: + # Recurse into nested structures self._recursive_resolve(value, root_config) elif isinstance(current_config, list): for item in current_config: @@ -43,26 +45,26 @@ class ConfigurationResolver: parts = path.split('.') current = config for part in parts: + part = part.replace(" ", "_") if isinstance(current, list): - # Look for a matching name in the list + # Search for a matching entry in a list found = next( - (item for item in current if isinstance(item, dict) and item.get("name", "").lower() == part), + ( + item + for item in current + if isinstance(item, dict) and item.get("name", "").lower().replace(" ", "_") == part + ), None ) - if found: - print( - f"Matching entry for '{part}' in list. Path so far: {' > '.join(parts[:parts.index(part)+1])}. " - f"Current list: {current}" - ) - else: + if not found: raise ValueError( f"No matching entry for '{part}' in list. Path so far: {' > '.join(parts[:parts.index(part)+1])}. " f"Current list: {current}" ) current = found elif isinstance(current, dict): - # Case-insensitive dictionary lookup - key = next((k for k in current if k.lower() == part), None) + # Perform a case-insensitive dictionary lookup + key = next((k for k in current if k.lower().replace(" ", "_") == part), None) if key is None: raise KeyError( f"Key '{part}' not found in dictionary. Path so far: {' > '.join(parts[:parts.index(part)+1])}. " @@ -74,9 +76,9 @@ class ConfigurationResolver: f"Invalid path segment '{part}'. Current type: {type(current)}. " f"Path so far: {' > '.join(parts[:parts.index(part)+1])}" ) - + # Navigate into `subitems` if present - if isinstance(current, dict) and ("subitems" in current and current["subitems"]): + if isinstance(current, dict) and "subitems" in current and current["subitems"]: current = current["subitems"] return current