Skip to content

Commit d058c1e

Browse files
authored
Merge pull request #244 from PROCOLLAB-github/feature/type-hints
stubs + типизация моделей и сериалайзеров в приложении users
2 parents 6d1df10 + 9391a70 commit d058c1e

6 files changed

Lines changed: 216 additions & 19 deletions

File tree

mypy.ini

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[mypy]
2+
plugins =
3+
mypy_django_plugin.main
4+
mypy_drf_plugin.main
5+
6+
[mypy.plugins.django-stubs]
7+
django_settings_module = "procollab.settings"

poetry.lock

Lines changed: 146 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ django-prometheus = "^2.3.1"
6161
loguru = "^0.7.1"
6262
tablib = {extras = ["xlsx"], version = "^3.5.0"}
6363
django-redis = "^5.3.0"
64+
django-stubs = {extras = ["compatible-mypy"], version = "^4.2.6"}
65+
djangorestframework-stubs = {extras = ["compatible-mypy"], version = "^3.14.4"}
6466

6567

6668
[build-system]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 4.2.3 on 2023-12-02 16:38
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("users", "0041_alter_customuser_options"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="expert",
15+
options={"verbose_name": "Эксперт", "verbose_name_plural": "Эксперты"},
16+
),
17+
migrations.AlterModelOptions(
18+
name="investor",
19+
options={"verbose_name": "Инвестор", "verbose_name_plural": "Инвесторы"},
20+
),
21+
migrations.AlterModelOptions(
22+
name="member",
23+
options={"verbose_name": "Участник", "verbose_name_plural": "Участники"},
24+
),
25+
migrations.AlterModelOptions(
26+
name="mentor",
27+
options={"verbose_name": "Ментор", "verbose_name_plural": "Менторы"},
28+
),
29+
]

users/models.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.contrib.auth.models import AbstractUser
22
from django.db import models
33
from django.db.models import QuerySet
4-
4+
from django_stubs_ext.db.models import TypedModelMeta
55
from users.constants import (
66
ADMIN,
77
EXPERT,
@@ -149,7 +149,7 @@ def get_full_name(self) -> str:
149149
def __str__(self) -> str:
150150
return f"User<{self.id}> - {self.first_name} {self.last_name}"
151151

152-
class Meta:
152+
class Meta(TypedModelMeta):
153153
verbose_name = "Пользователь"
154154
verbose_name_plural = "Пользователи"
155155
# order by count of fields inputted, like avatar, key_skills, about_me, etc.
@@ -181,7 +181,7 @@ class UserAchievement(models.Model):
181181
def __str__(self):
182182
return f"UserAchievement<{self.id}>"
183183

184-
class Meta:
184+
class Meta(TypedModelMeta):
185185
verbose_name = "Достижение"
186186
verbose_name_plural = "Достижения"
187187

@@ -207,7 +207,7 @@ class AbstractUserWithRole(models.Model):
207207
null=True,
208208
)
209209

210-
class Meta:
210+
class Meta(TypedModelMeta):
211211
abstract = True
212212

213213

@@ -244,7 +244,7 @@ def toggle_like(self):
244244
def __str__(self):
245245
return f"LikesOnProject<{self.id}>"
246246

247-
class Meta:
247+
class Meta(TypedModelMeta):
248248
verbose_name = "Лайк на проект"
249249
verbose_name_plural = "Лайки на проекты"
250250
unique_together = ("user", "project")
@@ -268,6 +268,10 @@ class Member(models.Model):
268268

269269
useful_to_project = models.TextField(blank=True)
270270

271+
class Meta(TypedModelMeta):
272+
verbose_name = "Участник"
273+
verbose_name_plural = "Участники"
274+
271275
def __str__(self):
272276
return f"Member<{self.id}> - {self.user.first_name} {self.user.last_name}"
273277

@@ -291,6 +295,10 @@ class Mentor(AbstractUserWithRole):
291295
preferred_industries = models.CharField(max_length=4096, null=True, blank=True)
292296
useful_to_project = models.TextField(blank=True)
293297

298+
class Meta(TypedModelMeta):
299+
verbose_name = "Ментор"
300+
verbose_name_plural = "Менторы"
301+
294302
def __str__(self):
295303
return f"Mentor<{self.id}> - {self.user.first_name} {self.user.last_name}"
296304

@@ -314,7 +322,9 @@ class Expert(AbstractUserWithRole):
314322
preferred_industries = models.CharField(max_length=4096, null=True, blank=True)
315323
useful_to_project = models.TextField(blank=True)
316324

317-
# TODO reviews
325+
class Meta(TypedModelMeta):
326+
verbose_name = "Эксперт"
327+
verbose_name_plural = "Эксперты"
318328

319329
def __str__(self):
320330
return f"Expert<{self.id}> - {self.user.first_name} {self.user.last_name}"
@@ -338,6 +348,10 @@ class Investor(AbstractUserWithRole):
338348
preferred_industries = models.CharField(max_length=4096, null=True, blank=True)
339349
interaction_process_description = models.TextField(blank=True)
340350

351+
class Meta(TypedModelMeta):
352+
verbose_name = "Инвестор"
353+
verbose_name_plural = "Инвесторы"
354+
341355
def __str__(self):
342356
return f"Investor<{self.id}> - {self.user.first_name} {self.user.last_name}"
343357

@@ -363,7 +377,7 @@ class UserLink(models.Model):
363377
def __str__(self):
364378
return f"UserLink<{self.id}> - {self.user.first_name} {self.user.last_name}"
365379

366-
class Meta:
380+
class Meta(TypedModelMeta):
367381
verbose_name = "Ссылка пользователя"
368382
verbose_name_plural = "Ссылки пользователей"
369383
unique_together = ("user", "link")

0 commit comments

Comments
 (0)