Sample

pyint-6a217d9b1744-SRC

Unmodified source class

Lines115

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.490–1; higher is more readable
Mi0.4030–1; higher is more readable
LLOC49Logical lines; fewer is more readable
DeepSeek V4 Pro18.330–20; mean of three runs
GPT-6.1 Sol180–20; mean of three runs
BTTF0.4860–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.115+46
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.506−6.759

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

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.116−3.071
Indentation frequencyHow rapidly indentation changes from line to line.74+1.822
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.74−1.277
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.114.898+1.196
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.031+0.639
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.86.871+0.597
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.86.974−0.019

Intercept 0.07 + feature contributions = -0.042 (log-odds).
Score = sigmoid(-0.042) = 0.49.

Score0.403
Score49
Run 1

The code is well-structured and readable. The class has a clear purpose and logical organization, with methods separated by distinct responsibilities (request processing, URL redirect logic, response handling). Nesting is generally shallow, though process_request contains a slightly deeper conditional within the PREPEND_WWW check. Intent is clearly expressed through descriptive method names and informative docstrings. The code is concise without being terse, and each line primarily performs a single action. Reading flow is natural, following Django middleware conventions. Minor deductions: the docstring contains excessive line breaks in the section headers, and some conditional logic could be extracted for additional clarity, but overall this is professional-quality, maintainable code.

Run 2

The code demonstrates exceptional readability. It is logically organized into a well-documented class with clear, single-responsibility methods. The nesting is shallow, with conditionals kept to a maximum of two levels, contributing to a flat structure. Each method has a clear purpose, accurately described by docstrings and comments that explain the intent without stating the obvious. The code is concise; comments add valuable context about non-obvious decisions (e.g., performance concerns) rather than repeating code. Most lines execute a single action, maintaining good action granularity. The reading flow is natural: from request processing, to helper methods, to response processing, following the middleware lifecycle. Meaningful variable names like user_agent_regex and should_redirect_with_slash further enhance clarity.

Run 3

The code is highly readable with clear structure and intent. Each method has a single responsibility and well-written docstrings explaining its purpose. Nesting is minimal, with guard clauses and early returns improving flow. Action granularity is appropriate: most lines perform one logical operation, and variable names are descriptive. The reading flow follows a natural progression from request processing to response handling. Minor deductions: the docstring in CommonMiddleware is somewhat lengthy and includes implementation details that might become stale, and the conditional logic in process_request could arguably be split further for even flatter structure. The string formatting in the RuntimeError message is slightly verbose but still clear. Overall, this is exemplary Django middleware code that balances conciseness with clarity.

Run 1

Code Structure: Well-organized middleware with separate methods for request processing, redirect eligibility, path construction, and response processing. Nesting: Generally shallow, although user-agent checks and slash eligibility reach three nested levels and could benefit from guard clauses. Clarity of intent: Descriptive names, focused docstrings, and explanatory comments make behavior clear; unused imports add minor noise. Code length: Appropriately concise for the functionality, though some comments repeat the code and the class docstring is lengthy. Action granularity: Statements generally perform one action per line; multiline conditions and error-message construction remain readable. Reading flow: Methods follow a natural request-to-response sequence, with helper methods placed logically and consistent formatting throughout. Minor nesting and documentation verbosity prevent a perfect score.

Run 2

Code Structure: Well organized into focused middleware hooks and helper methods, with related responsibilities grouped logically. Nesting: Generally shallow, although user-agent checks and slash validation reach three conditional or loop levels and could benefit from guard clauses. Clarity of intent: Descriptive method names, docstrings, and comments clearly explain behavior and important redirect constraints. Code length: Mostly proportionate to the functionality; lengthy documentation and error text are useful, though some comments repeat obvious operations and several imports are unused. Action granularity: Statements generally perform one action per line, with readable multiline formatting for complex expressions. Reading flow: Request handling, redirect decisions, path construction, and response processing follow a natural sequence. Minor distractions include mixed string-formatting styles and redundant comments, but the code remains highly readable.

Run 3

Code Structure: Well-organized middleware with distinct methods for request checks, slash decisions, path construction, and response handling. Nesting: Mostly shallow, though user-agent filtering and slash validation reach three conditional/loop levels. Clarity of intent: Descriptive names, docstrings, and explanatory comments make behavior and redirect constraints clear. Code length: Generally proportionate to functionality; lengthy documentation and error messages are useful, but several unused imports add clutter. Action granularity: Statements generally perform one action per line, with multiline expressions formatted cleanly. Reading flow: Methods follow a natural request-to-response progression, and helper extraction keeps the main logic easy to follow. Minor drawbacks include inconsistent string formatting styles and opportunities to flatten conditional logic with early returns.