|
13 | 13 | ClientResponseError, |
14 | 14 | ServerDisconnectedError, |
15 | 15 | ) |
16 | | -from data_pipeline.exceptions import ProjAPIError, ProjAPIOverload |
17 | 16 | from dateutil.relativedelta import relativedelta |
18 | | -from db_tools.utils import OptionTicker |
19 | 17 |
|
| 18 | +from curator.data_pipeline.exceptions import ProjAPIError, ProjAPIOverload |
| 19 | +from curator.db_tools.utils import OptionTicker |
20 | 20 | from curator.proj_constants import BASE_DOWNLOAD_PATH, POLYGON_API_KEY, POLYGON_BASE_URL, log |
21 | 21 | from curator.utils import ( |
22 | 22 | extract_underlying_from_o_ticker, |
@@ -102,9 +102,7 @@ async def _execute_request(self, session: ClientSession, url: str, payload: dict |
102 | 102 | json_response = await response.json() if status_code == 200 else {} |
103 | 103 | return (status_code, json_response) |
104 | 104 |
|
105 | | - async def _query_all( |
106 | | - self, session: ClientSession, url: str, payload: dict = {}, limit: bool = False |
107 | | - ) -> list[dict]: |
| 105 | + async def _query_all(self, session: ClientSession, url: str, payload: dict = {}, limit: bool = False) -> list[dict]: |
108 | 106 | """Query the API until all results have been returned |
109 | 107 | Args: |
110 | 108 | session: aiohttp ClientSession |
@@ -238,9 +236,7 @@ def generate_request_args(self, args_data: list[str] = []): |
238 | 236 | Returns: |
239 | 237 | urls: list(tuple), each tuple contains the url, the payload for the request and an empty string""" |
240 | 238 | if not self.all_: |
241 | | - urls = [ |
242 | | - (self.url_base, dict(self.payload, **{"ticker": ticker}), ticker) for ticker in self.tickers |
243 | | - ] |
| 239 | + urls = [(self.url_base, dict(self.payload, **{"ticker": ticker}), ticker) for ticker in self.tickers] |
244 | 240 | else: |
245 | 241 | urls = [(self.url_base, self.payload, "")] |
246 | 242 | return urls |
@@ -510,18 +506,14 @@ def __init__(self, o_ticker_lookup: dict[str, int], months_hist: int = 24): |
510 | 506 | self.start_date, self.close_date = self._determine_start_end_dates( |
511 | 507 | string_to_date("2060-01-01") |
512 | 508 | ) # NOTE: magic number meant to always trigger the newest date (today) |
513 | | - self.dates = trading_days_in_range( |
514 | | - str(self.start_date), str(self.close_date), count=False, cal_type="o_cal" |
515 | | - ) |
| 509 | + self.dates = trading_days_in_range(str(self.start_date), str(self.close_date), count=False, cal_type="o_cal") |
516 | 510 | self.dates_stamps = self._prepare_timestamps(self.dates) |
517 | 511 | self.o_ticker_lookup = o_ticker_lookup |
518 | 512 |
|
519 | 513 | def _construct_url(self, o_ticker: str) -> str: |
520 | 514 | return f"/v3/quotes/{o_ticker}" |
521 | 515 |
|
522 | | - def generate_request_args( |
523 | | - self, args_data: list[OptionTicker] |
524 | | - ) -> tuple[list[tuple[str, dict]], dict[str, int]]: |
| 516 | + def generate_request_args(self, args_data: list[OptionTicker]) -> tuple[list[tuple[str, dict]], dict[str, int]]: |
525 | 517 | """Generate the urls to query the options quotes endpoint. |
526 | 518 | Inputs should be OptionTickers. We then generate the date ranges. |
527 | 519 | To prepare the args, we make the timestamp pairs (1 hour wide) and query for the oldest quote in each window. |
@@ -563,14 +555,14 @@ def _prepare_timestamps(dates: pd.DataFrame) -> list[int]: |
563 | 555 | dates = dates.tz_localize("US/Eastern") |
564 | 556 | for i in range(9): |
565 | 557 | if i >= 7: |
566 | | - dates[f"{i+9}_oclock"] = dates.index + pd.Timedelta(hours=i + 9) |
| 558 | + dates[f"{i + 9}_oclock"] = dates.index + pd.Timedelta(hours=i + 9) |
567 | 559 | else: |
568 | | - dates[f"{i+9}_oclock"] = dates.index + pd.Timedelta(hours=i + 9, minutes=30) |
569 | | - dates[f"{i+9}_oclock"] = dates[f"{i+9}_oclock"].dt.strftime("%Y-%m-%dT%H:%M:%S%z") |
570 | | - dates[f"{i+9}_oclock"] = ( |
571 | | - dates[f"{i+9}_oclock"].astype(str).str.slice(stop=-2) |
| 560 | + dates[f"{i + 9}_oclock"] = dates.index + pd.Timedelta(hours=i + 9, minutes=30) |
| 561 | + dates[f"{i + 9}_oclock"] = dates[f"{i + 9}_oclock"].dt.strftime("%Y-%m-%dT%H:%M:%S%z") |
| 562 | + dates[f"{i + 9}_oclock"] = ( |
| 563 | + dates[f"{i + 9}_oclock"].astype(str).str.slice(stop=-2) |
572 | 564 | + ":" |
573 | | - + dates[f"{i+9}_oclock"].astype(str).str.slice(start=-2) |
| 565 | + + dates[f"{i + 9}_oclock"].astype(str).str.slice(start=-2) |
574 | 566 | ) |
575 | 567 | dates.drop(columns=["market_open", "market_close"], inplace=True) |
576 | 568 | dates = pd.DataFrame({"timestamp.gte": dates.values.flatten()}) |
@@ -618,11 +610,7 @@ async def download_data(self, o_ticker: str, payload: dict, session: ClientSessi |
618 | 610 | def lookup_date_timestamps_from_record(self, timestamp: int) -> list[int]: |
619 | 611 | date = timestamp_to_datetime(timestamp, msec_units=False, nano_sec=True) |
620 | 612 | date = str(date.date()) |
621 | | - return ( |
622 | | - self.dates_stamps["nanosecond.gte"] |
623 | | - .loc[self.dates_stamps["timestamp.gte"].str.contains(date)] |
624 | | - .to_list() |
625 | | - ) |
| 613 | + return self.dates_stamps["nanosecond.gte"].loc[self.dates_stamps["timestamp.gte"].str.contains(date)].to_list() |
626 | 614 |
|
627 | 615 | # TODO: finish this algorithm |
628 | 616 | def search_for_timestamps(self, data: list[dict]) -> list[dict]: |
|
0 commit comments