Skip to content

Commit 1f4efbe

Browse files
tonyintgr
andauthored
AbstractBaseSession: Use model fields for subclassed cases (#2180)
* `AbstractBaseSession`: Use model fields for subclassed cases In situations where these fields are overridden in custom models, for instance extending 'session_key`'s `max_length`. Follow a similar style to `AuthBaseUser`. See also: - https://docs.djangoproject.com/en/5.0/topics/http/sessions/#extending-database-backed-session-engines - https://github.com/django/django/blob/5.0.6/django/contrib/sessions/base_session.py - https://github.com/typeddjango/django-stubs/blob/5.0.0/django-stubs/contrib/sessions/base_session.pyi#L13-L21 * `AbstractBaseSession`: Remove `objects` (declared in `Model`) Co-authored-by: Marti Raudsepp <marti@juffo.org> * `AbstractBaseSession`: Use `ClassVar` (credit: @flaeppe) --------- Co-authored-by: Marti Raudsepp <marti@juffo.org>
1 parent e196985 commit 1f4efbe

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

django-stubs/contrib/sessions/base_session.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from datetime import datetime
2-
from typing import Any, TypeVar
2+
from typing import Any, ClassVar, TypeVar
33

44
from django.contrib.sessions.backends.base import SessionBase
55
from django.db import models
6+
from typing_extensions import Self
67

78
_T = TypeVar("_T", bound=AbstractBaseSession)
89

@@ -11,10 +12,10 @@ class BaseSessionManager(models.Manager[_T]):
1112
def save(self, session_key: str, session_dict: dict[str, Any], expire_date: datetime) -> _T: ...
1213

1314
class AbstractBaseSession(models.Model):
14-
expire_date: datetime
15-
session_data: str
16-
session_key: str
17-
objects: Any
15+
session_key = models.CharField(primary_key=True)
16+
session_data = models.TextField()
17+
expire_date = models.DateTimeField()
18+
objects: ClassVar[BaseSessionManager[Self]]
1819

1920
@classmethod
2021
def get_session_store_class(cls) -> type[SessionBase] | None: ...

scripts/stubtest/allowlist_todo.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ django.contrib.sessions.backends.signed_cookies.SessionStore.exists
509509
django.contrib.sessions.base_session.AbstractBaseSession.expire_date
510510
django.contrib.sessions.base_session.AbstractBaseSession.get_next_by_expire_date
511511
django.contrib.sessions.base_session.AbstractBaseSession.get_previous_by_expire_date
512+
django.contrib.sessions.base_session.AbstractBaseSession.objects
512513
django.contrib.sessions.base_session.AbstractBaseSession.session_data
513514
django.contrib.sessions.base_session.AbstractBaseSession.session_key
514515
django.contrib.sessions.base_session.BaseSessionManager.__slotnames__

0 commit comments

Comments
 (0)