clean code

This commit is contained in:
MuslemRahimi 2025-04-08 11:46:55 +02:00
parent 05a2ce5f88
commit 65c1ac7b99
2 changed files with 18 additions and 17 deletions

View File

@ -10,10 +10,7 @@ import orjson
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
headers = {"accept": "application/json"}
url = "https://api.benzinga.com/api/v2.1/calendar/dividends"
load_dotenv() load_dotenv()
api_key = os.getenv('BENZINGA_API_KEY')
ny_tz = pytz.timezone('America/New_York') ny_tz = pytz.timezone('America/New_York')
today = datetime.now(ny_tz).replace(hour=0, minute=0, second=0, microsecond=0) today = datetime.now(ny_tz).replace(hour=0, minute=0, second=0, microsecond=0)
@ -21,10 +18,12 @@ N_days_ago = today - timedelta(days=10)
async def save_as_json(symbol, data, file_name): async def save_as_json(symbol, data, file_name):
with open(f"{file_name}/{symbol}.json", 'w') as file: # Ensure the directory exists
os.makedirs(file_name, exist_ok=True)
file_path = os.path.join(file_name, f"{symbol}.json")
with open(file_path, 'w') as file:
ujson.dump(data, file) ujson.dump(data, file)
async def get_data(ticker, con, etf_con, stock_symbols, etf_symbols): async def get_data(ticker, con, etf_con, stock_symbols, etf_symbols):
try: try:
# Choose the appropriate table and column names # Choose the appropriate table and column names
@ -75,15 +74,18 @@ async def get_data(ticker, con, etf_con, stock_symbols, etf_symbols):
previous_year_dividend = None previous_year_dividend = None
for record in sorted_records: for record in sorted_records:
record_date = datetime.fromisoformat(record['recordDate']) try:
if record_date.year == latest_year and latest_dividend is None: record_date = datetime.fromisoformat(record['recordDate'])
latest_dividend = record['adjDividend'] if record_date.year == latest_year and latest_dividend is None:
elif record_date.year == latest_year - 1 and previous_year_dividend is None: latest_dividend = record['adjDividend']
previous_year_dividend = record['adjDividend'] elif record_date.year == latest_year - 1 and previous_year_dividend is None:
previous_year_dividend = record['adjDividend']
# Break if we found both dividends
if latest_dividend is not None and previous_year_dividend is not None: # Break if we found both dividends
break if latest_dividend is not None and previous_year_dividend is not None:
break
except:
pass
# Calculate growth rate if both values exist # Calculate growth rate if both values exist
dividend_growth = None dividend_growth = None
@ -134,9 +136,8 @@ async def run():
total_symbols = stock_symbols + etf_symbols total_symbols = stock_symbols + etf_symbols
for ticker in tqdm(total_symbols): for ticker in tqdm(total_symbols):
res = await get_data(ticker, con, etf_con, stock_symbols, etf_symbols)
try: try:
res = await get_data(ticker, con, etf_con, stock_symbols, etf_symbols)
if len(res.get('history', [])) > 0: if len(res.get('history', [])) > 0:
await save_as_json(ticker, res, 'json/dividends/companies') await save_as_json(ticker, res, 'json/dividends/companies')
except Exception as e: except Exception as e:

View File

@ -857,7 +857,7 @@ async def stock_dividend(data: TickerData, api_key: str = Security(get_api_key))
data = orjson.dumps(res) data = orjson.dumps(res)
compressed_data = gzip.compress(data) compressed_data = gzip.compress(data)
redis_client.set(cache_key, compressed_data) redis_client.set(cache_key, compressed_data)
redis_client.expire(cache_key, 3600*3600) redis_client.expire(cache_key, 60*15)
return StreamingResponse( return StreamingResponse(
io.BytesIO(compressed_data), io.BytesIO(compressed_data),