from datetime import datetime, timedelta, time, date import os import orjson import pytz def check_market_hours(): holidays = [ "2024-01-01", "2024-01-15", "2024-02-19", "2024-03-29", "2024-05-27", "2024-06-19", "2024-07-04", "2024-09-02", "2024-11-28", "2024-12-25" ] # Get the current date and time in ET (Eastern Time) et_timezone = pytz.timezone('America/New_York') current_time = datetime.now(et_timezone) current_date_str = current_time.strftime('%Y-%m-%d') current_hour = current_time.hour current_minute = current_time.minute current_day = current_time.weekday() # Monday is 0, Sunday is 6 # Check if the current date is a holiday or weekend is_weekend = current_day >= 5 # Saturday (5) or Sunday (6) is_holiday = current_date_str in holidays # Determine the market status if is_weekend or is_holiday: return False #"Market is closed." elif 9 <= current_hour < 16 or (current_hour == 17 and current_minute == 0): return True #"Market hours." else: return False #"Market is closed." def load_latest_json(directory: str, find=True): """ Load the JSON file corresponding to today's date (New York time) or the last Friday if today is a weekend. If `find` is True, try going back one day up to 10 times until a JSON file is found. If `find` is False, only check the current date (or adjusted Friday for weekends). """ try: # Get today's date in New York timezone ny_tz = pytz.timezone("America/New_York") today_ny = datetime.now(ny_tz).date() # Adjust to Friday if today is Saturday or Sunday if today_ny.weekday() == 5: # Saturday today_ny -= timedelta(days=1) elif today_ny.weekday() == 6: # Sunday today_ny -= timedelta(days=2) attempts = 0 # Loop to find the JSON file while True: # Construct the filename based on the adjusted date target_filename = f"{today_ny}.json" target_file_path = os.path.join(directory, target_filename) # Check if the file exists and load it if os.path.exists(target_file_path): with open(target_file_path, 'rb') as file: print(f"JSON file found for date: {today_ny}") return orjson.loads(file.read()) # If find is False, only check the current date and exit if not find: print(f"No JSON file found for date: {today_ny}. Exiting as `find` is set to False.") break # Increment attempts and move to the previous day attempts += 1 if attempts >= 10: print("No JSON file found after 10 attempts.") break today_ny -= timedelta(days=1) # Return an empty list if no file is found return [] except Exception as e: print(f"Error loading JSON file: {e}") return []