Remove local stubs for waffle
django-waffle 4.0.0 added type hints, we don't need ours now
This commit is contained in:
Родитель
8854e2885b
Коммит
5eb69a5101
|
@ -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.fixtures import SubRequest
|
||||||
from _pytest.logging import LogCaptureFixture
|
from _pytest.logging import LogCaptureFixture
|
||||||
from pytest_django.fixtures import SettingsWrapper
|
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.testutils import override_flag
|
||||||
from waffle.utils import get_cache as get_waffle_cache
|
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)
|
assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)
|
||||||
if flag_user is None:
|
if flag_user is None:
|
||||||
return # Nothing further to test without a user
|
return # Nothing further to test without a user
|
||||||
|
assert isinstance(flag, AbstractUserFlag)
|
||||||
flag.users.add(flag_user)
|
flag.users.add(flag_user)
|
||||||
assert flag_is_active_in_task(TEST_FLAG_NAME, 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:
|
if flag_user is None:
|
||||||
return # Nothing further to test without a user
|
return # Nothing further to test without a user
|
||||||
group = Group.objects.create(name=TEST_FLAG_NAME)
|
group = Group.objects.create(name=TEST_FLAG_NAME)
|
||||||
|
assert isinstance(flag, AbstractUserFlag)
|
||||||
flag.groups.add(group)
|
flag.groups.add(group)
|
||||||
assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)
|
assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)
|
||||||
group.user_set.add(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:
|
if flag_user is None:
|
||||||
return # Nothing further to test without a user
|
return # Nothing further to test without a user
|
||||||
flag = Flag.objects.create(name=TEST_FLAG_NAME, everyone=False)
|
flag = Flag.objects.create(name=TEST_FLAG_NAME, everyone=False)
|
||||||
|
assert isinstance(flag, AbstractUserFlag)
|
||||||
flag.users.add(flag_user)
|
flag.users.add(flag_user)
|
||||||
assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)
|
assert not flag_is_active_in_task(TEST_FLAG_NAME, flag_user)
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче