Sample

pyint-7034e73c7c32-I10

Deterministically remove some optional blank lines and bracketed line breaks

Matched original source

Lines104

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.1660–1; higher is more readable
Mi0.290–1; higher is more readable
LLOC49Logical lines; fewer is more readable
DeepSeek V4 Pro150–20; mean of three runs
GPT-6.1 Sol160–20; mean of three runs
BTTF0.4120–1; higher is more readable

Views

Source code

import re from urllib.parse import urlsplit from django.conf import settings from django.core.exceptions import PermissionDenied from django.core.mail import MailerDoesNotExist, mail_managers, mailers from django.http import HttpResponsePermanentRedirect from django.middleware import MiddlewareMixin from django.urls import is_valid_path from django.utils.http import escape_leading_slashes class CommonMiddleware(MiddlewareMixin): """ "Common" middleware for taking care of some basic operations: - Forbid access to User-Agents in settings.DISALLOWED_USER_AGENTS - URL rewriting: Based on the APPEND_SLASH and PREPEND_WWW settings, append missing slashes and/or prepends missing "www."s. - If APPEND_SLASH is set and the initial URL doesn't end with a slash, and it is not found in urlpatterns, form a new URL by appending a slash at the end. If this new URL is found in urlpatterns, return an HTTP redirect to this new URL; otherwise process the initial URL as usual. This behavior can be customized by subclassing CommonMiddleware and overriding the response_redirect_class attribute. """ response_redirect_class = HttpResponsePermanentRedirect def process_request(self, request): """ Check for denied User-Agents and rewrite the URL based on settings.APPEND_SLASH and settings.PREPEND_WWW """ # Check for denied User-Agents user_agent = request.META.get("HTTP_USER_AGENT") if user_agent is not None: for user_agent_regex in settings.DISALLOWED_USER_AGENTS: if user_agent_regex.search(user_agent): raise PermissionDenied("Forbidden user agent") # Check for a redirect based on settings.PREPEND_WWW host = request.get_host() if settings.PREPEND_WWW and host and not host.startswith("www."): # Check if we also need to append a slash so we can do it all # with a single redirect. (This check may be somewhat expensive, # so we only do it if we already know we're sending a redirect, # or in process_response if we get a 404.) if self.should_redirect_with_slash(request): path = self.get_full_path_with_slash(request) else: path = request.get_full_path() return self.response_redirect_class(f"{request.scheme}://www.{host}{path}") def should_redirect_with_slash(self, request): """ Return True if settings.APPEND_SLASH is True and appending a slash to the request path turns an invalid path into a valid one. """ if settings.APPEND_SLASH and not request.path_info.endswith("/"): urlconf = getattr(request, "urlconf", None) if not is_valid_path(request.path_info, urlconf): match = is_valid_path("%s/" % request.path_info, urlconf) if match: view = match.func return getattr(view, "should_append_slash", True) return False def get_full_path_with_slash(self, request): """ Return the full path of the request with a trailing slash appended. Raise a RuntimeError if settings.DEBUG is True and request.method is DELETE, POST, PUT, or PATCH. """ new_path = request.get_full_path(force_append_slash=True) # Prevent construction of scheme relative urls. new_path = escape_leading_slashes(new_path) if settings.DEBUG and request.method in ("DELETE", "POST", "PUT", "PATCH"): raise RuntimeError( "You called this URL via %(method)s, but the URL doesn't end " "in a slash and you have APPEND_SLASH set. Django can't " "redirect to the slash URL while maintaining %(method)s data. " "Change your form to point to %(url)s (note the trailing " "slash), or set APPEND_SLASH=False in your Django settings." % { "method": request.method, "url": request.get_host() + new_path, } ) return new_path def process_response(self, request, response): """ When the status code of the response is 404, it may redirect to a path with an appended slash if should_redirect_with_slash() returns True. """ # If the given URL is "Not Found", then check if we should redirect to # a path with a slash appended. if response.status_code == 404 and self.should_redirect_with_slash(request): response = self.response_redirect_class( self.get_full_path_with_slash(request) ) # Add the Content-Length header to non-streaming responses if not # already set. if not response.streaming and not response.has_header("Content-Length"): response.headers["Content-Length"] = str(len(response.content)) return response

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(log-odds)
Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones.2677.348−88.352
Source linesThe number of non-empty source lines.104+41.6
Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value.4.502−6.753

