-
Notifications
You must be signed in to change notification settings - Fork 0
/
osManager.py
102 lines (80 loc) · 3.28 KB
/
osManager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from defs import *
import os, sys
import supplumentalData as sd
import pandas as pd
TICKERS_DIR_NAME = "Tickers"
FILENAME_PREFIXES = {
"IB" : "_IB", # interactive brokers
"MW" : "_MW" # market watch
}
class OsManager:
def __init__(self):
self.platform = sys.platform
self.pwd = None
self.tikcers_dir = "./" + TICKERS_DIR_NAME
# make a tikcers dir if not exists
self._set_tickers_dir()
def _set_tickers_dir(self):
if (self.platform == 'linux'):
self.pwd = os.getcwd()
if (TICKERS_DIR_NAME not in os.listdir()):
os.mkdir("./" + TICKERS_DIR_NAME)
def load_ticker_data(self,
ticker,
data_source : str,
data_type : str
):
tickerdir_path = "./" + TICKERS_DIR_NAME + "/" + ticker + "/"
file_name = ticker + FILENAME_PREFIXES[data_source]
file_path = tickerdir_path + file_name + "." + data_type
if (ticker not in os.listdir(self.tikcers_dir)):
return pd.DataFrame()
if ((file_name + "." + data_type) not in os.listdir(tickerdir_path)):
return pd.DataFrame()
if (data_type == "pkl"):
return pd.read_pickle(file_path)
if (data_type == "csv"):
return pd.read_csv(file_path)
return pd.DataFrame()
def save_ticker_data(self,
ticker : str,
data_source : str, # ie - IB, MW ...
data : pd.DataFrame,
data_type : str):
"""
@ ticker: - ticker name
@ data_source - (str) represetnt where the data came from ie - IB = interactive brokers, MW = marketwatch ...
@ data - the data it self
@ data_type : (str) - the postfix of the file - pkl, csv ...
"""
# if no dir for ticker create
tickerdir_path = "./" + TICKERS_DIR_NAME + "/" + ticker
file_name = ticker + FILENAME_PREFIXES[data_source]
df = data
if (ticker not in os.listdir(os.getcwd() + "/" + TICKERS_DIR_NAME)):
os.mkdir(tickerdir_path)
file_path = tickerdir_path + "/" + file_name + "." + data_type
if (data_type == "pkl"):
data.to_pickle(file_path)
elif (data_type == "csv"):
data.to_csv(file_path)
print("saved {}.{} at: {}".format(file_name, data_type, tickerdir_path))
def get_supplumental_data(self,
ticker : str,
data_source : str,
data_type : str):
"""
returns DF
"""
# TODO add function - in case local supllumental data exists download new data and append to old
local_data = self.load_ticker_data(ticker = ticker,
data_source = data_source,
data_type = data_type)
if (local_data.empty == False):
data = local_data
else:
print("Downloading {} supplumental data".format(ticker))
data = sd.get_data(ticker)
data = pd.DataFrame.from_dict(data)
self.save_ticker_data(ticker, data_source, data, data_type)
return data