mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 18:41:50 +01:00
enh: allow per-ad overriding of global description affixes (#416)
This commit is contained in:
@@ -5,6 +5,7 @@ SPDX-ArtifactOfProjectHomePage: https://github.com/Second-Hand-Friends/kleinanze
|
||||
"""
|
||||
import hashlib, json, os
|
||||
from typing import Any
|
||||
from .utils import dicts
|
||||
|
||||
|
||||
def calculate_content_hash(ad_cfg: dict[str, Any]) -> str:
|
||||
@@ -36,3 +37,51 @@ def calculate_content_hash(ad_cfg: dict[str, Any]) -> str:
|
||||
# Create sorted JSON string for consistent hashes
|
||||
content_str = json.dumps(content, sort_keys = True)
|
||||
return hashlib.sha256(content_str.encode()).hexdigest()
|
||||
|
||||
|
||||
def get_description_affixes(config: dict[str, Any], prefix: bool = True) -> str:
|
||||
"""Get prefix or suffix for description with proper precedence.
|
||||
|
||||
This function handles both the new flattened format and legacy nested format:
|
||||
|
||||
New format (flattened):
|
||||
ad_defaults:
|
||||
description_prefix: "Global Prefix"
|
||||
description_suffix: "Global Suffix"
|
||||
|
||||
Legacy format (nested):
|
||||
ad_defaults:
|
||||
description:
|
||||
prefix: "Legacy Prefix"
|
||||
suffix: "Legacy Suffix"
|
||||
|
||||
Args:
|
||||
config: Configuration dictionary containing ad_defaults
|
||||
prefix: If True, get prefix, otherwise get suffix
|
||||
|
||||
Returns:
|
||||
The appropriate affix string, empty string if none found
|
||||
|
||||
Example:
|
||||
>>> config = {"ad_defaults": {"description_prefix": "Hello", "description": {"prefix": "Hi"}}}
|
||||
>>> get_description_affixes(config, prefix=True)
|
||||
'Hello'
|
||||
"""
|
||||
# Handle edge cases
|
||||
if not isinstance(config, dict):
|
||||
return ""
|
||||
|
||||
affix_type = "prefix" if prefix else "suffix"
|
||||
|
||||
# First try new flattened format (description_prefix/description_suffix)
|
||||
flattened_key = f"description_{affix_type}"
|
||||
flattened_value = dicts.safe_get(config, "ad_defaults", flattened_key)
|
||||
if isinstance(flattened_value, str):
|
||||
return flattened_value
|
||||
|
||||
# Then try legacy nested format (description.prefix/description.suffix)
|
||||
nested_value = dicts.safe_get(config, "ad_defaults", "description", affix_type)
|
||||
if isinstance(nested_value, str):
|
||||
return nested_value
|
||||
|
||||
return ""
|
||||
|
||||
Reference in New Issue
Block a user