From 5eb69a51017a7417d857f4ab45a44603fcbf3222 Mon Sep 17 00:00:00 2001 From: John Whitlock Date: Fri, 3 May 2024 10:21:31 -0500 Subject: [PATCH] Remove local stubs for waffle django-waffle 4.0.0 added type hints, we don't need ours now --- mypy_stubs/waffle/__init__.pyi | 26 ------ mypy_stubs/waffle/defaults.pyi | 30 ------- mypy_stubs/waffle/managers.pyi | 21 ----- mypy_stubs/waffle/models.pyi | 141 ------------------------------ mypy_stubs/waffle/testutils.pyi | 36 -------- mypy_stubs/waffle/utils.pyi | 11 --- privaterelay/tests/utils_tests.py | 5 +- 7 files changed, 4 insertions(+), 266 deletions(-) delete mode 100644 mypy_stubs/waffle/__init__.pyi delete mode 100644 mypy_stubs/waffle/defaults.pyi delete mode 100644 mypy_stubs/waffle/managers.pyi delete mode 100644 mypy_stubs/waffle/models.pyi delete mode 100644 mypy_stubs/waffle/testutils.pyi delete mode 100644 mypy_stubs/waffle/utils.pyi diff --git a/mypy_stubs/waffle/__init__.pyi b/mypy_stubs/waffle/__init__.pyi deleted file mode 100644 index 996fdbd66..000000000 --- a/mypy_stubs/waffle/__init__.pyi +++ /dev/null @@ -1,26 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/__init__.py -# Can be removed once type hints ship in the release after v3.0.0 - -from typing import Literal, overload - -from django.http import HttpRequest - -from waffle.models import Flag, Sample, Switch - -VERSION: tuple[int, ...] - -def flag_is_active( - request: HttpRequest, flag_name: str, read_only: bool = False -) -> bool | None: ... -def switch_is_active(switch_name: str) -> bool | None: ... -def sample_is_active(sample_name: str) -> bool | None: ... -def get_waffle_flag_model() -> Flag: ... -def get_waffle_switch_model() -> Switch: ... -def get_waffle_sample_model() -> Sample: ... -@overload -def get_waffle_model(setting_name: Literal["FLAG_MODEL"]) -> Flag: ... -@overload -def get_waffle_model(setting_name: Literal["SWITCH_MODEL"]) -> Switch: ... -@overload -def get_waffle_model(setting_name: Literal["SAMPLE_MODEL"]) -> Sample: ... diff --git a/mypy_stubs/waffle/defaults.pyi b/mypy_stubs/waffle/defaults.pyi deleted file mode 100644 index 1774ce703..000000000 --- a/mypy_stubs/waffle/defaults.pyi +++ /dev/null @@ -1,30 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/defaults.py -# Can be removed once type hints ship in the release after v3.0.0 - -COOKIE: str -TEST_COOKIE: str -SECURE: bool -MAX_AGE: int -CACHE_PREFIX: str -CACHE_NAME: str -FLAG_CACHE_KEY: str -FLAG_USERS_CACHE_KEY: str -FLAG_GROUPS_CACHE_KEY: str -ALL_FLAGS_CACHE_KEY: str -SAMPLE_CACHE_KEY: str -ALL_SAMPLES_CACHE_KEY: str -SWITCH_CACHE_KEY: str -ALL_SWITCHES_CACHE_KEY: str -FLAG_DEFAULT: bool -SAMPLE_DEFAULT: bool -SWITCH_DEFAULT: bool -READ_FROM_WRITE_DB: bool -CREATE_MISSING_FLAGS: bool -CREATE_MISSING_SAMPLES: bool -CREATE_MISSING_SWITCHES: bool -LOG_MISSING_FLAGS: None -LOG_MISSING_SAMPLES: None -LOG_MISSING_SWITCHES: None -OVERRIDE: bool -ENABLE_ADMIN_PAGES: bool diff --git a/mypy_stubs/waffle/managers.pyi b/mypy_stubs/waffle/managers.pyi deleted file mode 100644 index 855f18bed..000000000 --- a/mypy_stubs/waffle/managers.pyi +++ /dev/null @@ -1,21 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/managers.py -# Can be removed once type hints ship in the release after v3.0.0 - -from typing import TypeVar - -from django.db import models - -from waffle.models import BaseModel - -_BASE_T = TypeVar("_BASE_T", bound=BaseModel) - -class BaseManager(models.Manager[_BASE_T]): - KEY_SETTING: str - - def get_by_natural_key(self, name: str) -> _BASE_T: ... - def create(self, *args, **kwargs) -> _BASE_T: ... - -class FlagManager(BaseManager): ... -class SwitchManager(BaseManager): ... -class SampleManager(BaseManager): ... diff --git a/mypy_stubs/waffle/models.pyi b/mypy_stubs/waffle/models.pyi deleted file mode 100644 index d83f71f43..000000000 --- a/mypy_stubs/waffle/models.pyi +++ /dev/null @@ -1,141 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/models.py -# Can be removed once type hints ship in the release after v3.0.0 - -from logging import Logger -from typing import Literal, TypeVar - -from django.contrib.auth.models import AbstractBaseUser -from django.db import models -from django.http import HttpRequest -from django.utils.translation import gettext_lazy as _ - -from django_stubs_ext.db.models import TypedModelMeta -from waffle import managers - -logger: Logger -CACHE_EMPTY: str - -_T = TypeVar("_T", bound="BaseModel") - -class BaseModel(models.Model): - SINGLE_CACHE_KEY: str - ALL_CACHE_KEY: str - - class Meta(TypedModelMeta): - abstract = True - - def natural_key(self) -> tuple[str, ...]: ... - @classmethod - def _cache_key(cls, name: str) -> str: ... - @classmethod - def get(cls: type[_T], name: str) -> _T: ... - @classmethod - def get_from_db(cls: type[_T], name: str) -> _T: ... - @classmethod - def get_all(cls: type[_T]) -> list[_T]: ... - @classmethod - def get_all_from_db(cls: type[_T]) -> list[_T]: ... - def flush(self) -> None: ... - def save(self, *args, **kwargs) -> None: ... - def delete(self, *args, **kwargs) -> tuple[int, dict[str, int]]: ... - -def set_flag( - request: HttpRequest, - flag_name: str, - active: bool = True, - session_only: bool = False, -) -> None: ... - -class AbstractBaseFlag(BaseModel): - name: models.CharField - everyone: models.BooleanField - percent: models.DecimalField - testing: models.BooleanField - superusers: models.BooleanField - staff: models.BooleanField - authenticated: models.BooleanField - languages: models.TextField - rollout: models.BooleanField - note: models.TextField - created: models.DateTimeField - modified: models.DateTimeField - objects = managers.FlagManager - SINGLE_CACHE_KEY: str - ALL_CACHE_KEY: str - - class Meta(TypedModelMeta): - abstract = True - verbose_name = _("Flag") - verbose_name_plural = _("Flags") - - def flush(self) -> None: ... - def get_flush_keys(self, flush_keys: list[str] | None = None) -> list[str]: ... - def is_active_for_user(self, user: AbstractBaseUser) -> Literal[True] | None: ... - def is_active( - self, request: HttpRequest, read_only: bool = False - ) -> bool | None: ... - -class AbstractUserFlag(AbstractBaseFlag): - groups: models.ManyToManyField - users: models.ManyToManyField - - class Meta(AbstractBaseFlag.Meta): - abstract = True - verbose_name = _("Flag") - verbose_name_plural = _("Flags") - - def get_flush_keys(self, flush_keys: list[str] | None = None) -> list[str]: ... - def is_active_for_user(self, user: AbstractBaseUser) -> Literal[True] | None: ... - -class Flag(AbstractUserFlag): - class Meta(AbstractUserFlag.Meta): - swappable: str - verbose_name = _("Flag") - verbose_name_plural = _("Flags") - -class AbstractBaseSwitch(BaseModel): - name: models.CharField - active: models.BooleanField - note: models.TextField - created: models.DateTimeField - modified: models.DateTimeField - objects: managers.SwitchManager - SINGLE_CACHE_KEY: str - ALL_CACHE_KEY: str - - class Meta(TypedModelMeta): - abstract = True - verbose_name = _("Switch") - verbose_name_plural = _("Switches") - - def is_active(self) -> bool: ... - -class AbstractBaseSample(BaseModel): - name: models.CharField - percent: models.DecimalField - note: models.TextField - created: models.DateTimeField - modified: models.DateTimeField - objects = managers.SampleManager - SINGLE_CACHE_KEY: str - ALL_CACHE_KEY: str - - class Meta(TypedModelMeta): - abstract = True - verbose_name = _("Sample") - verbose_name_plural = _("Samples") - - def is_active(self) -> bool: ... - -class Switch(AbstractBaseSwitch): - class Meta(AbstractBaseSwitch.Meta): - swappable = "WAFFLE_SWITCH_MODEL" - verbose_name = _("Switch") - verbose_name_plural = _("Switches") - -class Sample(AbstractBaseSample): - class Meta(AbstractBaseSample.Meta): - swappable = "WAFFLE_SAMPLE_MODEL" - verbose_name = _("Sample") - verbose_name_plural = _("Samples") diff --git a/mypy_stubs/waffle/testutils.pyi b/mypy_stubs/waffle/testutils.pyi deleted file mode 100644 index 374322220..000000000 --- a/mypy_stubs/waffle/testutils.pyi +++ /dev/null @@ -1,36 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/testutils.py -# Can be removed once type hints ship in the release after v3.0.0 - -from typing import Generic, TypeVar - -from django.test.utils import TestContextDecorator - -_T = TypeVar("_T") -_FlagActive = bool | None -_SampleActive = bool | float | None - -class _overrider(TestContextDecorator, Generic[_T]): - name: str - active: _T - - def __init__(self, name: str, active: _T) -> None: ... - def get(self) -> None: ... - def update(self, active: _T) -> None: ... - def get_value(self) -> _T: ... - def enable(self) -> None: ... - def disable(self) -> None: ... - -class override_switch(_overrider[bool]): - def update(self, active: bool) -> None: ... - def get_value(self) -> bool: ... - -class override_flag(_overrider[_FlagActive]): - def update(self, active: _FlagActive) -> None: ... - def get_value(self) -> _FlagActive: ... - -class override_sample(_overrider[_SampleActive]): - created: bool - def get(self) -> None: ... - def update(self, active: _SampleActive) -> None: ... - def get_value(self) -> _SampleActive: ... diff --git a/mypy_stubs/waffle/utils.pyi b/mypy_stubs/waffle/utils.pyi deleted file mode 100644 index fca30a123..000000000 --- a/mypy_stubs/waffle/utils.pyi +++ /dev/null @@ -1,11 +0,0 @@ -# Type stubs for Django waffle -# https://github.com/django-waffle/django-waffle/blob/v3.0.0/waffle/utils.py -# Can be removed once type hints ship in the release after v3.0.0 - -from typing import Any - -from django.core.cache.backends.base import BaseCache - -def get_setting(name: str, default: Any | None = None) -> Any: ... -def keyfmt(k: str, v: str | None = None) -> str: ... -def get_cache() -> BaseCache: ... diff --git a/privaterelay/tests/utils_tests.py b/privaterelay/tests/utils_tests.py index 4749ffd46..134210788 100644 --- a/privaterelay/tests/utils_tests.py +++ b/privaterelay/tests/utils_tests.py @@ -10,7 +10,7 @@ import pytest from _pytest.fixtures import SubRequest from _pytest.logging import LogCaptureFixture from pytest_django.fixtures import SettingsWrapper -from waffle.models import Flag +from waffle.models import AbstractUserFlag, Flag from waffle.testutils import override_flag from waffle.utils import get_cache as get_waffle_cache @@ -510,6 +510,7 @@ def test_flag_is_active_for_task_user_flag(flag_user: User | None) -> None: assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user) if flag_user is None: return # Nothing further to test without a user + assert isinstance(flag, AbstractUserFlag) flag.users.add(flag_user) assert flag_is_active_in_task(TEST_FLAG_NAME, flag_user) @@ -520,6 +521,7 @@ def test_flag_is_active_for_task_group_flag(flag_user: User | None) -> None: if flag_user is None: return # Nothing further to test without a user group = Group.objects.create(name=TEST_FLAG_NAME) + assert isinstance(flag, AbstractUserFlag) flag.groups.add(group) assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user) group.user_set.add(flag_user) @@ -532,6 +534,7 @@ def test_flag_is_active_for_task_everyone_overrides_user( if flag_user is None: return # Nothing further to test without a user flag = Flag.objects.create(name=TEST_FLAG_NAME, everyone=False) + assert isinstance(flag, AbstractUserFlag) flag.users.add(flag_user) assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)