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.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)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче