| 202 | |
| 203 | @PROCESSOR.register_module(force=True) |
| 204 | class Processor(): |
| 205 | def __init__(self, |
| 206 | root=None, |
| 207 | path_params = None, |
| 208 | stocks_path = None, |
| 209 | start_date = None, |
| 210 | end_date = None, |
| 211 | interval="day", |
| 212 | if_parse_url = False, |
| 213 | workdir = None, |
| 214 | tag = None |
| 215 | ): |
| 216 | self.root = root |
| 217 | self.path_params = path_params |
| 218 | self.stocks_path = os.path.join(root, stocks_path) |
| 219 | self.start_date = start_date |
| 220 | self.end_date = end_date |
| 221 | self.interval = interval |
| 222 | self.if_parse_url = if_parse_url |
| 223 | self.workdir = workdir |
| 224 | self.tag = tag |
| 225 | |
| 226 | self.stocks = self._init_stocks() |
| 227 | |
| 228 | def _init_stocks(self): |
| 229 | with open(self.stocks_path) as op: |
| 230 | stocks = [line.strip() for line in op.readlines()] |
| 231 | return stocks |
| 232 | |
| 233 | def _process_price_and_features(self, |
| 234 | stocks = None, |
| 235 | start_date = None, |
| 236 | end_date = None): |
| 237 | |
| 238 | start_date = datetime.strptime(start_date if start_date else self.start_date, "%Y-%m-%d") |
| 239 | end_date = datetime.strptime(end_date if end_date else self.end_date, "%Y-%m-%d") |
| 240 | |
| 241 | stocks = stocks if stocks else self.stocks |
| 242 | |
| 243 | price_columns = [ |
| 244 | "open", |
| 245 | "high", |
| 246 | "low", |
| 247 | "close", |
| 248 | "volume", |
| 249 | "adj_close" |
| 250 | ] |
| 251 | |
| 252 | for stock in tqdm(stocks): |
| 253 | price = self.path_params["prices"][0] |
| 254 | price_type = price["type"] |
| 255 | price_path = price["path"] |
| 256 | |
| 257 | price_path = os.path.join(self.root, price_path, "{}.csv".format(stock)) |
| 258 | |
| 259 | if price_type == "fmp": |
| 260 | price_column_map = { |
| 261 | "open": "open", |
nothing calls this directly
no outgoing calls
no test coverage detected