Intercept 8.87 + feature contributions = -44.636 (log-odds).
Score = sigmoid(-44.636) = 0.

Feature contributions

FeatureValueContribution
(log-odds)
Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names.151.99−2.773
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.105−2.681
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.151.99+1.648
Indentation frequencyHow rapidly indentation changes from line to line.65+1.511
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.65−1.071
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.103.869+1.042
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.031+0.639

Intercept 0.07 + feature contributions = -1.614 (log-odds).
Score = sigmoid(-1.614) = 0.166.

Score0.29
Score49
Run 1

The code is generally well-structured and follows Django middleware conventions, with clear docstrings explaining purpose. It scores 15/20 due to relatively flat nesting and logical organization. However, readability is reduced by a few issues: the long string in get_full_path_with_slash has awkward line breaks and concatenation, making it hard to read; several lines contain multiple actions (e.g., nested conditionals with return statements); and the process_request method mixes concerns (User-Agent check and URL rewriting) without clear separation. The overall reading flow is adequate, and action granularity is mostly reasonable, but the string formatting and dense conditionals prevent a higher score.

Run 2

The code is generally readable with clear docstrings and logical organization. However, it loses points due to several issues: inconsistent spacing between classes and methods, some overly long lines with awkward string concatenation in get_full_path_with_slash(), and multiple actions packed into single lines (e.g., the redirect construction in process_request). The nesting depth is acceptable but could be improved in should_redirect_with_slash(). The docstrings are helpful for clarity, but the broken string literals with poor formatting reduce readability. Import statements are clean and well-organized. The code would benefit from consistent blank lines between methods and more careful line wrapping.

Run 3

The code is generally well-structured with clear docstrings and comments explaining purpose. Class organization follows logical middleware flow. However, readability is impacted by several long strings with awkward line continuations (e.g., RuntimeError message), scattered indentation, and inconsistent blank lines between methods. Nesting is mostly flat except for minor nested conditionals. Action granularity is acceptable but not always one action per line. Overall intent is clear, but formatting issues reduce polish.

Run 1

Code Structure: Responsibilities are logically separated into request processing, slash validation, path construction, and response processing. Nesting: Most code is shallow, but user-agent checks and slash validation reach three nested levels. Clarity of intent: Descriptive method names, docstrings, and comments clearly explain behavior and redirect constraints. Code length: Methods are reasonably concise, though extensive documentation and unused imports add some clutter. Action granularity: Statements generally perform one action per line; awkwardly combined string literals and dictionary formatting in the RuntimeError message reduce readability. Reading flow: Methods follow a natural request-to-response sequence, with useful helper extraction. However, missing blank lines around some class members and inconsistent spacing interrupt the flow. Overall, readable and well organized, with modest nesting and formatting issues.

Run 2

Code Structure: Methods separate request checks, slash validation, path construction, and response handling logically; unused imports and inconsistent spacing slightly weaken organization. Nesting: Generally manageable, though user-agent checks and slash validation reach three nested levels. Clarity of intent: Descriptive method names, docstrings, and explanatory comments make behavior clear. Code length: Implementation is reasonably concise, but documentation is somewhat verbose and some comments repeat obvious operations. Action granularity: Most lines perform one action; crowded string literals and a poorly formatted dictionary in the RuntimeError construction reduce readability. Reading flow: The request-to-helper-to-response progression is natural, but missing blank lines between some methods and irregular formatting interrupt scanning.

Run 3

Code Structure: Well organized into focused middleware hooks and helper methods, though unused imports and inconsistent spacing add clutter. Nesting: Moderate, with three nested conditional levels in redirect validation and user-agent checks; still manageable. Clarity of intent: Descriptive method names, docstrings, and comments clearly explain URL rewriting, access restrictions, and response handling. Code length: Reasonably concise for its responsibilities, although some comments repeat the code and the main docstring is lengthy. Action granularity: Most lines perform one action; awkwardly joined string literals and a compressed dictionary closing brace reduce visual clarity. Reading flow: Request processing, redirect helpers, and response processing follow a logical sequence, but missing blank lines between some definitions and malformed-looking error-message formatting interrupt readability.