Coverage report: 42%

Files Functions Classes

coverage.py v7.13.5, created at 2026-05-08 08:37 +1200

File function   statements missing excluded   coverage
apps / __init__.py (no function)   0 0 0   100%
apps / backend / __init__.py (no function)   0 0 0   100%
apps / backend / api / __init__.py (no function)   0 0 0   100%
apps / backend / api / main.py legacy_api_redirects   8 0 0   100%
apps / backend / api / main.py add_no_cache_headers   6 0 0   100%
apps / backend / api / main.py add_request_id   6 0 0   100%
apps / backend / api / main.py log_requests   6 0 0   100%
apps / backend / api / main.py rating_etag_middleware   37 16 0   57%
apps / backend / api / main.py start_scheduler   9 3 0   67%
apps / backend / api / main.py stop_scheduler   3 0 0   100%
apps / backend / api / main.py get_db   2 2 0   0%
apps / backend / api / main.py verify_admin_token   3 0 0   100%
apps / backend / api / main.py _normalize_club_code   7 7 0   0%
apps / backend / api / main.py _generate_hrnz_urls   9 9 0   0%
apps / backend / api / main.py _resolve_meeting_date   32 32 0   0%
apps / backend / api / main.py _build_pagination_meta   13 13 0   0%
apps / backend / api / main.py root   1 1 0   0%
apps / backend / api / main.py serve_docs_site   1 1 0   0%
apps / backend / api / main.py serve_home   4 4 0   0%
apps / backend / api / main.py serve_horse_detail   4 4 0   0%
apps / backend / api / main.py serve_driver_detail   4 4 0   0%
apps / backend / api / main.py serve_trainer_detail   4 4 0   0%
apps / backend / api / main.py serve_race_detail   4 4 0   0%
apps / backend / api / main.py serve_race_cards_index   4 4 0   0%
apps / backend / api / main.py serve_race_card   4 4 0   0%
apps / backend / api / main.py serve_search   4 4 0   0%
apps / backend / api / main.py serve_analytics   4 4 0   0%
apps / backend / api / main.py serve_analytics_dashboard   4 4 0   0%
apps / backend / api / main.py serve_data_correction   4 4 0   0%
apps / backend / api / main.py health_check   1 0 0   100%
apps / backend / api / main.py get_horse_ratings   24 12 0   50%
apps / backend / api / main.py get_horse_detail   11 11 0   0%
apps / backend / api / main.py get_driver_ratings   11 11 0   0%
apps / backend / api / main.py get_trainer_ratings   11 11 0   0%
apps / backend / api / main.py get_driver_detail   11 1 0   91%
apps / backend / api / main.py get_trainer_detail   11 1 0   91%
apps / backend / api / main.py get_race   6 6 0   0%
apps / backend / api / main.py list_races   19 19 0   0%
apps / backend / api / main.py trigger_ingestion   6 6 0   0%
apps / backend / api / main.py webhook_scrape   73 73 0   0%
apps / backend / api / main.py webhook_scrape._run_recompute   2 2 0   0%
apps / backend / api / main.py trigger_recompute   5 5 0   0%
apps / backend / api / main.py list_scheduled_jobs   3 0 0   100%
apps / backend / api / main.py add_scheduled_job   10 0 0   100%
apps / backend / api / main.py remove_scheduled_job   5 0 0   100%
apps / backend / api / main.py create_audit_log   7 7 0   0%
apps / backend / api / main.py list_audit_logs   6 6 0   0%
apps / backend / api / main.py get_audit_log_for_record   2 2 0   0%
apps / backend / api / main.py get_race_predictions   16 4 0   75%
apps / backend / api / main.py get_upcoming_races   7 7 0   0%
apps / backend / api / main.py compare_prediction_to_actual   6 6 0   0%
apps / backend / api / main.py get_accuracy_summary   58 58 0   0%
apps / backend / api / main.py get_accuracy_summary._bucket_stats   3 3 0   0%
apps / backend / api / main.py export_ratings_csv   25 25 0   0%
apps / backend / api / main.py export_ratings_parquet   35 35 0   0%
apps / backend / api / main.py export_predictions_csv   30 30 0   0%
apps / backend / api / main.py export_predictions_parquet   40 40 0   0%
apps / backend / api / main.py export_race_predictions_pdf   45 45 0   0%
apps / backend / api / main.py websocket_race_endpoint   39 10 0   74%
apps / backend / api / main.py metrics   1 1 0   0%
apps / backend / api / main.py (no function)   365 0 3   100%
apps / backend / api / websocket.py ConnectionManager.__init__   3 0 0   100%
apps / backend / api / websocket.py ConnectionManager.connect   4 0 0   100%
apps / backend / api / websocket.py ConnectionManager.disconnect   5 0 0   100%
apps / backend / api / websocket.py ConnectionManager.send_personal_message   4 0 0   100%
apps / backend / api / websocket.py ConnectionManager.broadcast_to_race   7 0 0   100%
apps / backend / api / websocket.py ConnectionManager.get_connection_count   1 0 0   100%
apps / backend / api / websocket.py ConnectionManager.is_simulation_running   1 0 0   100%
apps / backend / api / websocket.py ConnectionManager.start_simulation   4 0 0   100%
apps / backend / api / websocket.py ConnectionManager.stop_simulation   4 0 0   100%
apps / backend / api / websocket.py ConnectionManager.close_all   11 2 0   82%
apps / backend / api / websocket.py _build_initial_state   13 0 0   100%
apps / backend / api / websocket.py simulate_race_updates   24 24 0   0%
apps / backend / api / websocket.py (no function)   41 0 0   100%
apps / backend / worker / __init__.py (no function)   0 0 0   100%
apps / backend / worker / cli.py _subtract_months   6 0 0   100%
apps / backend / worker / cli.py cli   1 0 0   100%
apps / backend / worker / cli.py normalize_races   32 32 0   0%
apps / backend / worker / cli.py ingest   33 33 0   0%
apps / backend / worker / cli.py recompute   14 14 0   0%
apps / backend / worker / cli.py scrape_hrnz   40 40 0   0%
apps / backend / worker / cli.py scrape_hrnz.scrape_and_import   46 46 0   0%
apps / backend / worker / cli.py scrape_hrnz_enquiry   33 33 0   0%
apps / backend / worker / cli.py scrape_hrnz_enquiry.scrape_and_import   53 53 0   0%
apps / backend / worker / cli.py refresh_club_codes   21 21 0   0%
apps / backend / worker / cli.py info   18 18 0   0%
apps / backend / worker / cli.py data_quality   54 54 0   0%
apps / backend / worker / cli.py backfill   88 16 0   82%
apps / backend / worker / cli.py (no function)   69 0 2   100%
packages / __init__.py (no function)   0 0 0   100%
packages / betting / __init__.py (no function)   0 0 0   100%
packages / betting / odds_client.py OddsComparisonClient.__init__   3 3 0   0%
packages / betting / odds_client.py OddsComparisonClient.get_race_odds   0 0 1   100%
packages / betting / odds_client.py OddsComparisonClient.implied_probability   3 3 0   0%
packages / betting / odds_client.py OddsComparisonClient.compare_to_model   0 0 1   100%
packages / betting / odds_client.py OddsComparisonClient.clear_cache   1 1 0   0%
packages / betting / odds_client.py (no function)   9 9 0   0%
packages / betting / value_bets.py ValueBetFinder.__init__   3 3 0   0%
packages / betting / value_bets.py ValueBetFinder.find_value_bets   0 0 1   100%
packages / betting / value_bets.py ValueBetFinder.kelly_criterion   7 7 0   0%
packages / betting / value_bets.py ValueBetFinder.filter_by_confidence   3 3 0   0%
packages / betting / value_bets.py ValueBetFinder.summarize   3 3 0   0%
packages / betting / value_bets.py (no function)   9 9 0   0%
packages / core / __init__.py (no function)   0 0 0   100%
packages / core / common / __init__.py (no function)   0 0 0   100%
packages / core / common / cache.py _memory_get   12 12 0   0%
packages / core / common / cache.py _memory_set   3 3 0   0%
packages / core / common / cache.py _memory_delete   2 2 0   0%
packages / core / common / cache.py _memory_clear   2 2 0   0%
packages / core / common / cache.py _get_redis_client   20 20 0   0%
packages / core / common / cache.py get_cache   6 6 0   0%
packages / core / common / cache.py cache_get   11 11 0   0%
packages / core / common / cache.py cache_set   10 10 0   0%
packages / core / common / cache.py cache_delete   8 8 0   0%
packages / core / common / cache.py cache_clear   7 7 0   0%
packages / core / common / cache.py (no function)   23 0 0   100%
packages / core / common / data_quality.py DataQualityReport.error_count   1 1 0   0%
packages / core / common / data_quality.py DataQualityReport.warning_count   1 1 0   0%
packages / core / common / data_quality.py DataQualityReport.has_errors   1 1 0   0%
packages / core / common / data_quality.py DataQualityValidator.__init__   1 0 0   100%
packages / core / common / data_quality.py DataQualityValidator.validate_race   5 0 0   100%
packages / core / common / data_quality.py DataQualityValidator._validate_placings   20 5 0   75%
packages / core / common / data_quality.py DataQualityValidator._validate_completeness   14 2 0   86%
packages / core / common / data_quality.py DataQualityValidator._detect_suspicious_results   14 2 0   86%
packages / core / common / data_quality.py DataQualityValidator.generate_report   16 16 0   0%
packages / core / common / data_quality.py DataQualityValidator._compute_metrics   9 9 0   0%
packages / core / common / data_quality.py check_data_freshness   7 7 0   0%
packages / core / common / data_quality.py (no function)   41 0 0   100%
packages / core / common / logging.py CustomJsonFormatter.add_fields   3 0 0   100%
packages / core / common / logging.py setup_logging   13 1 0   92%
packages / core / common / logging.py get_logger   1 0 0   100%
packages / core / common / logging.py log_slow_query   9 9 0   0%
packages / core / common / logging.py log_api_request   6 6 0   0%
packages / core / common / logging.py _trunc_log_value   2 2 0   0%
packages / core / common / logging.py (no function)   12 0 0   100%
packages / core / common / rate_limit.py get_user_rate_limit_key   6 3 0   50%
packages / core / common / rate_limit.py (no function)   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.__init__   3 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.start   6 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.shutdown   6 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.running   1 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.add_ingest_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.add_recompute_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.add_scrape_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.add_eval_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.add_full_recompute_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler._send_failure_notification   20 17 0   15%
packages / core / common / scheduler.py TipSharksScheduler.list_jobs   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.remove_job   7 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.get_job   4 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler._get_timezone   1 0 0   100%
packages / core / common / scheduler.py TipSharksScheduler.load_default_jobs   13 1 0   92%
packages / core / common / scheduler.py _notify_failure   2 0 0   100%
packages / core / common / scheduler.py _run_ingest   20 2 0   90%
packages / core / common / scheduler.py _run_recompute   19 2 0   89%
packages / core / common / scheduler.py _run_scrape   17 17 0   0%
packages / core / common / scheduler.py _run_scrape._scrape_all   52 52 0   0%
packages / core / common / scheduler.py _run_eval   34 34 0   0%
packages / core / common / scheduler.py _run_full_recompute   18 18 0   0%
packages / core / common / scheduler.py (no function)   36 0 0   100%
packages / core / common / settings.py RatingSettings.parse_distance_buckets   3 1 0   67%
packages / core / common / settings.py RatingSettings.validate_bucket_size   4 0 0   100%
packages / core / common / settings.py RatingSettings.validate_rating_bounds   4 0 0   100%
packages / core / common / settings.py get_settings   3 0 0   100%
packages / core / common / settings.py reload_settings   2 0 0   100%
packages / core / common / settings.py (no function)   148 0 0   100%
packages / core / common / utils.py parse_date   4 4 0   0%
packages / core / common / utils.py format_date   1 1 0   0%
packages / core / common / utils.py get_distance_bucket   14 2 0   86%
packages / core / common / utils.py safe_get   6 6 0   0%
packages / core / common / utils.py (no function)   7 0 0   100%
packages / core / ratings / __init__.py (no function)   0 0 0   100%
packages / core / ratings / engine.py RatingEngine.__init__   9 0 0   100%
packages / core / ratings / engine.py RatingEngine.get_or_init_rating   4 0 0   100%
packages / core / ratings / engine.py RatingEngine.load_rating_state   2 0 0   100%
packages / core / ratings / engine.py RatingEngine.sigmoid   4 0 0   100%
packages / core / ratings / engine.py RatingEngine.get_effective_k_factor   18 0 0   100%
packages / core / ratings / engine.py RatingEngine.compute_effective_rating   16 6 0   62%
packages / core / ratings / engine.py RatingEngine._get_barrier_adjustment   6 0 0   100%
packages / core / ratings / engine.py RatingEngine._get_handicap_adjustment   6 1 0   83%
packages / core / ratings / engine.py RatingEngine._resolve_adjustment   10 0 0   100%
packages / core / ratings / engine.py RatingEngine._clamp_adjustment   5 0 0   100%
packages / core / ratings / engine.py RatingEngine.load_adjustments_from_db   13 1 0   92%
packages / core / ratings / engine.py RatingEngine.learn_adjustments_from_race   43 6 0   86%
packages / core / ratings / engine.py RatingEngine.process_race   61 2 0   97%
packages / core / ratings / engine.py RatingEngine._apply_update   24 0 0   100%
packages / core / ratings / engine.py (no function)   41 0 0   100%
packages / core / ratings / form_cycle.py FormCycleDetector.__init__   1 1 0   0%
packages / core / ratings / form_cycle.py FormCycleDetector.detect_horse_form   0 0 1   100%
packages / core / ratings / form_cycle.py FormCycleDetector.detect_driver_form   0 0 1   100%
packages / core / ratings / form_cycle.py FormCycleDetector.detect_trainer_form   0 0 1   100%
packages / core / ratings / form_cycle.py FormCycleDetector.detect_entity_form   7 7 0   0%
packages / core / ratings / form_cycle.py FormCycleDetector.batch_detect   1 1 0   0%
packages / core / ratings / form_cycle.py (no function)   10 10 0   0%
packages / core / ratings / predictions.py PredictionEngine.__init__   8 0 0   100%
packages / core / ratings / predictions.py PredictionEngine.predict_race   48 12 0   75%
packages / core / ratings / predictions.py PredictionEngine._compute_win_probabilities   8 1 0   88%
packages / core / ratings / predictions.py PredictionEngine._compute_place_probabilities   4 0 0   100%
packages / core / ratings / predictions.py PredictionEngine._compute_place_scores   11 1 0   91%
packages / core / ratings / predictions.py PredictionEngine._compute_place_ranks   2 0 0   100%
packages / core / ratings / predictions.py PredictionEngine._get_recent_finish_stats   31 31 0   0%
packages / core / ratings / predictions.py PredictionEngine.get_upcoming_races   5 5 0   0%
packages / core / ratings / predictions.py PredictionEngine.compare_prediction_to_actual   31 31 0   0%
packages / core / ratings / predictions.py export_predictions_csv   8 8 0   0%
packages / core / ratings / predictions.py (no function)   50 0 0   100%
packages / core / ratings / recompute.py recompute_ratings   30 30 0   0%
packages / core / ratings / recompute.py recompute_ratings_incremental   23 23 0   0%
packages / core / ratings / recompute.py _load_entity_rating   5 5 0   0%
packages / core / ratings / recompute.py (no function)   10 0 0   100%
packages / core / ratings / time_weighted_elo.py TimeWeightedElo.__init__   5 5 0   0%
packages / core / ratings / time_weighted_elo.py TimeWeightedElo.compute_multiplier   9 9 0   0%
packages / core / ratings / time_weighted_elo.py TimeWeightedElo.compute_effective_k   5 5 0   0%
packages / core / ratings / time_weighted_elo.py _demo   11 11 0   0%
packages / core / ratings / time_weighted_elo.py (no function)   8 8 2   0%
packages / core / ratings / track_conditions.py _categorise_track   7 7 0   0%
packages / core / ratings / track_conditions.py TrackConditionModel.learn_from_performance   11 11 0   0%
packages / core / ratings / track_conditions.py TrackConditionModel.get_adjustment   8 8 0   0%
packages / core / ratings / track_conditions.py TrackConditionModel.get_population_adjustment   7 7 0   0%
packages / core / ratings / track_conditions.py TrackConditionModel.reset   2 2 0   0%
packages / core / ratings / track_conditions.py _demo   11 11 0   0%
packages / core / ratings / track_conditions.py (no function)   22 22 2   0%
packages / core / storage / __init__.py (no function)   0 0 0   100%
packages / core / storage / audit.py AuditLogger.log_change   13 13 0   0%
packages / core / storage / audit.py AuditLogger.get_changes_for_record   5 5 0   0%
packages / core / storage / audit.py AuditLogger.get_recent_changes   5 5 0   0%
packages / core / storage / audit.py (no function)   14 0 0   100%
packages / core / storage / database.py init_db   25 8 0   68%
packages / core / storage / database.py _setup_slow_query_detection   5 5 0   0%
packages / core / storage / database.py _setup_slow_query_detection._before_cursor_execute   1 1 0   0%
packages / core / storage / database.py _setup_slow_query_detection._after_cursor_execute   5 5 0   0%
packages / core / storage / database.py _sanitize_params   9 9 0   0%
packages / core / storage / database.py _trunc   2 2 0   0%
packages / core / storage / database.py get_engine   3 3 0   0%
packages / core / storage / database.py get_session_factory   3 1 0   67%
packages / core / storage / database.py get_session   9 8 0   11%
packages / core / storage / database.py dispose_db   5 5 0   0%
packages / core / storage / database.py (no function)   21 0 0   100%
packages / core / storage / ingestion.py IngestionService.__init__   5 5 0   0%
packages / core / storage / ingestion.py IngestionService.ingest_date_range   14 14 0   0%
packages / core / storage / ingestion.py IngestionService.ingest_single_date   1 1 0   0%
packages / core / storage / ingestion.py IngestionService._ingest_from_service   12 12 0   0%
packages / core / storage / ingestion.py IngestionService._ingest_meeting   27 27 0   0%
packages / core / storage / ingestion.py IngestionService._ingest_meeting_from_service   34 34 0   0%
packages / core / storage / ingestion.py IngestionService._ingest_race   27 27 0   0%
packages / core / storage / ingestion.py ingest_meetings   2 2 0   0%
packages / core / storage / ingestion.py (no function)   17 0 0   100%
packages / core / storage / models.py Meeting.__repr__   0 0 1   100%
packages / core / storage / models.py Race.__repr__   0 0 4   100%
packages / core / storage / models.py Horse.__repr__   0 0 1   100%
packages / core / storage / models.py Driver.__repr__   0 0 1   100%
packages / core / storage / models.py Trainer.__repr__   0 0 1   100%
packages / core / storage / models.py Starter.__repr__   0 0 4   100%
packages / core / storage / models.py RatingSnapshot.__repr__   0 0 4   100%
packages / core / storage / models.py BarrierAdjustment.__repr__   0 0 4   100%
packages / core / storage / models.py HandicapAdjustment.__repr__   0 0 4   100%
packages / core / storage / models.py (no function)   142 0 9   100%
packages / core / storage / repositories.py normalize_entity_id   13 13 0   0%
packages / core / storage / repositories.py normalize_runner_data   31 31 0   0%
packages / core / storage / repositories.py normalize_race_data   14 14 0   0%
packages / core / storage / repositories.py generate_driver_id   5 5 0   0%
packages / core / storage / repositories.py generate_trainer_id   5 5 0   0%
packages / core / storage / repositories.py parse_tab_datetime   10 7 0   30%
packages / core / storage / repositories.py parse_tab_date   11 11 0   0%
packages / core / storage / repositories.py MeetingRepository.upsert   16 16 0   0%
packages / core / storage / repositories.py MeetingRepository.get_by_id   1 1 0   0%
packages / core / storage / repositories.py MeetingRepository.get_by_date_range   1 1 0   0%
packages / core / storage / repositories.py RaceRepository.upsert   29 29 0   0%
packages / core / storage / repositories.py RaceRepository._parse_race_datetime   21 5 0   76%
packages / core / storage / repositories.py RaceRepository.get_by_meeting   1 1 0   0%
packages / core / storage / repositories.py RaceRepository.get_races_for_recompute   1 1 0   0%
packages / core / storage / repositories.py HorseRepository.upsert   7 7 0   0%
packages / core / storage / repositories.py DriverRepository.upsert   9 9 0   0%
packages / core / storage / repositories.py TrainerRepository.upsert   9 9 0   0%
packages / core / storage / repositories.py StarterRepository.upsert   63 63 0   0%
packages / core / storage / repositories.py StarterRepository.get_by_race   1 1 0   0%
packages / core / storage / repositories.py RatingSnapshotRepository.upsert   5 5 0   0%
packages / core / storage / repositories.py RatingSnapshotRepository.get_latest_rating   9 9 0   0%
packages / core / storage / repositories.py RatingSnapshotRepository.get_top_ratings   19 19 0   0%
packages / core / storage / repositories.py BarrierAdjustmentRepository.upsert   5 5 0   0%
packages / core / storage / repositories.py BarrierAdjustmentRepository.get_all   1 1 0   0%
packages / core / storage / repositories.py BarrierAdjustmentRepository.increment_sample   7 7 0   0%
packages / core / storage / repositories.py HandicapAdjustmentRepository.upsert   5 5 0   0%
packages / core / storage / repositories.py HandicapAdjustmentRepository.get_all   1 1 0   0%
packages / core / storage / repositories.py HandicapAdjustmentRepository.increment_sample   7 7 0   0%
packages / core / storage / repositories.py (no function)   71 0 0   100%
packages / hrnz_scraper / __init__.py (no function)   3 0 0   100%
packages / hrnz_scraper / club_refresh.py _get_cache_path   11 11 0   0%
packages / hrnz_scraper / club_refresh.py _extract_club_codes_from_html   18 18 0   0%
packages / hrnz_scraper / club_refresh.py _try_fetch_infohorse_index   15 15 0   0%
packages / hrnz_scraper / club_refresh.py _try_fetch_harness_index   11 11 0   0%
packages / hrnz_scraper / club_refresh.py _try_fetch_todays_meeting   17 17 0   0%
packages / hrnz_scraper / club_refresh.py fetch_club_codes_from_hrnz   18 18 0   0%
packages / hrnz_scraper / club_refresh.py load_cached_codes   12 12 0   0%
packages / hrnz_scraper / club_refresh.py save_cached_codes   6 6 0   0%
packages / hrnz_scraper / club_refresh.py refresh_club_codes   33 33 0   0%
packages / hrnz_scraper / club_refresh.py generate_diff_report   23 23 0   0%
packages / hrnz_scraper / club_refresh.py (no function)   22 22 5   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.__init__   10 10 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.__aenter__   2 2 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.__aexit__   1 1 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._ensure_browser   6 6 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.close   7 7 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._rate_limited_fetch   20 20 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.iter_meetings   17 17 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.list_meetings_for_month   3 3 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper.get_meeting_results   28 28 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._build_raceday_search_url   2 2 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_raceday_list   20 20 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_raceday_header   17 17 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_meeting_header   22 22 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_date   17 17 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_races   7 7 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_race_links   45 45 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_race_page   43 43 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_race_section   50 50 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_race_table   18 18 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._build_header_map   12 12 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_starter_row   95 95 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._parse_starter_row._cell_by_label   9 9 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._extract_uuid   4 4 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._extract_raceday_id   6 6 0   0%
packages / hrnz_scraper / historical_scraper.py HRNZHistoricalResultsScraper._extract_label_value   7 7 0   0%
packages / hrnz_scraper / historical_scraper.py (no function)   46 0 3   100%
packages / hrnz_scraper / mapper.py HRNZDataMapper.map_meeting   6 6 0   0%
packages / hrnz_scraper / mapper.py HRNZDataMapper.map_races   17 17 0   0%
packages / hrnz_scraper / mapper.py HRNZDataMapper.map_starters   28 28 0   0%
packages / hrnz_scraper / mapper.py HRNZDataMapper.map_entities   29 29 0   0%
packages / hrnz_scraper / mapper.py (no function)   14 14 0   0%
packages / hrnz_scraper / proxy.py build_decodo_proxy   24 24 0   0%
packages / hrnz_scraper / proxy.py (no function)   4 0 0   100%
packages / hrnz_scraper / scraper.py HRNZScraper.__init__   4 0 0   100%
packages / hrnz_scraper / scraper.py HRNZScraper.__aenter__   2 2 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper.__aexit__   1 1 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._ensure_browser   6 6 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper.close   7 7 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._rate_limited_fetch   20 20 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper.get_meeting_results   10 10 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_meeting_header   25 25 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_date   18 18 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_races   14 14 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_race_table   20 20 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._build_header_map   12 12 0   0%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_starter_row   79 29 0   63%
packages / hrnz_scraper / scraper.py HRNZScraper._parse_starter_row._cell_by_label   9 2 0   78%
packages / hrnz_scraper / scraper.py HRNZScraper._extract_uuid   4 1 0   75%
packages / hrnz_scraper / scraper.py (no function)   31 0 3   100%
packages / ingest / __init__.py (no function)   0 0 0   100%
packages / ingest / streaming.py StreamingIngestionService.__init__   4 4 0   0%
packages / ingest / streaming.py StreamingIngestionService.register_handler   1 1 0   0%
packages / ingest / streaming.py StreamingIngestionService.start   0 0 1   100%
packages / ingest / streaming.py StreamingIngestionService.stop   0 0 1   100%
packages / ingest / streaming.py StreamingIngestionService.publish   0 0 1   100%
packages / ingest / streaming.py StreamingIngestionService.is_running   1 1 0   0%
packages / ingest / streaming.py (no function)   17 17 0   0%
packages / ingest_client / __init__.py (no function)   2 0 0   100%
packages / ingest_client / client.py IngestServiceClient.__init__   3 3 0   0%
packages / ingest_client / client.py IngestServiceClient.__aenter__   2 2 0   0%
packages / ingest_client / client.py IngestServiceClient.__aexit__   3 3 0   0%
packages / ingest_client / client.py IngestServiceClient._request   5 5 0   0%
packages / ingest_client / client.py IngestServiceClient.get_meetings   11 11 0   0%
packages / ingest_client / client.py IngestServiceClient.get_race   2 2 0   0%
packages / ingest_client / client.py IngestServiceClient.get_runners   2 2 0   0%
packages / ingest_client / client.py IngestServiceClient.get_races   9 9 0   0%
packages / ingest_client / client.py (no function)   15 0 0   100%
packages / ml / __init__.py (no function)   0 0 0   100%
packages / ml / ensemble.py EnsembleModel.__init__   3 3 0   0%
packages / ml / ensemble.py EnsembleModel.train   0 0 1   100%
packages / ml / ensemble.py EnsembleModel.predict   0 0 1   100%
packages / ml / ensemble.py EnsembleModel.evaluate   0 0 1   100%
packages / ml / ensemble.py EnsembleModel.save_weights   0 0 1   100%
packages / ml / ensemble.py EnsembleModel.load_weights   0 0 1   100%
packages / ml / ensemble.py (no function)   10 10 0   0%
packages / ml / features.py FeatureEngineering.__init__   1 1 0   0%
packages / ml / features.py FeatureEngineering.extract_horse_features   0 0 1   100%
packages / ml / features.py FeatureEngineering.extract_race_features   0 0 1   100%
packages / ml / features.py FeatureEngineering.build_training_dataset   0 0 1   100%
packages / ml / features.py FeatureEngineering.feature_names   0 0 1   100%
packages / ml / features.py (no function)   10 10 0   0%
packages / regions / __init__.py (no function)   0 0 0   100%
packages / regions / australia.py AustralianHarnessClient.__init__   2 2 0   0%
packages / regions / australia.py AustralianHarnessClient.get_meetings   0 0 1   100%
packages / regions / australia.py AustralianHarnessClient.get_race_results   0 0 1   100%
packages / regions / australia.py AustralianHarnessClient.get_runner_details   0 0 1   100%
packages / regions / australia.py AustralianHarnessClient.normalize_meeting   0 0 1   100%
packages / regions / australia.py AustralianHarnessClient.normalize_runner   0 0 1   100%
packages / regions / australia.py (no function)   9 9 0   0%
packages / tab_client / __init__.py (no function)   2 0 0   100%
packages / tab_client / client.py TABClient.__init__   3 0 0   100%
packages / tab_client / client.py TABClient.__aenter__   2 0 0   100%
packages / tab_client / client.py TABClient.__aexit__   1 0 0   100%
packages / tab_client / client.py TABClient._ensure_client   2 0 0   100%
packages / tab_client / client.py TABClient.close   3 0 0   100%
packages / tab_client / client.py TABClient._request_with_retry   40 5 0   88%
packages / tab_client / client.py TABClient.get_meetings   10 0 0   100%
packages / tab_client / client.py TABClient.get_meeting   6 1 0   83%
packages / tab_client / client.py TABClient.get_event   6 1 0   83%
packages / tab_client / client.py TABClient.get_races_list   8 8 0   0%
packages / tab_client / client.py get_client   6 6 0   0%
packages / tab_client / client.py (no function)   23 0 2   100%
packages / tab_client / mock_client.py MockTABClient.__init__   2 0 0   100%
packages / tab_client / mock_client.py MockTABClient.__aenter__   1 0 0   100%
packages / tab_client / mock_client.py MockTABClient.__aexit__   1 0 0   100%
packages / tab_client / mock_client.py MockTABClient.close   1 0 0   100%
packages / tab_client / mock_client.py MockTABClient._generate_deterministic_id   1 0 0   100%
packages / tab_client / mock_client.py MockTABClient.get_meetings   25 0 0   100%
packages / tab_client / mock_client.py MockTABClient.get_meeting   8 0 0   100%
packages / tab_client / mock_client.py MockTABClient.get_event   22 0 0   100%
packages / tab_client / mock_client.py MockTABClient.get_races_list   7 7 0   0%
packages / tab_client / mock_client.py (no function)   17 0 0   100%
Total     5362 3125 78   42%

No items found using the specified filter.