Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions {{ cookiecutter.name }}/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@ dev = [
"django-stubs>=5.2.0",
"djangorestframework-stubs>=3.16.0",
"dotenv-linter>=0.7.0",
"faker>=37.8.0",
"freezegun>=1.5.1",
"ipython>=9.2.0",
"jedi>=0.19.2",
"mixer>=7.2.2",
"model-bakery>=1.20.5",
"mypy>=1.15.0",
"pymarkdownlnt>=0.9.29",
"pytest-deadfixtures>=2.2.1",
Expand Down Expand Up @@ -226,7 +227,6 @@ module = [
"djangorestframework_camel_case.*",
"drf_orjson_renderer.*",
"ipware.*",
"mixer.*",
]
ignore_missing_imports = true

Expand Down
6 changes: 1 addition & 5 deletions {{ cookiecutter.name }}/src/app/factory.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
from django.core.files.uploadedfile import SimpleUploadedFile
from faker import Faker

from app.testing import register
from app.testing.types import FactoryProtocol


faker = Faker()


@register
def image(self: FactoryProtocol, name: str = "image.gif", content_type: str = "image/gif") -> SimpleUploadedFile:
return SimpleUploadedFile(name=name, content=faker.image(), content_type=content_type)
return SimpleUploadedFile(name=name, content=self.faker.image(), content_type=content_type)
6 changes: 4 additions & 2 deletions {{ cookiecutter.name }}/src/app/testing/factory.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from collections.abc import Callable
from functools import partial

from app.testing.mixer import mixer
from faker import Faker
from model_bakery import baker


def register(method: Callable) -> Callable:
Expand Down Expand Up @@ -31,7 +32,8 @@ def __getattr__(self, name: str) -> Callable:

class FixtureFactory:
def __init__(self) -> None:
self.mixer = mixer
self.baker = baker # imported module
self.faker = Faker()
self.registry = FixtureRegistry()

def __getattr__(self, name: str) -> Callable:
Expand Down
20 changes: 0 additions & 20 deletions {{ cookiecutter.name }}/src/app/testing/mixer.py

This file was deleted.

6 changes: 4 additions & 2 deletions {{ cookiecutter.name }}/src/app/testing/types.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from types import ModuleType
from typing import Protocol

from mixer.backend.django import mixer
from faker import Faker


class FactoryProtocol(Protocol):
mixer: mixer
baker: ModuleType
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот тут не оч идеально получается: model-bakery типизированный, но экспортирует функции с разными типами. Когда импортирую (и пишу тип) для модуля, то langauge сервер не подскажет типы у функций

  1. То есть в моём варианте нет подсветки синтаксиса
@register
def user(self: FactoryProtocol, **kwargs) -> User:
    return self.baker.make("users.User", **kwargs)  #  <-- нет подсветки/проверки синтаксиса
  1. А если импортировать baker в каждом файле, то будет понятно что за модуль baker и будет проверка синтаксиса
from model_bakery import baker   # <-- импортируем напрямую

@register
def user(self: FactoryProtocol, **kwargs) -> User:
    return baker.make("users.User", **kwargs)  #  <-- есть проверка синтаксиса

То вариант 2 мне совсем не нравится — в каждом файле с тестами придётся испортировать, не удобно + сложнее заменить на что-то другое как сейчас меняем mixer.

faker: Faker


__all__ = [
Expand Down
2 changes: 1 addition & 1 deletion {{ cookiecutter.name }}/src/users/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@register
def user(self: FactoryProtocol, **kwargs: dict) -> User:
return self.mixer.blend("users.User", **kwargs)
return self.baker.make("users.User", **kwargs)


@register
Expand Down
24 changes: 13 additions & 11 deletions {{ cookiecutter.name }}/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.