File size: 1,715 Bytes
a721dfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from __future__ import annotations

from typing import Any, Dict, Iterable, List, Mapping


def build_symbols_catalog(
    symbols: Mapping[str, Any],
    supported_intervals: List[str],
) -> Dict[str, Any]:
    all_results = list(symbols.values())
    grouped: Dict[str, List[Dict[str, Any]]] = {}
    for symbol_config in all_results:
        entry = {
            "symbol": symbol_config.symbol,
            "label": symbol_config.label,
            "label_en": symbol_config.label_en,
            "category": symbol_config.category,
            "description": symbol_config.description,
            "sources": list(symbol_config.mappings.keys()),
        }
        grouped.setdefault(symbol_config.category, []).append(entry)

    return {
        "total": len(all_results),
        "categories": sorted(grouped.keys()),
        "symbols": [
            {
                "symbol": symbol_config.symbol,
                "label": symbol_config.label,
                "label_en": symbol_config.label_en,
                "category": symbol_config.category,
                "sources": list(symbol_config.mappings.keys()),
            }
            for symbol_config in all_results
        ],
        "symbols_by_category": grouped,
        "supported_intervals": supported_intervals,
    }


def filter_symbols_catalog(catalog: Dict[str, Any], category: str) -> Dict[str, Any]:
    category_symbols = catalog["symbols_by_category"].get(category, [])
    return {
        "total": len(category_symbols),
        "categories": catalog["categories"],
        "symbols": category_symbols,
        "symbols_by_category": {category: category_symbols},
        "supported_intervals": catalog["supported_intervals"],
    }