RivaCube/utils/Commodities/utils.py
2025-02-04 19:31:18 +01:00

43 lines
1.3 KiB
Python

import logging
from datetime import datetime
from typing import Dict, Any, Optional
import psycopg2
def get_commodity_statistics(conn: psycopg2.extensions.connection) -> Dict[str, Any]:
"""Get statistics about commodity data."""
cursor = None
try:
cursor = conn.cursor()
stats = {}
# Get basic counts
cursor.execute("""
SELECT
COUNT(DISTINCT id) as total_commodities,
COUNT(*) as total_prices,
MIN(date) as earliest_date,
MAX(date) as latest_date,
COUNT(DISTINCT commodity_id) as commodities_with_prices
FROM commodities_ref r
LEFT JOIN commodities_prices p ON r.id = p.commodity_id
WHERE r.is_active = true
""")
row = cursor.fetchone()
if row:
stats.update({
'total_commodities': row[0],
'total_prices': row[1],
'earliest_date': row[2],
'latest_date': row[3],
'commodities_with_prices': row[4]
})
return stats
except Exception as e:
logging.error(f"Error getting commodity statistics: {e}")
return {}
finally:
if cursor:
cursor.close()