Skip to content

Commit 1ae74f9

Browse files
committed
add flake8-plugins to CI and fix linter warnings
1 parent 4c0c2c2 commit 1ae74f9

40 files changed

+349
-180
lines changed

.flake8

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
[flake8]
22
max-line-length = 120
33

4-
ignore =
5-
VNE002
6-
VNE003
7-
W503
8-
94
exclude =
105
./.cache,
116
./.git,
@@ -20,4 +15,4 @@ exclude =
2015
./.vscode,
2116
*migrations*,
2217

23-
enable-extensions = print, VNE
18+
enable-extensions = print, VNE, B, A, C4, BLK

.pre-commit-config.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ repos:
66
exclude: ^.*\b(migrations)\b.*$
77
language_version: python3
88
- repo: https://github.com/pycqa/flake8
9-
rev: 5.0.4
9+
rev: 6.1.0
1010
hooks:
1111
- id: flake8
12+
additional_dependencies:
13+
- flake8-print
14+
- flake8-variables-names
15+
- flake8-bugbear
16+
- flake8-builtins
17+
- flake8-comprehensions
18+
- flake8-broken-line
19+
- flake8-mutable

chats/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class ProjectChat(BaseChat):
8585
created_at: A DateTimeField indicating date of creation.
8686
"""
8787

88-
id = models.PositiveIntegerField(primary_key=True, unique=True)
88+
id = models.PositiveIntegerField(primary_key=True, unique=True) # noqa A003 VNE003
8989
project = models.ForeignKey(
9090
Project, on_delete=models.CASCADE, related_name="project_chats"
9191
)
@@ -126,7 +126,7 @@ class DirectChat(BaseChat):
126126
get_users: returns list of users, who are in chat
127127
"""
128128

129-
id = models.CharField(primary_key=True, max_length=64)
129+
id = models.CharField(primary_key=True, max_length=64) # noqa A003 VNE003
130130
users = models.ManyToManyField(User, related_name="direct_chats")
131131

132132
def get_users(self):
@@ -287,7 +287,7 @@ class Meta:
287287

288288

