Skip to content

Commit 1c624ff

Browse files
committed
Remove ClassVar suggestion/usage on model query QuerySet types
1 parent 5b7dd98 commit 1c624ff

File tree

14 files changed

+30
-40
lines changed

14 files changed

+30
-40
lines changed

example/app/users/models.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from __future__ import annotations
22

3-
from typing import ClassVar
4-
53
from plain import models
64
from plain.models import types
75
from plain.passwords.types import PasswordField
@@ -13,4 +11,4 @@ class User(models.Model):
1311
password: str = PasswordField()
1412
is_admin: bool = types.BooleanField(default=False)
1513

16-
query: ClassVar[models.QuerySet[User]] = models.QuerySet()
14+
query: models.QuerySet[User] = models.QuerySet()
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from __future__ import annotations
22

3-
from typing import ClassVar
4-
53
from plain import models
64
from plain.models import types
75

@@ -11,4 +9,4 @@ class User(models.Model):
119
username: str = types.CharField(max_length=255)
1210
is_admin: bool = types.BooleanField(default=False)
1311

14-
query: ClassVar[models.QuerySet[User]] = models.QuerySet()
12+
query: models.QuerySet[User] = models.QuerySet()

plain-api/plain/api/models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import os
55
import uuid
66
from datetime import datetime
7-
from typing import ClassVar
87
from uuid import UUID
98

109
from plain import models
@@ -29,7 +28,7 @@ class APIKey(models.Model):
2928

3029
api_version: str = types.CharField(max_length=255, required=False)
3130

32-
query: ClassVar[models.QuerySet[APIKey]] = models.QuerySet()
31+
query: models.QuerySet[APIKey] = models.QuerySet()
3332

