django-waffle 4.0.0 added type hints, we don't need ours now
This commit is contained in:
John Whitlock 2024-05-03 10:21:31 -05:00
Родитель 8854e2885b
Коммит 5eb69a5101
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 082C735D154FB750
7 изменённых файлов: 4 добавлений и 266 удалений

Просмотреть файл

@ -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: ...

Просмотреть файл

@ -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

Просмотреть файл

@ -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): ...

Просмотреть файл

@ -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")

Просмотреть файл

@ -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: ...

Просмотреть файл

@ -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: ...

Просмотреть файл

@ -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)