Accelerate your web app development | Build fast. Run fast.
This report presents the forensic synthetic code analysis of sanic-org/sanic, a Python project with 18,631 GitHub stars. SynthScan v2.0 examined 101,089 lines of code across 494 source files, recording 1229 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 13.3 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1229 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/webapp/display/page/docobject.py | 299 | def _define_heading_and_class( | CODE |
| LOW | guide/webapp/display/plugins/notification.py | 45 | def _render_admonition_content(self, _, text) -> str: | CODE |
| LOW | guide/webapp/display/search/search.py | 86 | def _inverse_document_frequency(docs: list[Document]) -> dict[str, float]: | CODE |
| LOW | guide/webapp/worker/livereload.js | 2173 | getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { | CODE |
| LOW | guide/webapp/worker/livereload.js | 3495 | value: function collectImportedStylesheets(link, styleSheet, result) { | CODE |
| LOW | guide/content/en/guide/basics/middleware.md | 145 | def convert_slug_to_underscore(request: Request): | CODE |
| LOW | guide/content/en/guide/basics/tasks.md | 11 | async def notify_server_started_after_five_seconds(): | CODE |
| LOW | guide/content/en/guide/how-to/cors.md | 73 | def _compile_routes_needing_options( | CODE |
| LOW | guide/content/en/plugins/sanic-testing/clients.md | 120 | def test_multiple_endpoints_on_same_server(app): | CODE |
| LOW | tests/test_redirect.py | 35 | async def redirect_with_header_injection(request): | CODE |
| LOW | tests/test_redirect.py | 54 | def test_redirect_headers_none(redirect_app): | CODE |
| LOW | tests/test_redirect.py | 75 | def test_get_then_redirect_follow_redirect(redirect_app): | CODE |
| LOW | tests/test_redirect.py | 99 | def test_redirect_with_header_injection(redirect_app): | CODE |
| LOW | tests/test_redirect.py | 120 | def test_redirect_with_params(app, test_str): | CODE |
| LOW | tests/test_handler.py | 6 | def test_handler_operation_order(app: Sanic): | CODE |
| LOW | tests/test_json_encoding.py | 60 | def test_change_encoder_to_some_custom(): | CODE |
| LOW | tests/test_test_client_port.py | 11 | def test_test_client_port_none(app): | CODE |
| LOW | tests/test_test_client_port.py | 25 | def test_test_client_port_default(app): | CODE |
| LOW | tests/test_utils.py | 19 | def test_load_module_from_file_location(location): | CODE |
| LOW | tests/test_utils.py | 25 | def test_loaded_module_from_file_location_name(): | CODE |
| LOW | tests/test_utils.py | 36 | def test_load_module_from_file_location_with_non_existing_env_variable(): | CODE |
| LOW | tests/test_utils.py | 44 | def test_load_module_from_file_location_using_env(): | CODE |
| LOW | tests/conftest.py | 82 | def generate_random_direct_route(self, max_route_depth=4): | CODE |
| LOW | tests/conftest.py | 115 | def generate_url_for_template(template): | CODE |
| LOW | tests/test_bad_request.py | 6 | def test_bad_request_response(app: Sanic): | CODE |
| LOW⚡ | tests/test_response.py | 251 | def test_chunked_streaming_adds_correct_headers(streaming_app): | CODE |
| LOW⚡ | tests/test_response.py | 260 | def test_chunked_streaming_returns_correct_content(streaming_app): | CODE |
| LOW⚡ | tests/test_response.py | 266 | async def test_chunked_streaming_returns_correct_content_asgi(streaming_app): | CODE |
| LOW⚡ | tests/test_response.py | 271 | def test_non_chunked_streaming_adds_correct_headers(non_chunked_streaming_app): | CODE |
| LOW⚡ | tests/test_response.py | 280 | async def test_non_chunked_streaming_adds_correct_headers_asgi( | CODE |
| LOW⚡ | tests/test_response.py | 289 | def test_non_chunked_streaming_returns_correct_content( | CODE |
| LOW⚡ | tests/test_response.py | 296 | def test_stream_response_with_cookies(app): | CODE |
| LOW | tests/test_response.py | 41 | def test_response_body_not_a_string(app): | CODE |
| LOW | tests/test_response.py | 117 | def test_response_content_length(app): | CODE |
| LOW | tests/test_response.py | 150 | def test_response_content_length_with_different_data_types(app): | CODE |
| LOW | tests/test_response.py | 152 | async def get_data_with_different_types(request: Request): | CODE |
| LOW | tests/test_response.py | 174 | async def no_content_unmodified_handler(request: Request): | CODE |
| LOW | tests/test_response.py | 239 | def non_chunked_streaming_app(app): | CODE |
| LOW | tests/test_response.py | 315 | def test_stream_response_without_cookies(app): | CODE |
| LOW | tests/test_response.py | 346 | def get_file_last_modified_timestamp( | CODE |
| LOW | tests/test_response.py | 383 | def test_file_response_custom_filename( | CODE |
| LOW | tests/test_response.py | 435 | def test_file_stream_response(app: Sanic, file_name, static_file_directory): | CODE |
| LOW | tests/test_response.py | 460 | def test_file_stream_response_custom_filename( | CODE |
| LOW | tests/test_response.py | 479 | def test_file_stream_head_response( | CODE |
| LOW | tests/test_response.py | 524 | def test_file_stream_response_range( | CODE |
| LOW | tests/test_response.py | 571 | def test_direct_response_stream(app: Sanic): | CODE |
| LOW | tests/test_response.py | 587 | async def test_direct_response_stream_asgi(app: Sanic): | CODE |
| LOW | tests/test_response.py | 701 | def test_send_response_after_eof_should_fail( | CODE |
| LOW | tests/test_response.py | 733 | async def test_send_response_after_eof_should_fail_asgi( | CODE |
| LOW | tests/test_response.py | 768 | def test_file_response_headers( | CODE |
| LOW | tests/test_response.py | 787 | def file_route_cache_default_last_modified( | CODE |
| LOW | tests/test_response.py | 906 | def test_file_validating_invalid_header( | CODE |
| LOW | tests/test_response.py | 993 | def test_stream_response_with_default_headers(app: Sanic): | CODE |
| LOW | tests/test_blueprint_copy.py | 83 | def test_bp_copy_without_route_overwriting(app: Sanic): | CODE |
| LOW | tests/test_blueprint_copy.py | 117 | def test_bp_copy_with_route_overwriting(app: Sanic): | CODE |
| LOW | tests/test_logging.py | 84 | def test_logging_pass_customer_logconfig(): | CODE |
| LOW | tests/test_logging.py | 129 | def test_logging_modified_root_logger_config(): | CODE |
| LOW | tests/test_logging.py | 140 | def test_access_log_client_ip_remote_addr(monkeypatch): | CODE |
| LOW | tests/test_logging.py | 169 | def test_access_log_client_ip_reqip(monkeypatch): | CODE |
| LOW | tests/test_logging.py | 289 | def test_log_extra_config_respected(): | CODE |
| 771 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sanic/signals.py | 161 | Get the handlers for a signal Args: event (str): The event to get the handlers for cond | STRING |
| HIGH | sanic/signals.py | 275 | Dispatch a signal to all handlers that match the event Args: event (str): The event to dispatch | STRING |
| HIGH | sanic/signals.py | 373 | Finalize the router and compile the routes Args: do_compile (bool, optional): Whether to compile th | STRING |
| HIGH | sanic/config.py | 113 | Convert an environment variable to a Python value. Args: full_key: The full environment variable na | STRING |
| HIGH | sanic/config.py | 225 | Update the config with new values. This method will update the config with the values from the provided | STRING |
| HIGH | sanic/blueprints.py | 811 | Set the Blueprint object at the specified index. Abstract method implemented to turn the `BlueprintGroup` class | STRING |
| HIGH | sanic/blueprints.py | 846 | Delete the Blueprint object at the specified index. Abstract method implemented to turn the `BlueprintGroup` cl | STRING |
| HIGH | sanic/blueprints.py | 888 | Decorate a function to handle exceptions for all blueprints in the group. In case of nested Blueprint Groups, t | STRING |
| HIGH | sanic/app.py | 678 | Dispatches an event to the signal router. Args: event (str): Name of the event to dispatch. | STRING |
| HIGH | sanic/app.py | 729 | Wait for a specific event to be triggered. This method waits for a named event to be triggered and can be used | STRING |
| HIGH | sanic/app.py | 943 | Build a URL based on a view name and the values provided. This method constructs URLs for a given view name, ta | STRING |
| HIGH | sanic/app.py | 2055 | Extend Sanic with additional functionality using Sanic Extensions. This method enables you to add one or more S | STRING |
| HIGH | sanic/app.py | 2114 | Register a Sanic instance with the class registry. This method adds a Sanic application instance to the class r | STRING |
| HIGH | sanic/app.py | 2144 | Unregister a Sanic instance from the class registry. This method removes a previously registered Sanic applicat | STRING |
| HIGH | sanic/app.py | 2173 | Retrieve an instantiated Sanic instance by name. This method is best used when needing to get access to an alre | STRING |
| HIGH | sanic/headers.py | 299 | Parse an Accept header and order the acceptable media types according to RFC 7231, s. 5.3.2 https://datatracker.iet | STRING |
| HIGH | sanic/router.py | 55 | Retrieve a `Route` object containing the details about how to handle a response for a given request :param requ | STRING |
| HIGH | sanic/views.py | 161 | Return view function for use with the routing system, that dispatches request to appropriate handler method. If | STRING |
| HIGH | sanic/response/convenience.py | 73 | Returns response object with body in text format. Args: body (str): Response data. status (int, opt | STRING |
| HIGH | sanic/response/types.py | 449 | Pops a key from the response's raw_body, ensuring that body is kept up to date. This can only be used if raw_bo | STRING |
| HIGH | sanic/mixins/startup.py | 179 | Run the HTTP Server and listen until keyboard interrupt or term signal. On termination, drain connections before closing | STRING |
| HIGH | sanic/mixins/startup.py | 310 | Prepares one or more Sanic applications to be served simultaneously. This low-level API is typically used when | STRING |
| HIGH | sanic/mixins/startup.py | 480 | Low level API for creating a Sanic Server instance. This method will create a Sanic Server instance, b | STRING |
| HIGH | sanic/mixins/startup.py | 958 | Serve one or more Sanic applications. This is the main entry point for running Sanic applications. It s | STRING |
| HIGH | sanic/mixins/static.py | 52 | Register a root to serve files from. The input can either be a file or a directory. This method provides an eas | STRING |
| HIGH | sanic/mixins/middleware.py | 111 | Register a middleware to be called before a request is handled. This is the same as *@app.middleware('request') | STRING |
| HIGH | sanic/mixins/middleware.py | 138 | Register a middleware to be called after a response is created. This is the same as *@app.middleware('response' | STRING |
| HIGH | sanic/mixins/routes.py | 57 | Decorate a function to be registered as a route. Args: uri (str): Path of the URL. meth | STRING |
| HIGH | sanic/mixins/routes.py | 228 | A helper method to register class-based view or functions as a handler to the application url routes. Args: | STRING |
| HIGH | sanic/server/runners.py | 62 | Start asynchronous HTTP Server on an individual process. :param host: Address to host on :param port: Port to h | STRING |
| HIGH | sanic/request/types.py | 560 | Load the request body as JSON Args: loads (Callable, optional): A custom JSON loader. Defaults to N | STRING |
| HIGH | sanic/request/types.py | 705 | Parse `query_string` using `urllib.parse.parse_qs`. This methods is used by the `args` property, but it also | STRING |
| HIGH | sanic/handlers/error.py | 148 | Provide a default behavior for the objects of ErrorHandler. If a developer chooses to extend the ErrorHandler, | STRING |
| HIGH | sanic/handlers/directory.py | 75 | Handle the request. Args: request (Request): The incoming request object. path (str): T | STRING |
| HIGH | sanic/cookies/response.py | 159 | Add a cookie to the CookieJar. Args: key (str): Key of the cookie. value (str): Value o | STRING |
| HIGH | sanic/cookies/response.py | 575 | Create a cookie key with the appropriate prefix. Cookies can have one ow two prefixes. The first is `__Host-` w | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/webapp/display/base.py | 1 | CODE | |
| LOW | guide/webapp/display/page/renderer.py | 1 | CODE | |
| LOW | guide/webapp/display/page/__init__.py | 1 | CODE | |
| LOW | guide/webapp/display/page/__init__.py | 2 | CODE | |
| LOW | guide/webapp/display/page/page.py | 1 | CODE | |
| LOW | guide/webapp/display/page/docobject.py | 1 | CODE | |
| LOW | guide/webapp/display/search/search.py | 1 | CODE | |
| LOW | guide/webapp/display/layouts/home.py | 1 | CODE | |
| LOW | guide/webapp/display/layouts/models.py | 1 | CODE | |
| LOW | guide/webapp/display/layouts/base.py | 1 | CODE | |
| LOW | tests/test_ext_integration.py | 9 | CODE | |
| LOW | sanic/signals.py | 1 | CODE | |
| LOW | sanic/config.py | 1 | CODE | |
| LOW | sanic/compat.py | 28 | CODE | |
| LOW | sanic/compat.py | 151 | CODE | |
| LOW | sanic/log.py | 1 | CODE | |
| LOW | sanic/log.py | 2 | CODE | |
| LOW | sanic/log.py | 3 | CODE | |
| LOW | sanic/log.py | 4 | CODE | |
| LOW | sanic/log.py | 5 | CODE | |
| LOW | sanic/log.py | 5 | CODE | |
| LOW | sanic/log.py | 5 | CODE | |
| LOW | sanic/log.py | 5 | CODE | |
| LOW | sanic/log.py | 5 | CODE | |
| LOW | sanic/blueprint_group.py | 1 | CODE | |
| LOW | sanic/asgi.py | 1 | CODE | |
| LOW | sanic/__init__.py | 5 | CODE | |
| LOW | sanic/__init__.py | 6 | CODE | |
| LOW | sanic/__init__.py | 7 | CODE | |
| LOW | sanic/__init__.py | 8 | CODE | |
| LOW | sanic/__init__.py | 9 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 10 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 27 | CODE | |
| LOW | sanic/__init__.py | 37 | CODE | |
| LOW | sanic/blueprints.py | 1 | CODE | |
| LOW | sanic/app.py | 1 | CODE | |
| LOW | sanic/headers.py | 1 | CODE | |
| LOW | sanic/router.py | 1 | CODE | |
| LOW | sanic/middleware.py | 1 | CODE | |
| LOW | sanic/views.py | 1 | CODE | |
| 96 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_logging.py | 261 | except Exception as e: | CODE |
| LOW | tests/test_errorpages.py | 97 | except Exception as e: | CODE |
| LOW | tests/test_errorpages.py | 351 | except Exception as e: | CODE |
| LOW | tests/test_exceptions_handler.py | 55 | except Exception as e: | CODE |
| LOW | tests/test_exceptions_handler.py | 177 | except Exception: | CODE |
| MEDIUM | tests/test_exceptions_handler.py | 52 | def handler_6(request, arg): | CODE |
| LOW | tests/test_request.py | 257 | except Exception as e: | CODE |
| MEDIUM | tests/test_request.py | 254 | def get(request): | CODE |
| LOW | tests/test_routes.py | 172 | except Exception: | CODE |
| LOW | tests/test_app.py | 217 | except Exception: | CODE |
| LOW | scripts/release.py | 84 | except Exception: | STRING |
| LOW | sanic/signals.py | 253 | except Exception as e: | CODE |
| LOW | sanic/asgi.py | 87 | except Exception as e: | CODE |
| LOW | sanic/asgi.py | 97 | except Exception as e: | CODE |
| LOW | sanic/asgi.py | 259 | except Exception as e: | CODE |
| LOW | sanic/asgi.py | 262 | except Exception as exc: | CODE |
| LOW | sanic/utils.py | 132 | except Exception as e: | CODE |
| MEDIUM | sanic/app.py | 1643 | def do(task): | CODE |
| LOW | sanic/app.py | 1212 | except Exception as e: | CODE |
| LOW | sanic/app.py | 1220 | except Exception as e: | CODE |
| LOW | sanic/app.py | 1429 | except Exception as e: | CODE |
| LOW | sanic/app.py | 1468 | except Exception as e: | CODE |
| LOW | sanic/app.py | 1657 | except Exception as e: | CODE |
| LOW | sanic/__main__.py | 5 | except Exception as exc: | CODE |
| LOW | sanic/__main__.py | 24 | except Exception as e: | CODE |
| MEDIUM | sanic/__main__.py | 19 | def main(args=None): | CODE |
| LOW | sanic/mixins/static.py | 356 | except Exception: | CODE |
| LOW | sanic/server/websockets/impl.py | 258 | except Exception as e: | CODE |
| LOW | sanic/server/websockets/impl.py | 325 | except Exception: | CODE |
| LOW | sanic/server/websockets/impl.py | 364 | except Exception: | CODE |
| LOW | sanic/server/protocols/base_protocol.py | 152 | except Exception: | CODE |
| LOW | sanic/server/protocols/http_protocol.py | 165 | except Exception: | CODE |
| LOW | sanic/server/protocols/http_protocol.py | 251 | except Exception: | CODE |
| LOW | sanic/server/protocols/http_protocol.py | 305 | except Exception: | CODE |
| LOW | sanic/server/protocols/http_protocol.py | 323 | except Exception: | CODE |
| LOW | sanic/server/protocols/websocket_protocol.py | 135 | except Exception: | CODE |
| LOW | sanic/http/http3.py | 126 | except Exception as e: # no cov | CODE |
| LOW | sanic/http/http3.py | 311 | except Exception as e: | CODE |
| LOW | sanic/http/http1.py | 147 | except Exception as e: | CODE |
| LOW | sanic/http/http1.py | 235 | except Exception: | CODE |
| LOW | sanic/http/http1.py | 289 | except Exception: | CODE |
| LOW | sanic/http/http1.py | 442 | except Exception as e: | CODE |
| LOW | sanic/http/http1.py | 531 | except Exception: | CODE |
| LOW | sanic/http/tls/creators.py | 195 | except Exception as e: | CODE |
| MEDIUM | sanic/http/tls/creators.py | 187 | def check_supported(self) -> None: | CODE |
| LOW | sanic/request/types.py | 409 | except Exception: | CODE |
| LOW | sanic/request/types.py | 576 | except Exception: | CODE |
| LOW | sanic/request/types.py | 669 | except Exception: | CODE |
| LOW | sanic/worker/serve.py | 140 | except Exception as e: | CODE |
| LOW | sanic/worker/manager.py | 544 | except Exception: | CODE |
| LOW | sanic/pages/error.py | 108 | except Exception: | CODE |
| LOW | sanic/handlers/error.py | 131 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/webapp/display/page/page.py | 69 | CODE | |
| LOW | guide/webapp/display/plugins/hook.py | 13 | CODE | |
| LOW | guide/webapp/display/layouts/main.py | 14 | CODE | |
| LOW | tests/test_daemon.py | 653 | CODE | |
| LOW | tests/test_daemon.py | 681 | CODE | |
| LOW | tests/test_daemon.py | 784 | CODE | |
| LOW | tests/test_daemon.py | 808 | CODE | |
| LOW | tests/test_daemon.py | 835 | CODE | |
| LOW | tests/test_daemon.py | 857 | CODE | |
| LOW | tests/test_daemon.py | 918 | CODE | |
| LOW | tests/test_config.py | 321 | CODE | |
| LOW | tests/typing/test_typing.py | 96 | CODE | |
| LOW | sanic/signals.py | 205 | CODE | |
| LOW | sanic/config.py | 325 | CODE | |
| LOW | sanic/asgi.py | 81 | CODE | |
| LOW | sanic/utils.py | 54 | CODE | |
| LOW | sanic/app.py | 849 | CODE | |
| LOW | sanic/app.py | 942 | CODE | |
| LOW | sanic/app.py | 1136 | CODE | |
| LOW | sanic/app.py | 1277 | CODE | |
| LOW | sanic/app.py | 2461 | CODE | |
| LOW | sanic/headers.py | 444 | CODE | |
| LOW | sanic/errorpages.py | 342 | CODE | |
| LOW | sanic/mixins/startup.py | 606 | CODE | |
| LOW | sanic/mixins/startup.py | 951 | CODE | |
| LOW | sanic/mixins/startup.py | 1318 | CODE | |
| LOW | sanic/mixins/static.py | 185 | CODE | |
| LOW | sanic/mixins/static.py | 264 | CODE | |
| LOW | sanic/mixins/routes.py | 213 | CODE | |
| LOW | sanic/server/socket.py | 81 | CODE | |
| LOW | sanic/server/websockets/impl.py | 181 | CODE | |
| LOW | sanic/server/websockets/impl.py | 216 | CODE | |
| LOW | sanic/server/websockets/impl.py | 285 | CODE | |
| LOW | sanic/server/websockets/impl.py | 379 | CODE | |
| LOW | sanic/server/websockets/impl.py | 568 | CODE | |
| LOW | sanic/server/websockets/impl.py | 675 | CODE | |
| LOW | sanic/server/protocols/http_protocol.py | 208 | CODE | |
| LOW | sanic/cli/console.py | 279 | CODE | |
| LOW | sanic/cli/app.py | 182 | CODE | |
| LOW | sanic/cli/app.py | 275 | CODE | |
| LOW | sanic/http/http1.py | 178 | CODE | |
| LOW | sanic/http/http1.py | 297 | CODE | |
| LOW | sanic/request/types.py | 499 | CODE | |
| LOW | sanic/request/form.py | 32 | CODE | |
| LOW | sanic/worker/reloader.py | 34 | CODE | |
| LOW | sanic/worker/reloader.py | 85 | CODE | |
| LOW | sanic/worker/serve.py | 26 | CODE | |
| LOW | sanic/worker/loader.py | 69 | CODE | |
| LOW | sanic/worker/manager.py | 285 | CODE | |
| LOW | sanic/worker/manager.py | 375 | CODE | |
| LOW | sanic/worker/manager.py | 466 | CODE | |
| LOW | sanic/pages/error.py | 56 | CODE | |
| LOW | sanic/pages/error.py | 98 | CODE | |
| LOW | sanic/pages/base.py | 47 | CODE | |
| LOW | sanic/logging/formatter.py | 137 | CODE | |
| LOW | sanic/cookies/response.py | 452 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_unix_socket.py | 201 | app_multi.run(host="myhost.invalid", unix=SOCKPATH, workers=2) | COMMENT |
| LOW | tests/test_unix_socket.py | 221 | # assert r.status_code == 200, r.text | COMMENT |
| LOW | tests/test_unix_socket.py | 241 | # while not os.path.exists(SOCKPATH): | COMMENT |
| LOW | tests/test_unix_socket.py | 261 | # processes[-1].send_signal(SIGINT) | COMMENT |
| LOW | tests/test_reloader.py | 1 | # 2024-12-22 AMH - Reloader tests have not been working for a while. | COMMENT |
| LOW | tests/test_reloader.py | 21 | COMMENT | |
| LOW | tests/test_reloader.py | 41 | # text = secrets.token_urlsafe() | COMMENT |
| LOW | tests/test_reloader.py | 61 | # ) | COMMENT |
| LOW | tests/test_reloader.py | 81 | # print("reload_start", os.getpid(), {start_text!r}) | COMMENT |
| LOW | tests/test_reloader.py | 101 | # from sanic import Sanic | COMMENT |
| LOW | tests/test_reloader.py | 121 | COMMENT | |
| LOW | tests/test_reloader.py | 141 | # "-m", | COMMENT |
| LOW | tests/test_reloader.py | 161 | # with TemporaryDirectory() as tmpdir: | COMMENT |
| LOW | tests/test_reloader.py | 181 | # proc.wait(timeout=3) | COMMENT |
| LOW | tests/test_reloader.py | 201 | # if mode == "sanic": | COMMENT |
| LOW | tests/test_reloader.py | 221 | COMMENT | |
| LOW | tests/test_reloader.py | 241 | # assert stop_text in next(line) | COMMENT |
| LOW | tests/test_tls.py | 661 | # ): | COMMENT |
| LOW | tests/test_multi_serve.py | 1 | # import logging | COMMENT |
| LOW | tests/test_multi_serve.py | 21 | # def app_one(): | COMMENT |
| LOW | tests/test_multi_serve.py | 41 | COMMENT | |
| LOW | tests/test_multi_serve.py | 61 | # "Goin' Fast @ http://127.0.0.1:23457", | COMMENT |
| LOW | tests/test_multi_serve.py | 81 | COMMENT | |
| LOW | tests/test_multi_serve.py | 101 | # after_stop.assert_awaited_once() | COMMENT |
| LOW | tests/test_multi_serve.py | 121 | # app_one.signal(event)(AsyncMock()) | COMMENT |
| LOW | tests/test_multi_serve.py | 141 | # app_two.main_process_stop(AsyncMock()) | COMMENT |
| LOW | tests/test_multi_serve.py | 161 | # message = "Did not find any applications." | COMMENT |
| LOW | tests/test_multi_serve.py | 181 | COMMENT | |
| LOW | tests/test_multi_serve.py | 201 | # app_two.prepare(port=23457) | COMMENT |
| LOW | tests/performance/sanic/varied_server.py | 61 | app.run(host="0.0.0.0", port=sys.argv[1]) | COMMENT |
| LOW | tests/performance/sanic/varied_server.py | 81 | COMMENT | |
| LOW | tests/performance/sanic/varied_server.py | 101 | # host='127.0.0.1', port=6379 | COMMENT |
| LOW | docs/conf.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | docs/conf.py | 41 | # General information about the project. | COMMENT |
| LOW | docs/conf.py | 61 | language = "en" | COMMENT |
| LOW | docs/conf.py | 81 | html_theme = "sphinx_rtd_theme" | COMMENT |
| LOW | sanic/server/protocols/base_protocol.py | 101 | # Check write-buffer data left _after_ close is called. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_cookies.py | 105 | CODE | |
| LOW | tests/typing/test_typing.py | 26 | CODE | |
| LOW | sanic/app.py | 228 | CODE | |
| LOW | sanic/app.py | 249 | CODE | |
| LOW | sanic/app.py | 270 | CODE | |
| LOW | sanic/app.py | 291 | CODE | |
| LOW | sanic/app.py | 311 | CODE | |
| LOW | sanic/app.py | 1130 | CODE | |
| LOW | sanic/router.py | 78 | CODE | |
| LOW | sanic/views.py | 117 | CODE | |
| LOW | sanic/response/convenience.py | 206 | CODE | |
| LOW | sanic/response/types.py | 124 | CODE | |
| LOW | sanic/mixins/startup.py | 152 | CODE | |
| LOW | sanic/mixins/startup.py | 282 | CODE | |
| LOW | sanic/mixins/startup.py | 464 | CODE | |
| LOW | sanic/mixins/startup.py | 630 | CODE | |
| LOW | sanic/mixins/static.py | 32 | CODE | |
| LOW | sanic/mixins/routes.py | 38 | CODE | |
| LOW | sanic/mixins/routes.py | 213 | CODE | |
| LOW | sanic/mixins/routes.py | 671 | CODE | |
| LOW | sanic/server/runners.py | 42 | CODE | |
| LOW | sanic/worker/serve.py | 26 | CODE | |
| LOW | sanic/cookies/response.py | 142 | CODE | |
| LOW | sanic/cookies/response.py | 386 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_errorpages.py | 170 | CODE | |
| MEDIUM | tests/test_errorpages.py | 175 | CODE | |
| MEDIUM | tests/test_errorpages.py | 180 | CODE | |
| MEDIUM | tests/test_errorpages.py | 196 | CODE | |
| MEDIUM | tests/test_errorpages.py | 201 | CODE | |
| MEDIUM | tests/test_errorpages.py | 216 | CODE | |
| MEDIUM | tests/test_errorpages.py | 221 | CODE | |
| MEDIUM | tests/test_errorpages.py | 279 | CODE | |
| MEDIUM | tests/test_ws_handlers.py | 61 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/webapp/display/page/__init__.py | 5 | __all__ = ["Page", "PageRenderer"] | CODE |
| LOW | sanic/blueprint_group.py | 4 | __all__ = ["BlueprintGroup"] # noqa: F405 | CODE |
| LOW | sanic/app.py | 1955 | def update_config(self, config: bytes | str | dict | Any) -> None: | CODE |
| LOW | sanic/app.py | 2414 | def set_serving(self, serving: bool) -> None: | CODE |
| LOW | sanic/mixins/startup.py | 917 | def _set_startup_method(cls) -> None: | CODE |
| LOW | sanic/application/state.py | 80 | def set_verbosity(self, value: int) -> None: | CODE |
| LOW | sanic/worker/multiplexer.py | 86 | def set_serving(self, serving: bool) -> None: | CODE |
| LOW | sanic/worker/daemon.py | 495 | def _setup_signal_handlers(self) -> None: | CODE |
| LOW | sanic/logging/formatter.py | 74 | def _set_levelname(self, record: logging.LogRecord) -> None: | CODE |
| LOW | sanic/logging/formatter.py | 132 | def _set_levelname(self, record: logging.LogRecord) -> None: | CODE |
| LOW | sanic/logging/formatter.py | 231 | def _set_levelname(self, record: logging.LogRecord) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/override_logging.py | 13 | # Set logger to override default basicConfig | COMMENT |
| LOW | sanic/headers.py | 399 | # Check if we would return on next round, to avoid useless parse | COMMENT |
| LOW | sanic/mixins/static.py | 295 | # Check if the client has been sent this file before | COMMENT |
| LOW | sanic/mixins/static.py | 405 | # Check if it's a symlink and determine its type | COMMENT |
| LOW | sanic/server/protocols/base_protocol.py | 93 | # Check if write is already paused _before_ close() is called. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/conf.py | 7 | # This file is execfile()d with the current directory set to its | COMMENT |
| MEDIUM | sanic/blueprints.py | 612 | """This class provides a mechanism to implement a Blueprint Group. | STRING |
| MEDIUM | sanic/server/socket.py | 101 | # Create a listening socket or use the one in settings | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | guide/content/en/plugins/sanic-ext/injection.md | 237 | This works very similar to the [last example](#objects-from-the-request) where the goal is the extract something fro | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | guide/content/en/plugins/sanic-ext/injection.md | 237 | This works very similar to the [last example](#objects-from-the-request) where the goal is the extract something fro | CODE |
| MEDIUM | guide/content/en/plugins/sanic-ext/injection.md | 298 | Be carefule when using a [generic type](https://docs.python.org/3/library/typing.html#typing.Generic). The way that Sani | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_blueprint_copy.py | 15 | def handle_request(request): | CODE |
| LOW | examples/redirect_example.py | 8 | def handle_request(request): | CODE |
| LOW | examples/modify_header_example.py | 12 | def handle_request(request): | CODE |
| LOW | sanic/app.py | 1277 | async def handle_request(self, request: Request) -> None: # no cov | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/webapp/worker/livereload.js | 325 | // #match works fine because it just return the exec results, even if it has | COMMENT |
| LOW | examples/exception_monitoring.py | 33 | # For this we can just call the super class' default handler | COMMENT |