Download market data from Yahoo! Finance's API
This report summarizes scanner evidence for ranaroussi/yfinance, a Python project with 25,485 GitHub stars. SynthScan examined 19,807 lines of code across 91 source files, recording 433 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 37.4 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 254 finding(s).
Are imports declared and package/API names verified? 85 finding(s).
Are wrappers, guards, and repeated structures necessary? 276 finding(s).
Which changes need focused human review? 433 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 433 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_prices.py | 191 | self.assertTrue(df_daily_divs.index.equals(df_intraday_divs.index)) | CODE |
| HIGH | tests/test_prices.py | 218 | self.assertTrue(df_daily_divs.index.equals(df_intraday_divs.index)) | CODE |
| HIGH | tests/test_prices.py | 260 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 275 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 303 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 318 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 336 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 351 | self.assertTrue(df1.index.equals(df2.index)) | CODE |
| HIGH | tests/test_prices.py | 480 | # Regression for #2670: when Yahoo returns {"chart": null}, | COMMENT |
| HIGH⚡ | tests/test_ticker.py | 951 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 953 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 957 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 959 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 963 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 965 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 969 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 971 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 975 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 977 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 981 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 983 | self.assertTrue(i1.equals(i3)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 988 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 992 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 996 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1000 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1005 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1009 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1013 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1017 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1021 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1025 | self.assertTrue(i1.equals(i2)) | CODE |
| HIGH⚡ | tests/test_ticker.py | 1239 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": []}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1241 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{}]}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1243 | '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {}}]}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1245 | '{"timeseries": {"error": null, "result": [{}]}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1279 | '{"timeseries": {"error": null, "result": []}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1281 | '{"timeseries": {"error": null}}', | CODE |
| HIGH⚡ | tests/test_ticker.py | 1283 | '{"timeseries": {"error": null, "result": null}}', | CODE |
| HIGH | tests/test_ticker.py | 610 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 639 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 667 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 819 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 848 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 877 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 906 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 934 | self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'") | CODE |
| HIGH | tests/test_ticker.py | 1086 | self.assertTrue(data.equals(data_summary)) | CODE |
| HIGH | tests/test_ticker.py | 1258 | payload = '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {"raw": 1.23}}]}]}} | CODE |
| HIGH | tests/test_ticker.py | 1298 | payload = '{"timeseries": {"error": null, "result": [{"trailingPegRatio": [{"reportedValue": {"raw": 1.23}}]}]}} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/_http.py | 83 | def _supported_session_classes() -> tuple: | CODE |
| LOW⚡ | yfinance/utils.py | 326 | def retrieve_financial_details(data): | CODE |
| LOW | yfinance/utils.py | 356 | def format_annual_financial_statement(level_detail, annual_dicts, annual_order, ttm_dicts=None, ttm_order=None): | CODE |
| LOW | yfinance/utils.py | 386 | def format_quarterly_financial_statement(_statement, level_detail, order): | CODE |
| LOW | yfinance/utils.py | 1047 | def _generate_table_configurations(title = None) -> str: | CODE |
| LOW | yfinance/utils.py | 1097 | def generate_list_table_from_dict_universal(data: dict, bullets: bool=True, title: str=None, concat_keys=[]) -> str: | CODE |
| LOW | yfinance/utils.py | 1062 | def generate_list_table_from_dict(data: dict, bullets: bool=True, title: str=None) -> str: | STRING |
| LOW | yfinance/utils.py | 1080 | # def generate_list_table_from_dict_of_dict(data: dict, bullets: bool=True, title: str=None) -> str: | STRING |
| LOW | yfinance/base.py | 220 | def get_recommendations_summary(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 246 | def get_institutional_holders(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 274 | def get_insider_roster_holders(self, as_dict=False): | CODE |
| LOW | yfinance/base.py | 317 | def get_analyst_price_targets(self) -> dict: | CODE |
| LOW | yfinance/base.py | 645 | def _get_earnings_dates_using_scrape(self, limit = 12, offset = 0) -> Optional[pd.DataFrame]: | CODE |
| LOW | yfinance/base.py | 740 | def _get_earnings_dates_using_screener(self, limit=12) -> Optional[pd.DataFrame]: | CODE |
| LOW | yfinance/data.py | 286 | def _get_cookie_and_crumb_basic(self, timeout): | CODE |
| LOW | yfinance/calendars.py | 295 | def _get_most_active_operands( | CODE |
| LOW | yfinance/calendars.py | 334 | def _get_startdatetime_operators(self, start=None, end=None) -> CalendarQuery: | CODE |
| LOW | yfinance/calendars.py | 472 | def get_economic_events_calendar( | CODE |
| LOW | yfinance/scrapers/holders.py | 110 | def _parse_institution_ownership(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 134 | def _parse_major_direct_holders(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 146 | def _parse_major_holders_breakdown(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 155 | def _parse_insider_transactions(self, data): | CODE |
| LOW | yfinance/scrapers/holders.py | 209 | def _parse_net_share_purchase_activity(self, data): | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 57 | def get_balance_sheet_time_series(self, freq="yearly") -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 63 | def get_cash_flow_time_series(self, freq="yearly") -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 116 | def _get_financials_time_series(self, timescale, keys: list) -> pd.DataFrame: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 187 | def _fetch_fundamentals_chunked(self, ts_url_base: str, timescale: str, keys: list, period_qs: str) -> list: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 195 | def _fetch_fundamentals_payload(self, url: str) -> list: | CODE |
| LOW | yfinance/scrapers/quote.py | 308 | def regular_market_previous_close(self): | CODE |
| LOW | yfinance/scrapers/quote.py | 432 | def three_month_average_volume(self): | CODE |
| LOW | yfinance/scrapers/quote.py | 739 | def _fetch_valuation_measures(self, freq="quarterly"): | CODE |
| LOW | yfinance/scrapers/history.py | 663 | def _load_history_metadata_trading_periods(self): | CODE |
| LOW | yfinance/scrapers/history.py | 808 | def _reconstruct_intervals_batch(self, df, interval, prepost, tag=-1): | CODE |
| LOW | yfinance/scrapers/history.py | 3014 | def _fix_prices_sudden_change(self, df, interval, tz_exchange, change, unit_switch=False, correct_volume=False, corr | CODE |
| LOW | yfinance/scrapers/history.py | 3365 | def _calc_volume_zscore_weighted(volume, dt, block): | CODE |
| LOW | yfinance/domain/industry.py | 88 | def _parse_top_performing_companies(self, top_performing_companies: Dict) -> Optional[_pd.DataFrame]: | CODE |
| LOW | yfinance/domain/industry.py | 110 | def _parse_top_growth_companies(self, top_growth_companies: Dict) -> Optional[_pd.DataFrame]: | CODE |
| LOW | tests/test_download_concurrency.py | 22 | def test_concurrent_downloads_keep_results_separate(self): | CODE |
| LOW | tests/test_download_concurrency.py | 37 | def test_concurrent_downloads_do_not_raise(self): | CODE |
| LOW | tests/test_download_concurrency.py | 43 | def test_download_does_not_use_module_globals(self): | CODE |
| LOW | tests/test_ticker_locale.py | 16 | def test_default_locale_is_en_us(self): | CODE |
| LOW | tests/test_ticker_locale.py | 20 | def test_default_returns_english(self): | CODE |
| LOW | tests/test_ticker_locale.py | 45 | def test_locale_us_listing_not_translated(self): | CODE |
| LOW | tests/test_utils.py | 32 | def test_mixed_timezones_to_datetime_fails(self): | CODE |
| LOW | tests/test_utils.py | 38 | def test_mixed_timezones_to_datetime(self): | CODE |
| LOW⚡ | tests/test_utils.py | 52 | def test_is_valid_period_format_valid(self): | CODE |
| LOW⚡ | tests/test_utils.py | 58 | def test_is_valid_period_format_invalid(self): | CODE |
| LOW⚡ | tests/test_utils.py | 65 | def test_is_valid_period_format_edge_cases(self): | CODE |
| LOW | tests/test_utils.py | 114 | def test_same_month_different_year(self): | CODE |
| LOW | tests/test_utils.py | 138 | def test_nonstandard_quarters(self): | CODE |
| LOW | tests/test_utils.py | 190 | def test_no_generic_timedelta_deprecation_warning(self): | CODE |
| LOW | tests/test_utils.py | 203 | def test_interval_to_timedelta_values(self): | CODE |
| LOW | tests/test_utils.py | 226 | def test_multiday_interval_does_not_raise(self): | CODE |
| LOW | tests/test_utils.py | 235 | def test_multiday_interval_does_not_warn(self): | CODE |
| LOW | tests/test_screener.py | 16 | def test_set_large_size_in_body(self, mock_post): | CODE |
| LOW | tests/test_screener.py | 38 | def test_no_screener_field_is_two_fields_concatenated(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 7 | def test_default_region_is_us(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 11 | def test_region_is_normalized(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 16 | def test_us_and_gb_top_companies_differ(self): | CODE |
| LOW⚡ | tests/test_sector_region.py | 25 | def test_industry_region_propagates(self): | CODE |
| 107 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/multi.py | 217 | except Exception: | CODE |
| LOW | yfinance/multi.py | 298 | except Exception as e: | CODE |
| LOW | yfinance/cache.py | 67 | except Exception: | CODE |
| LOW | yfinance/cache.py | 262 | except Exception: | CODE |
| LOW | yfinance/cache.py | 472 | except Exception: | CODE |
| MEDIUM | yfinance/utils.py | 352 | print(f"An error occurred while processing the key: {e}") | CODE |
| LOW | yfinance/live.py | 30 | except Exception as e: | CODE |
| LOW | yfinance/live.py | 66 | except Exception as e: | CODE |
| LOW | yfinance/live.py | 86 | except Exception as e: | CODE |
| MEDIUM | yfinance/live.py | 91 | print(f"Error in heartbeat subscription: {e}") | CODE |
| LOW | yfinance/live.py | 171 | except Exception as handler_exception: | CODE |
| MEDIUM | yfinance/live.py | 176 | print("Error in message handler:", handler_exception) | CODE |
| LOW | yfinance/live.py | 187 | except Exception as e: | CODE |
| MEDIUM | yfinance/live.py | 192 | print("Error while listening to messages: %s", e) | CODE |
| LOW | yfinance/live.py | 242 | except Exception as e: | CODE |
| LOW⚡ | yfinance/live.py | 314 | except Exception as handler_exception: | CODE |
| MEDIUM⚡ | yfinance/live.py | 319 | print("Error in message handler:", handler_exception) | CODE |
| LOW⚡ | yfinance/live.py | 329 | except Exception as e: | CODE |
| MEDIUM⚡ | yfinance/live.py | 334 | print("Error while listening to messages: %s", e) | CODE |
| MEDIUM | yfinance/live.py | 59 | def _connect(self): | CODE |
| MEDIUM | yfinance/live.py | 235 | def _connect(self): | CODE |
| LOW | yfinance/base.py | 187 | except Exception as e: | CODE |
| LOW | yfinance/base.py | 200 | except Exception as err: | CODE |
| LOW | yfinance/base.py | 545 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 174 | except Exception: | CODE |
| LOW | yfinance/data.py | 246 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 448 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 477 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 493 | except Exception as e: | CODE |
| LOW | yfinance/data.py | 536 | except Exception: | CODE |
| LOW | yfinance/data.py | 676 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/fundamentals.py | 106 | except Exception: | CODE |
| LOW⚡ | yfinance/scrapers/fundamentals.py | 138 | except Exception as e: | CODE |
| LOW⚡ | yfinance/scrapers/fundamentals.py | 146 | except Exception: | CODE |
| LOW | yfinance/scrapers/quote.py | 157 | except Exception: | CODE |
| LOW | yfinance/scrapers/quote.py | 486 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/quote.py | 766 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/quote.py | 825 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/funds.py | 196 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/history.py | 299 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 312 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 599 | except Exception as e: | CODE |
| LOW | yfinance/scrapers/history.py | 681 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 707 | except Exception: | CODE |
| LOW | yfinance/scrapers/history.py | 1226 | except Exception: | CODE |
| LOW | yfinance/domain/market.py | 91 | except Exception as e: | CODE |
| LOW | yfinance/domain/market.py | 112 | except Exception as e: | CODE |
| LOW | yfinance/domain/market.py | 125 | except Exception as e: | CODE |
| MEDIUM | yfinance/domain/market.py | 29 | def __init__(self, market, session=None, timeout=30): | CODE |
| LOW | yfinance/domain/industry.py | 148 | except Exception as e: | CODE |
| LOW | yfinance/domain/sector.py | 147 | except Exception as e: | CODE |
| LOW | tests/test_ticker.py | 1175 | except Exception as e: | CODE |
| LOW | tests/test_ticker.py | 1323 | except Exception: | CODE |
| LOW | tests/test_ticker.py | 1454 | except Exception as e: | CODE |
| LOW | tests/test_price_repair.py | 299 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 344 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 375 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 410 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 480 | except Exception: | CODE |
| LOW | tests/test_price_repair.py | 668 | except Exception: | CODE |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | yfinance/cache.py | 15 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 17 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 210 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 212 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 420 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 422 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 621 | # -------------- | COMMENT |
| MEDIUM | yfinance/cache.py | 623 | # -------------- | COMMENT |
| MEDIUM | yfinance/ticker.py | 107 | # ------------------------ | COMMENT |
| MEDIUM | yfinance/base.py | 131 | # ------------------------ | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 9 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 11 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 16 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_async.py | 18 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 7 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 9 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 14 | # ======================= | COMMENT |
| MEDIUM⚡ | doc/source/reference/examples/live_sync.py | 16 | # ======================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | yfinance/_http.py | 88 | except ImportError: | CODE |
| HIGH | yfinance/_http.py | 93 | except ImportError: | CODE |
| HIGH | yfinance/cache.py | 67 | except Exception: | CODE |
| HIGH | yfinance/cache.py | 262 | except Exception: | CODE |
| HIGH | yfinance/cache.py | 472 | except Exception: | CODE |
| HIGH | yfinance/scrapers/history.py | 707 | except Exception: | CODE |
| HIGH | tests/test_auth.py | 151 | except ConnectionError: | CODE |
| HIGH | tests/test_cookie_crumb_degradation.py | 89 | except YFRateLimitError: | CODE |
| HIGH | tests/test_ticker.py | 1323 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/tickers.py | 22 | CODE | |
| LOW | yfinance/multi.py | 22 | CODE | |
| LOW | yfinance/__init__.py | 23 | CODE | |
| LOW | yfinance/__init__.py | 24 | CODE | |
| LOW | yfinance/__init__.py | 25 | CODE | |
| LOW | yfinance/__init__.py | 26 | CODE | |
| LOW | yfinance/__init__.py | 27 | CODE | |
| LOW | yfinance/__init__.py | 28 | CODE | |
| LOW | yfinance/__init__.py | 29 | CODE | |
| LOW | yfinance/__init__.py | 29 | CODE | |
| LOW | yfinance/__init__.py | 30 | CODE | |
| LOW | yfinance/__init__.py | 31 | CODE | |
| LOW | yfinance/__init__.py | 32 | CODE | |
| LOW | yfinance/__init__.py | 33 | CODE | |
| LOW | yfinance/__init__.py | 34 | CODE | |
| LOW | yfinance/__init__.py | 34 | CODE | |
| LOW | yfinance/__init__.py | 36 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 38 | CODE | |
| LOW | yfinance/__init__.py | 39 | CODE | |
| LOW | yfinance/__init__.py | 39 | CODE | |
| LOW | yfinance/utils.py | 22 | CODE | |
| LOW | yfinance/utils.py | 50 | CODE | |
| LOW | yfinance/ticker.py | 22 | CODE | |
| LOW | yfinance/base.py | 22 | CODE | |
| LOW | yfinance/calendars.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 1 | CODE | |
| LOW | yfinance/screener/__init__.py | 2 | CODE | |
| LOW | yfinance/screener/__init__.py | 2 | CODE | |
| LOW | yfinance/domain/__init__.py | 2 | CODE | |
| LOW | yfinance/domain/__init__.py | 3 | CODE | |
| LOW | yfinance/domain/industry.py | 1 | CODE | |
| LOW | yfinance/domain/sector.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/multi.py | 125 | CODE | |
| LOW | yfinance/multi.py | 231 | CODE | |
| LOW | yfinance/utils.py | 326 | CODE | |
| LOW | yfinance/utils.py | 474 | CODE | |
| LOW | yfinance/utils.py | 659 | CODE | |
| LOW | yfinance/utils.py | 687 | CODE | |
| LOW | yfinance/utils.py | 775 | CODE | |
| LOW | yfinance/utils.py | 923 | CODE | |
| LOW | yfinance/utils.py | 1097 | CODE | |
| LOW | yfinance/live.py | 75 | CODE | |
| LOW | yfinance/live.py | 140 | CODE | |
| LOW | yfinance/live.py | 291 | CODE | |
| LOW | yfinance/base.py | 138 | CODE | |
| LOW | yfinance/base.py | 172 | CODE | |
| LOW | yfinance/const.py | 383 | CODE | |
| LOW | yfinance/screener/query.py | 16 | CODE | |
| LOW | yfinance/screener/screener.py | 64 | CODE | |
| LOW | yfinance/scrapers/analysis.py | 141 | CODE | |
| LOW | yfinance/scrapers/quote.py | 532 | CODE | |
| LOW | yfinance/scrapers/quote.py | 548 | CODE | |
| LOW | yfinance/scrapers/quote.py | 564 | CODE | |
| LOW | yfinance/scrapers/quote.py | 679 | CODE | |
| LOW | yfinance/scrapers/quote.py | 739 | CODE | |
| LOW | yfinance/scrapers/quote.py | 724 | CODE | |
| LOW | yfinance/scrapers/history.py | 105 | CODE | |
| LOW | yfinance/scrapers/history.py | 752 | CODE | |
| LOW | yfinance/scrapers/history.py | 808 | CODE | |
| LOW | yfinance/scrapers/history.py | 1255 | CODE | |
| LOW | yfinance/scrapers/history.py | 1303 | CODE | |
| LOW | yfinance/scrapers/history.py | 1458 | CODE | |
| LOW | yfinance/scrapers/history.py | 1754 | CODE | |
| LOW | yfinance/scrapers/history.py | 3014 | CODE | |
| LOW | tests/test_ticker.py | 153 | CODE | |
| LOW | tests/test_ticker.py | 311 | CODE | |
| LOW | tests/test_price_repair.py | 25 | CODE | |
| LOW | tests/test_price_repair.py | 263 | CODE | |
| LOW | tests/test_price_repair.py | 384 | CODE | |
| LOW | tests/test_price_repair.py | 457 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/tickers.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/multi.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/lookup.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/__init__.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/shared.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/utils.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/utils.py | 1081 | # """ | COMMENT |
| LOW | yfinance/search.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/ticker.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/base.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | yfinance/scrapers/quote.py | 841 | keys = {"trailingPegRatio"} | COMMENT |
| LOW | yfinance/scrapers/quote.py | 921 | return None | COMMENT |
| LOW | yfinance/scrapers/quote.py | 941 | # if c.startswith('EX-'): | COMMENT |
| LOW | tests/test_ticker.py | 201 | f"End date {df.index[-1]} out of range for period={period}") | COMMENT |
| LOW | tests/test_ticker.py | 461 | COMMENT | |
| LOW | tests/test_ticker.py | 1041 | # dividend date is not available for tested ticker GOOGL | COMMENT |
| LOW | tests/test_ticker.py | 1341 | # key_rename_map["quote_type"] = "quoteType" | COMMENT |
| LOW | tests/test_ticker.py | 1361 | # key_rename_map["market_cap"] = "marketCap" | COMMENT |
| LOW | tests/test_ticker.py | 1381 | # custom_tolerances["two_hundred_day_average"] = 1e-2 | COMMENT |
| LOW | tests/test_ticker.py | 1401 | # if k in bad_keys: | COMMENT |
| LOW | .github/FUNDING.yml | 1 | # # These are supported funding model platforms | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/tickers.py | 50 | CODE | |
| LOW | yfinance/tickers.py | 63 | CODE | |
| LOW | yfinance/multi.py | 55 | CODE | |
| LOW | yfinance/multi.py | 125 | CODE | |
| LOW | yfinance/multi.py | 260 | CODE | |
| LOW | yfinance/multi.py | 272 | CODE | |
| LOW | yfinance/search.py | 32 | CODE | |
| LOW | yfinance/base.py | 283 | CODE | |
| LOW | yfinance/base.py | 322 | CODE | |
| LOW | yfinance/data.py | 599 | CODE | |
| LOW | yfinance/screener/screener.py | 64 | CODE | |
| LOW | yfinance/scrapers/holders.py | 69 | CODE | |
| LOW | yfinance/scrapers/funds.py | 176 | CODE | |
| LOW | yfinance/scrapers/history.py | 105 | CODE | |
| LOW | yfinance/domain/domain.py | 127 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/utils.py | 316 | if 'children' in node: # Check if the node has children | CODE |
| LOW⚡ | yfinance/utils.py | 320 | for key in data['template']: # Loop through the data | CODE |
| LOW | yfinance/utils.py | 660 | # Check if second date dt2 in interval starting at dt1 | COMMENT |
| LOW | yfinance/scrapers/history.py | 1889 | # Check if dividend is 100x market movement. | COMMENT |
| LOW | yfinance/scrapers/history.py | 2076 | # Check if the present div-adjustment is too big/small, or missing | COMMENT |
| LOW | yfinance/scrapers/history.py | 2094 | # Check if adjustment too small | COMMENT |
| LOW | yfinance/scrapers/history.py | 2266 | # Check if the present div-adjustment contradicts price action | COMMENT |
| LOW | yfinance/scrapers/history.py | 2529 | # Check if div_too_big AND adj-too-small-for-prices | COMMENT |
| LOW | yfinance/scrapers/history.py | 3233 | # Set threshold to halfway between split ratio and largest expected normal price change | COMMENT |
| LOW | tests/test_search.py | 25 | # Check if the fuzzy search retrieves relevant results despite the typo | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | yfinance/__init__.py | 47 | __all__ = ['download', 'Market', 'MarketRegion', 'Search', 'Lookup', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_c | CODE |
| LOW | yfinance/screener/__init__.py | 4 | __all__ = ['EquityQuery', 'FundQuery', 'ETFQuery', 'screen', 'PREDEFINED_SCREENER_QUERIES'] | CODE |
| LOW | yfinance/domain/__init__.py | 5 | __all__ = ['Sector', 'Industry'] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | yfinance/base.py | 685 | # Define the URL | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/scrapers/fundamentals.py | 154 | # Step 1: get columns and index: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | yfinance/scrapers/fundamentals.py | 154 | # Step 1: get columns and index: | COMMENT |