3433
model_options = models.Options(
3534
constraints=[

plain-cache/plain/cache/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
from datetime import datetime
4-
from typing import Any, ClassVar, Self
4+
from typing import Any, Self
55

66
from plain import models
77
from plain.models import types
@@ -27,7 +27,7 @@ class CachedItem(models.Model):
2727
created_at: datetime = types.DateTimeField(auto_now_add=True)
2828
updated_at: datetime = types.DateTimeField(auto_now=True)
2929

30-
query: ClassVar[CachedItemQuerySet] = CachedItemQuerySet()
30+
query: CachedItemQuerySet = CachedItemQuerySet()
3131

3232
model_options = models.Options(
3333
indexes=[

plain-flags/plain/flags/models.py

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

33
import re
44
from datetime import datetime
5-
from typing import ClassVar
65

76
from plain import models
87
from plain.exceptions import ValidationError
@@ -22,7 +21,7 @@ class FlagResult(models.Model):
2221
key: str = types.CharField(max_length=255)
2322
value = types.JSONField()
2423

25-
query: ClassVar[models.QuerySet[FlagResult]] = models.QuerySet()
24+
query: models.QuerySet[FlagResult] = models.QuerySet()
2625

2726
model_options = models.Options(
2827
constraints=[
@@ -52,7 +51,7 @@ class Flag(models.Model):
5251
# To provide an easier way to see if a flag is still being used
5352
used_at: datetime | None = types.DateTimeField(required=False, allow_null=True)
5453

55-
query: ClassVar[models.QuerySet[Flag]] = models.QuerySet()
54+
query: models.QuerySet[Flag] = models.QuerySet()
5655

5756
model_options = models.Options(
5857
constraints=[

plain-jobs/plain/jobs/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import datetime
44
import logging
55
import traceback
6-
from typing import TYPE_CHECKING, Any, ClassVar, Self
6+
from typing import TYPE_CHECKING, Any, Self
77
from uuid import UUID, uuid4
88

99
from opentelemetry import trace
@@ -72,7 +72,7 @@ class JobRequest(models.Model):
7272

7373
# expires_at = models.DateTimeField(required=False, allow_null=True)
7474

75-
query: ClassVar[models.QuerySet[JobRequest]] = models.QuerySet()
75+
query: models.QuerySet[JobRequest] = models.QuerySet()
7676

7777
model_options = models.Options(
7878
ordering=["priority", "-created_at"],
@@ -182,7 +182,7 @@ class JobProcess(models.Model):
182182
max_length=18, required=False, allow_null=True
183183
)
184184

185-
query: ClassVar[JobQuerySet] = JobQuerySet()
185+
query: JobQuerySet = JobQuerySet()
186186

187187
model_options = models.Options(
188188
ordering=["-created_at"],
@@ -501,7 +501,7 @@ class JobResult(models.Model):
501501
max_length=18, required=False, allow_null=True
502502
)
503503

504-
query: ClassVar[JobResultQuerySet] = JobResultQuerySet()
504+
query: JobResultQuerySet = JobResultQuerySet()
505505

506506
model_options = models.Options(
507507
ordering=["-created_at"],

plain-models/plain/models/README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,13 +264,11 @@ Reverse relationships can also be typed - see the [Reverse relationships](#rever
264264

265265
### Typing QuerySets
266266

267-
For better type checking of query results, you can explicitly type the `query` attribute using `ClassVar`:
267+
For better type checking of query results, you can explicitly type the `query` attribute:
268268

269269
```python
270270
from __future__ import annotations
271271

272-
from typing import ClassVar
273-
274272
from plain import models
275273
from plain.models import types
276274

@@ -279,10 +277,10 @@ class User(models.Model):
279277
email: str = types.EmailField()
280278
is_admin: bool = types.BooleanField(default=False)
281279

282-
query: ClassVar[models.QuerySet[User]] = models.QuerySet()
280+
query: models.QuerySet[User] = models.QuerySet()
283281
```
284282

285-
With this annotation, type checkers will know that `User.query.get()` returns a `User` instance and `User.query.filter()` returns `QuerySet[User]`. The `ClassVar` annotation tells type checkers that `query` is a class-level attribute, not an instance field. This is optional - the query attribute works without the annotation, but adding it improves IDE autocomplete and type checking.
283+
With this annotation, type checkers will know that `User.query.get()` returns a `User` instance and `User.query.filter()` returns `QuerySet[User]`. This is optional - the query attribute works without the annotation, but adding it improves IDE autocomplete and type checking.
286284

287285
## Validation
288286

plain-oauth/plain/oauth/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import datetime
4-
from typing import TYPE_CHECKING, Any, ClassVar
4+
from typing import TYPE_CHECKING, Any
55

66
from plain import models
77
from plain.auth import get_user_model
@@ -43,7 +43,7 @@ class OAuthConnection(models.Model):
4343
required=False, allow_null=True
4444
)
4545

46-
query: ClassVar[models.QuerySet[OAuthConnection]] = models.QuerySet()
46+
query: models.QuerySet[OAuthConnection] = models.QuerySet()
4747

4848
model_options = models.Options(
4949
constraints=[

plain-oauth/tests/app/users/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, ClassVar
3+
from typing import TYPE_CHECKING
44

55
from plain import models
66
from plain.models import types
@@ -19,7 +19,7 @@ class User(models.Model):
1919
types.ReverseForeignKey(to="plainoauth.OAuthConnection", field="user")
2020
)
2121

22-
query: ClassVar[models.QuerySet[User]] = models.QuerySet()
22+
query: models.QuerySet[User] = models.QuerySet()
2323

2424
model_options = models.Options(
2525
constraints=[

plain-observer/plain/observer/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from collections.abc import Iterable, Mapping, Sequence
77
from datetime import UTC, datetime
88
from functools import cached_property
9-
from typing import TYPE_CHECKING, Any, ClassVar, cast
9+
from typing import TYPE_CHECKING, Any, cast
1010

1111
import sqlparse
1212
from opentelemetry.sdk.trace import ReadableSpan
@@ -68,7 +68,7 @@ class Trace(models.Model):
6868
to="Log", field="trace"
6969
)
7070

71-
query: ClassVar[models.QuerySet[Trace]] = models.QuerySet()
71+
query: models.QuerySet[Trace] = models.QuerySet()
7272

7373
model_options = models.Options(
7474
ordering=["-start_time"],
@@ -340,7 +340,7 @@ class Span(models.Model):
340340
# Explicit reverse relation
341341
logs: types.ReverseForeignKey[Log] = types.ReverseForeignKey(to="Log", field="span")
342342

343-
query: ClassVar[SpanQuerySet] = SpanQuerySet()
343+
query: SpanQuerySet = SpanQuerySet()
344344

345345
model_options = models.Options(
346346
ordering=["-start_time"],
@@ -525,7 +525,7 @@ class Log(models.Model):
525525
level: str = types.CharField(max_length=20)
526526
message: str = types.TextField()
527527

528-
query: ClassVar[models.QuerySet[Log]] = models.QuerySet()
528+
query: models.QuerySet[Log] = models.QuerySet()
529529

530530
model_options = models.Options(
531531
ordering=["timestamp"],

0 commit comments

Comments
 (0)