289289
class FileToMessage(models.Model):
290-
file = models.OneToOneField(
290+
file = models.OneToOneField( # noqa VNE002
291291
UserFile,
292292
on_delete=models.CASCADE,
293293
related_name="file_to_message",

chats/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,12 @@ async def create_file_to_message(
108108

109109
async def match_files_and_messages(file_urls, messages):
110110
for url in file_urls:
111-
file = await sync_to_async(UserFile.objects.get)(pk=url)
111+
user_file = await sync_to_async(UserFile.objects.get)(pk=url)
112112
# implicitly matches a file and a message
113113
await create_file_to_message(
114114
direct_message=messages["direct_message"],
115115
project_message=messages["project_message"],
116-
file=file,
116+
file=user_file,
117117
)
118118

119119

chats/websockets_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ class EventGroupType(str, Enum):
2727

2828
@dataclass(frozen=True)
2929
class Event:
30-
type: EventType
30+
type: EventType # noqa: A003, VNE003
3131
content: dict

core/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Meta:
2929

3030

3131
class SkillToObjectSerializer(serializers.ModelSerializer):
32-
id = serializers.IntegerField(source="skill.id")
32+
id = serializers.IntegerField(source="skill.id") # noqa A003 VNE003
3333
name = serializers.CharField(source="skill.name")
3434
category = SkillCategorySerializer(source="skill.category")
3535

core/services.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ def get_links(obj):
131131

132132
class Base64ImageEncoder:
133133
"""Encode image to base64."""
134+
134135
BASE_QUALITY: int = 85
135136

136137
def get_encoded_base64_from_url(self, url: str, max_width: int = 300) -> str:
@@ -146,10 +147,12 @@ def get_encoded_base64_from_url(self, url: str, max_width: int = 300) -> str:
146147
def get_encoded_base64_from_local_path(self, image_path: str) -> str:
147148
"""Returns the full prepared base64 string pron url path."""
148149
with open(image_path, "rb") as image_file:
149-
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
150+
base64_image = base64.b64encode(image_file.read()).decode("utf-8")
150151
return self._base64_full_string(base64_image, image_path.split(".")[-1])
151152

152-
def _base64_full_string(self, base_64_string: str, image_extension: str = "jpeg") -> str:
153+
def _base64_full_string(
154+
self, base_64_string: str, image_extension: str = "jpeg"
155+
) -> str:
153156
return f"data:image/{image_extension};base64,{base_64_string}"
154157

155158
def _get_compressed_image(self, image_data, max_width: int) -> str:
@@ -158,5 +161,5 @@ def _get_compressed_image(self, image_data, max_width: int) -> str:
158161
image.thumbnail((max_width, max_width))
159162
buffer = BytesIO()
160163
image.save(buffer, format="JPEG", quality=self.BASE_QUALITY)
161-
base64_image = base64.b64encode(buffer.getvalue()).decode('utf-8')
164+
base64_image = base64.b64encode(buffer.getvalue()).decode("utf-8")
162165
return base64_image

feed/views.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,9 @@ def _get_filter_data(self) -> list[str]:
2929

3030
def _get_excluded_projects_ids(self) -> list[int]:
3131
"""IDs for exclude projects which in Partner Program."""
32-
excluded_projects = (
33-
PartnerProgramUserProfile.objects
34-
.values_list("project_id", flat=True)
35-
.exclude(project_id__isnull=True)
36-
)
32+
excluded_projects = PartnerProgramUserProfile.objects.values_list(
33+
"project_id", flat=True
34+
).exclude(project_id__isnull=True)
3735
return excluded_projects
3836

3937
def get_queryset(self) -> QuerySet[News]:

files/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
class UserFileForm(ModelForm):
12-
file = FileField(required=True)
12+
file = FileField(required=True) # noqa VNE002
1313

1414
class Meta:
1515
model = UserFile
@@ -51,7 +51,8 @@ def filename(self, obj):
5151

5252
@admin.display(empty_value="Empty link")
5353
def short_link(self, obj):
54-
return reprlib.repr(obj.link.lstrip("https://")).strip("'")
54+
link = obj.link.removeprefix("https://")
55+
return reprlib.repr(link).removesuffix("'").removeprefix("'")
5556

5657
def get_fieldsets(self, request, obj=None):
5758
fieldsets = super().get_fieldsets(request, obj)

files/service.py

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,36 @@
1818

1919
class File:
2020
def __init__(
21-
self, file: TemporaryUploadedFile | InMemoryUploadedFile, quality: int = 70
21+
self,
22+
file_obj: TemporaryUploadedFile | InMemoryUploadedFile,
23+
quality: int = 70,
2224
):
23-
self.size = file.size
24-
self.name = File._get_name(file)
25-
self.extension = File._get_extension(file)
26-
self.buffer = file.open(mode="rb")
27-
self.content_type = file.content_type
25+
self.size = file_obj.size
26+
self.name = File._get_name(file_obj)
27+
self.extension = File._get_extension(file_obj)
28+
self.buffer = file_obj.open(mode="rb")
29+
self.content_type = file_obj.content_type
2830

2931
# we can compress given type of image
3032
if self.content_type in SUPPORTED_IMAGES_TYPES:
31-
webp_image = convert_image_to_webp(file, quality)
33+
webp_image = convert_image_to_webp(file_obj, quality)
3234
self.buffer = webp_image.buffer()
3335
self.size = webp_image.size
3436
self.content_type = "image/webp"
3537
self.extension = "webp"
3638

3739
@staticmethod
38-
def _get_name(file) -> str:
39-
name_parts = file.name.split(".")
40-
if len(name_parts) == 1:
41-
return name_parts[0]
42-
return ".".join(name_parts[:-1])
40+
def _get_name(file_obj) -> str:
41+
file_name_parts = file_obj.name.split(".")
42+
if len(file_name_parts) == 1:
43+
return file_name_parts[0]
44+
return ".".join(file_name_parts[:-1])
4345

4446
@staticmethod
45-
def _get_extension(file) -> str:
46-
if len(file.name.split(".")) > 1:
47-
return file.name.split(".")[-1]
47+
def _get_extension(file_obj) -> str:
48+
file_name_parts = file_obj.name.split(".")
49+
if len(file_name_parts) > 1:
50+
return file_name_parts[-1]
4851
return ""
4952

5053

@@ -54,7 +57,7 @@ def delete(self, url: str) -> Response:
5457
pass
5558

5659
@abstractmethod
57-
def upload(self, file: File, user: User) -> FileInfo:
60+
def upload(self, file_obj: File, user: User) -> FileInfo:
5861
pass
5962

6063

@@ -63,32 +66,32 @@ def delete(self, url: str) -> Response:
6366
token = self._get_auth_token()
6467
return requests.delete(url, headers={"X-Auth-Token": token})
6568

66-
def upload(self, file: File, user: User) -> FileInfo:
67-
url = self._upload(file, user)
69+
def upload(self, file_obj: File, user: User) -> FileInfo:
70+
url = self._upload(file_obj, user)
6871
return FileInfo(
6972
url=url,
70-
name=file.name,
71-
extension=file.extension,
72-
mime_type=file.content_type,
73-
size=file.size,
73+
name=file_obj.name,
74+
extension=file_obj.extension,
75+
mime_type=file_obj.content_type,
76+
size=file_obj.size,
7477
)
7578

76-
def _upload(self, file: File, user: User) -> str:
79+
def _upload(self, file_obj: File, user: User) -> str:
7780
token = self._get_auth_token()
78-
url = self._generate_url(file, user)
81+
url = self._generate_url(file_obj, user)
7982

8083
requests.put(
8184
url,
8285
headers={
8386
"X-Auth-Token": token,
84-
"Content-Type": file.content_type,
87+
"Content-Type": file_obj.content_type,
8588
},
86-
data=file.buffer,
89+
data=file_obj.buffer,
8790
)
8891

8992
return url
9093

91-
def _generate_url(self, file: File, user: User) -> str:
94+
def _generate_url(self, file_obj: File, user: User) -> str:
9295
"""
9396
Generates url for selcdn
9497
Returns:
@@ -97,9 +100,9 @@ def _generate_url(self, file: File, user: User) -> str:
97100
return (
98101
f"{SELECTEL_SWIFT_URL}"
99102
f"{abs(hash(user.email))}"
100-
f"/{abs(hash(file.name))}"
103+
f"/{abs(hash(file_obj.name))}"
101104
f"_{abs(hash(time.time()))}"
102-
f".{file.extension}"
105+
f".{file_obj.extension}"
103106
)
104107

105108
@staticmethod
@@ -138,8 +141,8 @@ def delete(self, url: str) -> Response:
138141

139142
def upload(
140143
self,
141-
file: TemporaryUploadedFile | InMemoryUploadedFile,
144+
file_obj: TemporaryUploadedFile | InMemoryUploadedFile,
142145
user: User,
143146
quality: int = 70,
144147
) -> FileInfo:
145-
return self.storage.upload(File(file, quality), user)
148+
return self.storage.upload(File(file_obj, quality), user)

0 commit comments

Comments
 (0)