testing / stdb.py
jarvisx17's picture
Update stdb.py
4b6d2f8 verified
raw
history blame contribute delete
No virus
2.62 kB
"""
This module provides functionality for performing Automatic data updating tasks.
"""
import threading
import time
import pandas as pd
from stls import Stocks
from levels import eqt
from datetime import datetime
from pymongo import MongoClient
from datetime import datetime, timedelta
import pytz
import os
tz = pytz.timezone('Asia/Kolkata')
mongo_url = os.environ['MongoURL']
def UpdatedCollectionName():
current_time = datetime.now(tz)
collection_name = current_time.strftime('%Y-%m-%d')
if current_time.time() >= datetime.strptime('15:30', '%H:%M').time():
collection_name = (current_time + timedelta(days=1)).strftime('%Y-%m-%d')
return collection_name
else:
return collection_name
import concurrent.futures
import yfinance as yf
def get_live_price(symbol):
return yf.Ticker(symbol).history(period="1d").iloc[-1][['High','Close']].round(2)
def status(row):
if row['LTP'] > row['High'] or row['High_T'] > row['High']:
return "Active"
else:
return "Pending"
def get_live_prices(df):
print("it's live")
symbols = df['Symbol'].tolist()
with concurrent.futures.ThreadPoolExecutor() as executor:
prices = list(executor.map(get_live_price, symbols))
df[['High_T', 'LTP']] = prices
df['Status'] = df.apply(status, axis=1)
return df
class DataManager:
"""
This is a DataManager class that demonstrates its functionality.
"""
def __init__(self):
self.stocks = None
self.equity = None
self.data_thread = threading.Thread(target=self.update_data)
self.data_thread.daemon = True
self.data_thread.start()
def update_data(self):
while True:
client = MongoClient(mongo_url)
db = client['mydatabase']
collection_name = UpdatedCollectionName()
if collection_name in db.list_collection_names():
collection = db[collection_name]
cursor = collection.find({})
stocks = pd.DataFrame(list(cursor))
stocks.drop('_id', axis=1, inplace=True)
self.stocks = stocks
else:
stocks = Stocks()
collection = db[collection_name]
cursor = collection.find({})
stocks = pd.DataFrame(list(cursor))
stocks.drop('_id', axis=1, inplace=True)
self.stocks = stocks
time.sleep(120)
def get_stocks_data(self):
stocks = get_live_prices(self.stocks)
self.results = stocks.to_dict(orient="records")
return self.results
def get_equity_data(self, ticker, startdate, share_qty):
self.equity = eqt(ticker, startdate, share_qty)
return self.equity