#import redis from modules.utils import compare_date_with_today import pandas as pd import random import uuid #load_dotenv('../../.env') #redis_pw = os.getenv("REDIS_PASSWORD") #try: # r = redis.Redis( # host='redis-12097.c328.europe-west3-1.gce.cloud.redislabs.com', # port=12097, # password=redis_pw) #except: # print("Redis not available - working with memory alone") # r = None #on_memory_user_bank = {} #on_memory_boost_bank = load_csv_to_dict('../data/boost_bank.csv') class BoostDatabase: def __init__(self, csv_path): """Initialize the database by loading boosts from a CSV file.""" self.boosts_bank = {} boosts = pd.read_csv(csv_path) for target_topic in boosts['target_topic'].unique(): subset = boosts.query('target_topic == @target_topic') self.boosts_bank[target_topic] = { 'twitter': [{'id': str(uuid.uuid4()), 'url': url} for url in subset['url_x'].dropna()], 'facebook': [{'id': str(uuid.uuid4()), 'url': url} for url in subset['url_facebook'].dropna()], 'reddit': [{'id': str(uuid.uuid4()), 'url': url} for url in subset['url_reddit_new'].dropna()], } def get_random_boost(self, topic, platform, blacklist_ids): """ Retrieve a random boost item (URL and UUID) for a given topic and platform, excluding any items with UUIDs in the blacklist. """ if topic in self.boosts_bank and platform in self.boosts_bank[topic]: # Filter out any items that have an ID in the blacklist valid_items = [item for item in self.boosts_bank[topic][platform] if item['id'] not in blacklist_ids] if valid_items: return random.choice(valid_items) else: return "No available boosts that haven't been seen." else: return "Topic or platform not found." class User: def __init__(self, user_id: str, last_boost: str, boosts=None): if boosts is None: boosts = [] self.user_id = user_id self.boosts = boosts self.last_boost = last_boost def add_boost(self, boost): """Append a new boost to the list of boosts.""" self.boosts.append(boost) def is_boosted_today(self): return compare_date_with_today(self.last_boost) def update_boosted_today(self, status): """Update the boosted_today status.""" self.boosted_today = status #def __repr__(self): # return f"User(boosts={self.boosts}, boosted_today={self.boosted_today})" class UserDatabase: def __init__(self): self.users = {} # Stores user_id mapped to User objects def add_user(self, user_id, user): """Add a new user to the database.""" if user_id not in self.users: self.users[user_id] = user else: print("User already exists with this ID") def get_user(self, user_id): """Retrieve a user by user_id.""" return self.users.get(user_id, None) def add_boost_to_user(self, user_id, boost): """Append a boost to a user's list of boosts.""" user = self.get_user(user_id) if user: user.add_boost(boost) else: print("User not found") def update_user_boosted_today(self, user_id, date): """Update the boosted_today status for a user.""" user = self.get_user(user_id) if user: user.update_boosted_today(date) else: print("User not found")