Coverage report: 95%

Files Functions Classes

coverage.py v7.16.0, created at 2026-09-22 16:59 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/asgi_profiler/__init__.py Profiler.__init__   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.profiles   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.search   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.slowest   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.summary   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.statements   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.exclude   100% 3 0 0   50% 2 1   80%
src/asgi_profiler/__init__.py Profiler.clear   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/__init__.py Profiler.close   100% 3 0 0   100% 2 0   100%
src/asgi_profiler/__init__.py install   100% 16 0 0   100% 10 0   100%
src/asgi_profiler/__init__.py (no function)   100% 35 0 2   100% 0 0   100%
src/asgi_profiler/__main__.py main   56% 25 11 3   75% 4 1   59%
src/asgi_profiler/__main__.py (no function)   100% 8 0 2   100% 0 0   100%
src/asgi_profiler/config.py ProfilerConfig.detector_settings   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/config.py ProfilerConfig.unknown_detectors   100% 0 0 4   100% 0 0   100%
src/asgi_profiler/config.py ProfilerConfig.compiled_patterns   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/config.py ProfilerConfig.build_excludes   100% 0 0 13   100% 0 0   100%
src/asgi_profiler/config.py (no function)   100% 32 0 2   100% 0 0   100%
src/asgi_profiler/contrib/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py _install_loader   100% 5 0 2   50% 2 1   86%
src/asgi_profiler/contrib/sqladmin.py register   100% 26 0 0   100% 2 0   100%
src/asgi_profiler/contrib/sqladmin.py register.base_url   100% 2 0 2   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py register.ProfilerView.context   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py register.ProfilerView.requests_page   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py register.ProfilerView.detail_page   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/contrib/sqladmin.py register.ProfilerView.summary_page   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py register.ProfilerView.clear   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/contrib/sqladmin.py _int   50% 4 2 0   100% 0 0   50%
src/asgi_profiler/contrib/sqladmin.py (no function)   100% 12 0 3   100% 0 0   100%
src/asgi_profiler/detectors/__init__.py detect   100% 9 0 2   100% 4 0   100%
src/asgi_profiler/detectors/__init__.py (no function)   100% 12 0 2   100% 0 0   100%
src/asgi_profiler/detectors/blocking.py detect   100% 14 0 0   100% 6 0   100%
src/asgi_profiler/detectors/blocking.py _detail   100% 5 0 0   100% 0 0   100%
src/asgi_profiler/detectors/blocking.py (no function)   100% 8 0 0   100% 0 0   100%
src/asgi_profiler/detectors/n_plus_one.py detect   100% 17 0 0   100% 12 0   100%
src/asgi_profiler/detectors/n_plus_one.py _call_site   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/detectors/n_plus_one.py _source_query   100% 5 0 0   75% 4 1   89%
src/asgi_profiler/detectors/n_plus_one.py _detail   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/detectors/n_plus_one.py (no function)   100% 12 0 0   100% 0 0   100%
src/asgi_profiler/detectors/settings.py Settings.runs   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/detectors/settings.py (no function)   100% 17 0 0   100% 0 0   100%
src/asgi_profiler/detectors/slow_query.py detect   100% 15 0 0   100% 8 0   100%
src/asgi_profiler/detectors/slow_query.py (no function)   100% 7 0 0   100% 0 0   100%
src/asgi_profiler/detectors/utils.py total_span_ms   100% 11 0 0   100% 6 0   100%
src/asgi_profiler/detectors/utils.py common_frames   100% 10 0 0   100% 6 0   100%
src/asgi_profiler/detectors/utils.py fingerprint   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/detectors/utils.py (no function)   100% 9 0 0   100% 0 0   100%
src/asgi_profiler/fingerprint.py is_truncated   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/fingerprint.py normalise_sql   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/fingerprint.py sql_hash   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/fingerprint.py (no function)   100% 18 0 1   100% 0 0   100%
src/asgi_profiler/instrument.py install   100% 11 0 0   100% 4 0   100%
src/asgi_profiler/instrument.py install._before   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/instrument.py install._after   75% 4 1 0   50% 2 1   67%
src/asgi_profiler/instrument.py install._error   71% 7 2 0   50% 4 2   64%
src/asgi_profiler/instrument.py uninstall   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/instrument.py _blocks_the_loop   100% 5 0 0   100% 4 0   100%
src/asgi_profiler/instrument.py _record   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/instrument.py _normalise   100% 3 0 1   100% 0 0   100%
src/asgi_profiler/instrument.py _format_params   50% 4 2 1   100% 0 0   50%
src/asgi_profiler/instrument.py _format_error   67% 3 1 1   50% 2 1   60%
src/asgi_profiler/instrument.py _walk_all_frames   82% 11 2 0   75% 8 2   79%
src/asgi_profiler/instrument.py _capture_stack   91% 11 1 0   88% 8 1   89%
src/asgi_profiler/instrument.py (no function)   100% 29 0 2   100% 0 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware.__init__   100% 7 0 0   100% 0 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware.__call__   94% 34 2 0   80% 10 2   91%
src/asgi_profiler/middleware.py ProfilerMiddleware.__call__.send_wrapper   100% 7 0 0   100% 6 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._store   100% 2 0 2   100% 0 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._keep   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._exclude_key   100% 0 0 6   100% 0 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._path_allows   100% 7 0 0   100% 2 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._headers   100% 9 0 0   100% 4 0   100%
src/asgi_profiler/middleware.py ProfilerMiddleware._client   80% 5 1 0   50% 2 1   71%
src/asgi_profiler/middleware.py (no function)   100% 24 0 1   100% 0 0   100%
src/asgi_profiler/models.py Query.failed   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Query.ended_ms   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Query.sql_hash   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Query.truncated   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Query.operation   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/models.py Problem.as_dict   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Problem.from_dict   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.is_duplicate   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.operation   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup._representative   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.stack   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.error   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.failed   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py QueryGroup.avg_ms   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py group_queries   100% 32 0 1   100% 20 0   100%
src/asgi_profiler/models.py Profile.finalise   100% 8 0 0   100% 2 0   100%
src/asgi_profiler/models.py Profile.group   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Profile.query_groups   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Profile.python_ms   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Profile.full_path   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py Profile.status_class   100% 7 0 0   100% 6 0   100%
src/asgi_profiler/models.py Profile.as_dict   100% 6 0 0   100% 2 0   100%
src/asgi_profiler/models.py _percentile   75% 4 1 0   50% 2 1   67%
src/asgi_profiler/models.py PathSummary.set_percentiles   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/models.py PathSummary.avg_ms   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py PathSummary.avg_queries   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py PathSummary.as_dict   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py StatementSummary.avg_ms   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py StatementSummary.per_request   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py StatementSummary.operation   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/models.py StatementSummary.as_dict   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/models.py (no function)   100% 145 0 0   100% 0 0   100%
src/asgi_profiler/routing.py request_path   100% 7 0 0   100% 4 0   100%
src/asgi_profiler/routing.py route_path   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/routing.py _pattern_from_router   75% 4 1 0   50% 2 1   67%
src/asgi_profiler/routing.py _walk_routes   75% 20 5 3   57% 14 2   68%
src/asgi_profiler/routing.py _pattern_from_params   81% 21 4 0   64% 14 3   74%
src/asgi_profiler/routing.py route_pattern   100% 10 0 0   100% 6 0   100%
src/asgi_profiler/routing.py (no function)   100% 13 0 0   100% 0 0   100%
src/asgi_profiler/rules.py profiler_include   100% 4 0 1   50% 2 1   83%
src/asgi_profiler/rules.py profiler_exclude   100% 2 0 1   100% 0 0   100%
src/asgi_profiler/rules.py any_includes   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/rules.py endpoint_decision   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/rules.py compile_pattern   100% 9 0 0   100% 4 0   100%
src/asgi_profiler/rules.py path_allows   100% 0 0 11   100% 0 0   100%
src/asgi_profiler/rules.py _prefix_match   100% 0 0 13   100% 0 0   100%
src/asgi_profiler/rules.py (no function)   100% 12 0 9   100% 0 0   100%
src/asgi_profiler/storage.py Filters.from_params   80% 10 2 0   100% 2 0   83%
src/asgi_profiler/storage.py Filters.active   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Filters.matches   95% 19 1 0   94% 18 1   95%
src/asgi_profiler/storage.py Page.pages   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Page.has_previous   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Page.has_next   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Page.first_index   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Page.last_index   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py Storage.add   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.get   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.list   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.count   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.clear   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.search   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.summarise   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py Storage.statements   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py BaseStorage.list   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py BaseStorage.count   100% 0 0 1   100% 0 0   100%
src/asgi_profiler/storage.py BaseStorage.search   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/storage.py BaseStorage.summarise   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py BaseStorage.statements   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py _paginate   100% 6 0 0   100% 0 0   100%
src/asgi_profiler/storage.py MemoryStorage.__init__   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/storage.py MemoryStorage.add   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/storage.py MemoryStorage.get   100% 5 0 0   100% 4 0   100%
src/asgi_profiler/storage.py MemoryStorage.list   100% 5 0 0   100% 2 0   100%
src/asgi_profiler/storage.py MemoryStorage.count   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/storage.py MemoryStorage.clear   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/storage.py MemoryStorage.__len__   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py _flush_open_stores   0% 3 3 0   0% 2 0   0%
src/asgi_profiler/storage.py SQLiteStorage.__init__   100% 31 0 0   100% 6 0   100%
src/asgi_profiler/storage.py SQLiteStorage._check_schema   100% 3 0 0   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage._prepare_schema   100% 8 0 0   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage.add   100% 7 0 0   100% 4 0   100%
src/asgi_profiler/storage.py SQLiteStorage.flush   75% 8 2 0   83% 6 1   79%
src/asgi_profiler/storage.py SQLiteStorage._alive   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage._drain_forever   100% 0 0 62   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage._write   100% 11 0 0   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage._bump_rows   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage._trim   100% 8 0 3   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage.clear   100% 8 0 0   100% 2 0   100%
src/asgi_profiler/storage.py SQLiteStorage.close   90% 10 1 0   67% 6 2   81%
src/asgi_profiler/storage.py SQLiteStorage.__enter__   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.__exit__   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.count   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.get   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.list   100% 5 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.search   100% 10 0 0   100% 0 0   100%
src/asgi_profiler/storage.py SQLiteStorage.summarise   100% 22 0 0   100% 6 0   100%
src/asgi_profiler/storage.py SQLiteStorage.statements   100% 4 0 0   100% 0 0   100%
src/asgi_profiler/storage.py _lower   0% 1 1 0   100% 0 0   0%
src/asgi_profiler/storage.py _search_text   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/storage.py _row_values   100% 0 0 40   100% 0 0   100%
src/asgi_profiler/storage.py _where   100% 0 0 32   100% 0 0   100%
src/asgi_profiler/storage.py _row_to_profile   100% 8 0 0   100% 0 0   100%
src/asgi_profiler/storage.py _parse_datetime   100% 3 0 2   100% 0 0   100%
src/asgi_profiler/storage.py summarise   100% 18 0 0   100% 6 0   100%
src/asgi_profiler/storage.py aggregate_statements   100% 26 0 0   100% 10 0   100%
src/asgi_profiler/storage.py (no function)   100% 103 0 16   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.__init__   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.requests   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.summary   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.statements   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.clear   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.css   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.detail   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.page   100% 3 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _Urls.for_route   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py _same_origin   100% 8 0 0   100% 4 0   100%
src/asgi_profiler/viewer.py Guarded.__init__   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py Guarded.__call__   100% 9 0 0   83% 6 1   93%
src/asgi_profiler/viewer.py build_viewer   100% 19 0 0   100% 2 0   100%
src/asgi_profiler/viewer.py build_viewer.read   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.ctx   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer._page_for   100% 8 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.requests_page   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.summary_page   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.statements_page   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.detail_page   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/viewer.py build_viewer.clear   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/viewer.py build_viewer.stylesheet   100% 1 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.requests_json   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.detail_json   100% 4 0 0   100% 2 0   100%
src/asgi_profiler/viewer.py build_viewer.summary_json   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py build_viewer.statements_json   100% 2 0 0   100% 0 0   100%
src/asgi_profiler/viewer.py (no function)   100% 38 0 0   100% 0 0   100%
Total     97% 1425 46 256   89% 320 27   95%

No items found using the specified filter.