Skip to content

Commit 453300b

Browse files
authored
fix: apply ruff auto-fixes, enforce import ordering, fix logging (#1197)
Safe auto-fixes applied by `ruff check --fix`: - I001: sort imports with custom section ordering - F401: remove unused imports - UP032: convert .format() to f-strings (non-logging calls only) - W605: fix invalid escape sequences - RET502/505/506: remove superfluous else after return/raise - SIM114/117: combine if branches, merge with statements - RUF010: fix f-string type conversion - G010: logging.warn → logging.warning Manual fixes: - G004: convert f-strings in 27 logging calls to %-style for lazy evaluation New rules added: - G (flake8-logging-format): enforce %-style in logging calls Import ordering: stdlib → third-party → pulpcore → content plugins (pulp_rpm, pulp_npm, etc.) → pulp_service Assisted-by: Claude Code <noreply@anthropic.com>
1 parent be30db6 commit 453300b

27 files changed

Lines changed: 170 additions & 187 deletions

pulp_service/pulp_service/app/admin.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
from django.contrib.auth.admin import UserAdmin, GroupAdmin
1+
import re
2+
3+
from django import forms
4+
from django.contrib import admin
5+
from django.contrib.auth.admin import GroupAdmin, UserAdmin
26
from django.contrib.auth.forms import AuthenticationForm, UserChangeForm, UserCreationForm
37
from django.contrib.auth.models import User
4-
from django.contrib import admin
5-
from django.db.models import Q
68
from django.core.exceptions import ValidationError
9+
from django.core.validators import RegexValidator
10+
from django.db.models import Q
711
from django.urls import reverse
812
from django.utils.html import format_html
9-
10-
from django import forms
11-
from django.core.validators import RegexValidator
12-
1313
from hijack.contrib.admin import HijackUserAdminMixin
1414

15-
from .models import DomainOrg
16-
import re
17-
18-
from pulpcore.plugin.models import Domain, Group
1915
from pulpcore.app.models import Task
16+
from pulpcore.plugin.models import Domain, Group
17+
2018
from pulp_service.app.constants import CONTENT_SOURCES_LABEL_NAME
2119

20+
from .models import DomainOrg
21+
2222
USERNAME_PATTERN = r"^[\w.@+=/\-|]+$"
2323
USERNAME_ERROR_MSG = "Username can only contain letters, numbers, and these special characters: @, ., +, -, =, /, _, |"
2424
USERNAME_HELP_TEXT = (

pulp_service/pulp_service/app/authentication.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
import jq
2-
import json
31
import logging
42

5-
from base64 import b64decode
6-
from binascii import Error as Base64DecodeError
73
from django.contrib.auth import get_user_model
8-
from gettext import gettext as _
9-
from pulpcore.app.authentication import JSONHeaderRemoteAuthentication
10-
from rest_framework.exceptions import AuthenticationFailed
114

5+
from pulpcore.app.authentication import JSONHeaderRemoteAuthentication
126

137
_logger = logging.getLogger(__name__)
148

@@ -24,7 +18,7 @@ def authenticate_header(self, request):
2418
class RHTermsBasedRegistryAuthentication(JSONHeaderRemoteAuthentication):
2519
header = "HTTP_X_RH_IDENTITY"
2620
# Combines org_id with username - falls back to "|username" if org_id is missing
27-
jq_filter = '.identity | if .user.username then "\(.org_id // "")|\(.user.username)" else null end'
21+
jq_filter = r'.identity | if .user.username then "\(.org_id // "")|\(.user.username)" else null end'
2822

2923
def authenticate_header(self, request):
3024
return "Bearer"
@@ -47,7 +41,7 @@ class TurnpikeTermsBasedRegistryAuthentication(JSONHeaderRemoteAuthentication):
4741
header = "HTTP_X_RH_IDENTITY"
4842
jq_filter = (
4943
'if .identity.auth_type == "registry-auth" and .identity.registry.username '
50-
'then "\(.identity.registry.org_id // "")|\(.identity.registry.username)" '
44+
r'then "\(.identity.registry.org_id // "")|\(.identity.registry.username)" '
5145
"else null end"
5246
)
5347

@@ -73,5 +67,5 @@ def get_user(self, user_id):
7367
try:
7468
return User.objects.get(pk=user_id)
7569
except User.DoesNotExist:
76-
_logger.warning(f"User with id {user_id} not found in get_user()")
70+
_logger.warning("User with id %s not found in get_user()", user_id)
7771
return None

pulp_service/pulp_service/app/authorization.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
from contextvars import ContextVar
1+
import json
2+
import logging
23
from base64 import b64decode
34
from binascii import Error as Base64DecodeError
4-
from django.db.models import Q
5-
5+
from contextvars import ContextVar
66

7-
import json
87
import jq
9-
from pulpcore.plugin.models import Domain
8+
from django.db.models import Q
9+
from rest_framework.permissions import SAFE_METHODS, BasePermission
10+
1011
from pulpcore.plugin.util import extract_pk, get_domain_pk
11-
from pulp_service.app.models import DomainOrg
12-
from rest_framework.permissions import BasePermission, SAFE_METHODS
13-
import logging
1412

13+
from pulp_service.app.models import DomainOrg
1514

1615
_logger = logging.getLogger(__name__)
1716
org_id_var = ContextVar("org_id")
@@ -73,13 +72,9 @@ def has_permission(self, request, view):
7372
user_id_var.set(request.user.pk)
7473
return True
7574
# Anyone can list domains
76-
elif action == "domain_list":
75+
if action == "domain_list":
7776
return True
78-
elif action == "domain_update":
79-
# The PK is part of the URL
80-
domain_pk = extract_pk(request.META["PATH_INFO"])
81-
return self._has_domain_access(domain_pk, org_id, user)
82-
elif action == "domain_delete":
77+
if action == "domain_update" or action == "domain_delete":
8378
# The PK is part of the URL
8479
domain_pk = extract_pk(request.META["PATH_INFO"])
8580
return self._has_domain_access(domain_pk, org_id, user)
@@ -116,15 +111,15 @@ def get_decoded_identity_header(self, request):
116111
header_decoded_content = b64decode(header_content)
117112
return header_decoded_content
118113
except Base64DecodeError:
119-
return
114+
return None
120115

121116
def get_org_id(self, decoded_header_content):
122117
if decoded_header_content:
123118
try:
124119
header_value = json.loads(decoded_header_content)
125120
return org_id_json_path.input_value(header_value).first()
126121
except json.JSONDecodeError:
127-
return
122+
return None
128123

129124

130125
class AllowUnauthPull(BasePermission):

pulp_service/pulp_service/app/content.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import ipaddress
22
import json
3-
from aiohttp import web
43
from base64 import b64decode
4+
5+
from aiohttp import web
56
from frozenlist import FrozenList
6-
from multidict import CIMultiDictProxy
77

88
from pulpcore.plugin.content import app
99

pulp_service/pulp_service/app/middleware.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,19 @@
33
import logging
44
import marshal
55
import tempfile
6-
76
from contextlib import suppress
87
from contextvars import ContextVar
9-
from os import getenv
108

119
from django.contrib.auth import login
1210
from django.db import IntegrityError
1311
from django.utils.deprecation import MiddlewareMixin
1412

15-
16-
from pulpcore.metrics import init_otel_meter
1713
from pulpcore.app.util import get_worker_name
18-
from pulpcore.plugin.models import Artifact, Repository
19-
from pulpcore.plugin.util import extract_pk, get_artifact_url, resolve_prn
20-
from pulp_service.app.authentication import RHSamlAuthentication
14+
from pulpcore.metrics import init_otel_meter
15+
from pulpcore.plugin.models import Artifact
16+
from pulpcore.plugin.util import get_artifact_url
2117

18+
from pulp_service.app.authentication import RHSamlAuthentication
2219

2320
_logger = logging.getLogger(__name__)
2421
repository_name_var = ContextVar("repository_name")
@@ -66,7 +63,7 @@ def process_view(self, request, callback, callback_args, callback_kwargs):
6663
except Exception:
6764
# we want the process_exception middleware to fire
6865
# https://code.djangoproject.com/ticket/12250
69-
return
66+
return None
7067

7168
def process_response(self, request, response):
7269
if hasattr(request, self.PROFILER_REQUEST_ATTR_NAME):
@@ -81,7 +78,7 @@ def process_response(self, request, response):
8178
artifact = Artifact.init_and_validate(temp_file.name)
8279
with suppress(IntegrityError):
8380
artifact.save()
84-
_logger.info(f"Profile data URL: {get_artifact_url(artifact)}")
81+
_logger.info("Profile data URL: %s", get_artifact_url(artifact))
8582

8683
return response
8784

@@ -119,7 +116,7 @@ class RHSamlAuthHeaderMiddleware(MiddlewareMixin):
119116
def process_view(self, request, *args, **kwargs):
120117
if "/pulp-mgmt/" in request.path:
121118
if "HTTP_X_RH_IDENTITY" in request.META:
122-
_logger.debug(f"{request.META['HTTP_X_RH_IDENTITY']}")
119+
_logger.debug("%s", request.META["HTTP_X_RH_IDENTITY"])
123120

124121
# Authenticate user using RHSamlAuthentication backend
125122
if not request.user.is_authenticated:
@@ -131,7 +128,7 @@ def process_view(self, request, *args, **kwargs):
131128
request.session.modified = True
132129
# Update request.user for the current request
133130
request.user = user
134-
_logger.info(f"User {user.username} authenticated for pulp-mgmt")
131+
_logger.info("User %s authenticated for pulp-mgmt", user.username)
135132
else:
136133
_logger.warning("Failed to authenticate user from RH Identity header")
137134

pulp_service/pulp_service/app/models.py

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,22 @@
22
import json
33
import logging
44
import ssl
5-
6-
import aiohttp
7-
import jq
8-
95
from base64 import b64decode
106
from binascii import Error as Base64DecodeError
117
from datetime import datetime
12-
from hashlib import sha256
138
from gettext import gettext as _
9+
from hashlib import sha256
1410

11+
import aiohttp
12+
import jq
1513
from django.conf import settings
16-
from django.db import models
17-
1814
from django.contrib.postgres.fields import ArrayField, HStoreField
19-
20-
from pulpcore.plugin.models import BaseModel, Content, Domain, Group, RepositoryVersion
21-
from pulpcore.plugin.models import AutoAddObjPermsMixin
22-
from pulpcore.plugin.util import get_domain_pk
15+
from django.db import models
2316

2417
from pulpcore.app.models import HeaderContentGuard
25-
2618
from pulpcore.cache import Cache
19+
from pulpcore.plugin.models import AutoAddObjPermsMixin, BaseModel, Content, Domain, Group, RepositoryVersion
20+
from pulpcore.plugin.util import get_domain_pk
2721

2822
_logger = logging.getLogger(__name__)
2923

@@ -71,21 +65,19 @@ async def fetch_feature():
7165
return await response.json()
7266

7367
try:
74-
_logger.info(f"[{datetime.now()}] Making a request to feature service API ...")
68+
_logger.info("[%s] Making a request to feature service API ...", datetime.now())
7569
response = asyncio.run(fetch_feature())
76-
_logger.info(f"[{datetime.now()}] Got a response from feature service API!")
70+
_logger.info("[%s] Got a response from feature service API!", datetime.now())
7771
except aiohttp.ClientResponseError as err:
7872
if err.status == 400:
79-
_logger.error(
80-
"Failed to request information for a user. BadRequest. URL: {}".format(err.request_info.url)
81-
)
73+
_logger.error("Failed to request information for a user. BadRequest. URL: %s", err.request_info.url)
8274

8375
if err.status == 403:
8476
_logger.error(
8577
"Failed to request information for a user. Permission Denied. Verify if the certificate is still valid."
8678
)
8779

88-
_logger.warn(_("Failed to fetch the Subscription feature information for a user."))
80+
_logger.warning(_("Failed to fetch the Subscription feature information for a user."))
8981
raise PermissionError(_("Access denied."))
9082

9183
features_available = {feature["name"] for feature in response["features"]}
@@ -95,7 +87,7 @@ def permit(self, request):
9587
try:
9688
header_content = request.headers[self.header_name]
9789
except KeyError:
98-
_logger.error("Access not allowed. Header {header_name} not found.".format(header_name=self.header_name))
90+
_logger.error("Access not allowed. Header %s not found.", self.header_name)
9991
raise PermissionError(_("Access denied."))
10092

10193
try:
@@ -109,7 +101,7 @@ def permit(self, request):
109101
json_path = jq.compile(self.jq_filter)
110102

111103
if settings.AUTHENTICATION_HEADER_DEBUG:
112-
_logger.info("Authentication Header Debug enabled: {header_value}".format(header_value=header_value))
104+
_logger.info("Authentication Header Debug enabled: %s", header_value)
113105

114106
header_value = json_path.input_value(header_value).first()
115107

@@ -136,11 +128,11 @@ def permit(self, request):
136128
account_allowed = json.loads(account_allowed)
137129

138130
if not account_allowed:
139-
_logger.warn("Access not allowed - Features not available for the user.")
131+
_logger.warning("Access not allowed - Features not available for the user.")
140132
raise PermissionError(_("Access denied."))
141133

142-
except aiohttp.ClientResponseError as err:
143-
_logger.warn("Access not allowed - Failed to check for features.")
134+
except aiohttp.ClientResponseError:
135+
_logger.warning("Access not allowed - Failed to check for features.")
144136
raise PermissionError(_("Access denied."))
145137

146138
return

pulp_service/pulp_service/app/serializers.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
import json
22
import logging
3-
43
from gettext import gettext as _
5-
from jsonschema import validate, ValidationError
4+
5+
from jsonschema import ValidationError, validate
66
from rest_framework import serializers
77

8+
from pulpcore.app.models import Repository
9+
from pulpcore.plugin.models import PulpTemporaryFile
810
from pulpcore.plugin.serializers import (
911
ContentGuardSerializer,
1012
DetailRelatedField,
1113
GetOrCreateSerializerMixin,
14+
IdentityField,
1215
ModelSerializer,
16+
RepositoryVersionRelatedField,
1317
ValidateFieldsMixin,
1418
)
15-
from pulpcore.plugin.models import PulpTemporaryFile
16-
from pulpcore.plugin.serializers import IdentityField, RepositoryVersionRelatedField
17-
from pulpcore.app.models import Repository
1819

20+
from pulp_service.app.constants import (
21+
NPM_PACKAGE_LOCK_SCHEMA,
22+
OSV_RH_ECOSYSTEM_CPES_LABEL,
23+
OSV_RH_ECOSYSTEM_LABEL,
24+
PYTHON_REPOSITORY_PULP_TYPE,
25+
)
1926
from pulp_service.app.models import (
2027
AgentScanReport,
2128
FeatureContentGuard,
2229
PyPIYankMonitor,
2330
VulnerabilityReport,
2431
YankedPackageReport,
2532
)
26-
from pulp_service.app.constants import (
27-
NPM_PACKAGE_LOCK_SCHEMA,
28-
OSV_RH_ECOSYSTEM_CPES_LABEL,
29-
OSV_RH_ECOSYSTEM_LABEL,
30-
PYTHON_REPOSITORY_PULP_TYPE,
31-
)
32-
3333

3434
_logger = logging.getLogger(__name__)
3535

pulp_service/pulp_service/app/signals.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import logging
22

33
from django.conf import settings
4+
from django.contrib.auth import get_user_model
45
from django.db.models.signals import post_migrate, post_save
56
from django.dispatch import receiver
6-
from django.contrib.auth import get_user_model
77

88
from pulpcore.plugin.models import Domain
99

10-
from pulp_service.app.models import DomainOrg
1110
from pulp_service.app.authorization import group_var
12-
11+
from pulp_service.app.models import DomainOrg
1312

1413
_logger = logging.getLogger(__name__)
1514

@@ -29,7 +28,7 @@ def log_new_user(sender, instance, created, **kwargs):
2928
from pulp_service.app.middleware import request_path_var
3029

3130
request_path = request_path_var.get(None)
32-
_logger.info(f"New user created: username={instance.username}, route={request_path or 'unknown'}")
31+
_logger.info("New user created: username=%s, route=%s", instance.username, request_path or "unknown")
3332

3433

3534
@receiver(post_save, sender=Domain)

0 commit comments

Comments
 (0)