MrSimple07's picture
new structure for the overall part
80e55f8
import pandas as pd
import re
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
eco_data = None
def load_eco_data():
global eco_data
try:
eco_data = pd.read_csv('data/Chess Opening Reference - Sheet1.csv')
logger.info(f"Loaded {len(eco_data)} ECO codes")
return True
except Exception as e:
logger.error(f"Error loading ECO data: {str(e)}")
return False
def extract_eco_from_pgn(pgn):
eco_match = re.search(r'\[ECO "([A-E][0-9]{2})"\]', pgn)
return eco_match.group(1) if eco_match else None
def get_opening_name(eco_code):
if eco_data is not None and eco_code:
match = eco_data[eco_data['ECO Code'] == eco_code]
if not match.empty:
return match.iloc[0]['Name']
return "Unknown Opening"
def analyze_opponent_openings(pgn_list, target_username):
target_username = target_username.lower()
opponent_openings = []
for pgn in pgn_list:
white_match = re.search(r'\[White "([^"]+)"\]', pgn)
black_match = re.search(r'\[Black "([^"]+)"\]', pgn)
if not white_match or not black_match:
continue
white_player = white_match.group(1).lower()
black_player = black_match.group(1).lower()
is_white = target_username in white_player
is_black = target_username in black_player
if not is_white and not is_black:
continue
eco_code = extract_eco_from_pgn(pgn)
if eco_code:
opening_name = get_opening_name(eco_code)
if is_white:
opponent_color = "qora"
else:
opponent_color = "oq"
opponent_openings.append({
'eco': eco_code,
'name': opening_name,
'opponent_color': opponent_color,
'user_color': 'oq' if is_white else 'qora'
})
return opponent_openings