Skip to content

Commit 67eebc5

Browse files
authored
Improve django-import-export (#13402)
1 parent 578af27 commit 67eebc5

File tree

6 files changed

+20
-17
lines changed

6 files changed

+20
-17
lines changed

pyrightconfig.stricter.json

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
"stubs/corus",
4545
"stubs/dateparser",
4646
"stubs/defusedxml",
47-
"stubs/django-import-export",
4847
"stubs/docker",
4948
"stubs/docutils",
5049
"stubs/Flask-SocketIO",

stubs/django-import-export/import_export/admin.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class ImportExportModelAdmin(ImportExportMixin[_ModelT], admin.ModelAdmin[_Model
105105
class ExportActionMixin(ExportMixin[_ModelT]):
106106
action_form: type[ActionForm]
107107
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
108-
def export_admin_action(self, request: HttpRequest, queryset: QuerySet[_ModelT]): ...
108+
def export_admin_action(self, request: HttpRequest, queryset: QuerySet[_ModelT]) -> HttpResponse: ...
109109
def get_actions(self, request: HttpRequest) -> dict[str, tuple[Callable[..., str], str, str] | None]: ...
110110
@property
111111
def media(self) -> Media: ...

stubs/django-import-export/import_export/resources.pyi

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from _typeshed import Incomplete
1+
import _typeshed
22
from collections import OrderedDict
33
from collections.abc import Iterator, Sequence
44
from functools import partial
@@ -14,7 +14,7 @@ from .instance_loaders import BaseInstanceLoader
1414
from .results import Error, Result, RowResult
1515
from .widgets import ForeignKeyWidget, ManyToManyWidget, Widget
1616

17-
Dataset: TypeAlias = Incomplete # tablib.Dataset
17+
Dataset: TypeAlias = _typeshed.Incomplete # tablib.Dataset
1818
logger: Logger
1919

2020
@overload
@@ -47,7 +47,7 @@ class ResourceOptions(Generic[_ModelT]):
4747
use_natural_foreign_keys: bool
4848

4949
class DeclarativeMetaclass(type):
50-
def __new__(cls, name: str, bases: tuple[type[Any], ...], attrs: dict[str, Any]): ...
50+
def __new__(cls: type[_typeshed.Self], name: str, bases: tuple[type[Any], ...], attrs: dict[str, Any]) -> _typeshed.Self: ...
5151

5252
class Diff:
5353
left: list[str]
@@ -202,23 +202,23 @@ class Resource(Generic[_ModelT], metaclass=DeclarativeMetaclass):
202202
def export(self, *args: Any, queryset: QuerySet[_ModelT] | None = None, **kwargs: Any) -> Dataset: ...
203203

204204
class ModelDeclarativeMetaclass(DeclarativeMetaclass):
205-
def __new__(cls, name: str, bases: tuple[type[Any], ...], attrs: dict[str, Any]): ...
205+
def __new__(cls: type[_typeshed.Self], name: str, bases: tuple[type[Any], ...], attrs: dict[str, Any]) -> _typeshed.Self: ...
206206

207207
class ModelResource(Resource[_ModelT], metaclass=ModelDeclarativeMetaclass):
208208
DEFAULT_RESOURCE_FIELD: ClassVar[type[Field]] = ...
209209
WIDGETS_MAP: ClassVar[dict[str, type[Widget]]]
210210
@classmethod
211-
def get_m2m_widget(cls, field: DjangoField[Any, Any]) -> partial[ManyToManyWidget]: ...
211+
def get_m2m_widget(cls, field: DjangoField[Any, Any]) -> partial[ManyToManyWidget[Any]]: ...
212212
@classmethod
213213
def get_fk_widget(cls, field: DjangoField[Any, Any]) -> partial[ForeignKeyWidget[Any]]: ...
214214
@classmethod
215-
def widget_from_django_field(cls, f: DjangoField[Any, Any], default: type[Widget] = ...): ...
215+
def widget_from_django_field(cls, f: DjangoField[Any, Any], default: type[Widget] = ...) -> type[Widget]: ...
216216
@classmethod
217217
def widget_kwargs_for_field(self, field_name: str) -> dict[str, Any]: ...
218218
@classmethod
219219
def field_from_django_field(cls, field_name: str, django_field: DjangoField[Any, Any], readonly: bool) -> Field: ...
220220
def get_queryset(self) -> QuerySet[_ModelT]: ...
221-
def init_instance(self, row: dict[str, Any] | None = None): ...
221+
def init_instance(self, row: dict[str, Any] | None = None) -> _ModelT: ...
222222
def after_import(self, dataset: Dataset, result: Result, using_transactions: bool, dry_run: bool, **kwargs: Any) -> None: ...
223223
@classmethod
224224
def get_display_name(cls) -> str: ...

stubs/django-import-export/import_export/results.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class Result:
6464
def append_row_result(self, row_result: RowResult) -> None: ...
6565
def append_base_error(self, error: Error) -> None: ...
6666
def add_dataset_headers(self, headers: list[str] | None) -> None: ...
67-
def append_failed_row(self, row: dict[str, Any], error) -> None: ...
67+
def append_failed_row(self, row: dict[str, Any], error: Exception) -> None: ...
6868
def append_invalid_row(self, number: int, row: dict[str, Any], validation_error: ValidationError) -> None: ...
6969
def increment_row_result_total(self, row_result: RowResult) -> None: ...
7070
def row_errors(self) -> list[tuple[int, Any]]: ...
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1+
from abc import abstractmethod
12
from typing import IO, Any, ClassVar
23

34
class BaseStorage:
45
name: str | None
56
read_mode: str
67
encoding: str | None
78
def __init__(self, *, name: str | None = None, read_mode: str = "", encoding: str | None = None) -> None: ...
9+
@abstractmethod
810
def save(self, data: Any) -> None: ...
9-
def read(self) -> None: ...
11+
@abstractmethod
12+
def read(self) -> Any: ... # `Any` because `read` returns things from `save`
13+
@abstractmethod
1014
def remove(self) -> None: ...
1115

1216
class TempFolderStorage(BaseStorage):
1317
def save(self, data: Any) -> None: ...
14-
def read(self): ...
18+
def read(self) -> Any: ...
1519
def remove(self) -> None: ...
1620
def get_full_path(self) -> str: ...
1721

1822
class CacheStorage(BaseStorage):
1923
CACHE_LIFETIME: int
2024
CACHE_PREFIX: str
2125
def save(self, data: Any) -> None: ...
22-
def read(self): ...
26+
def read(self) -> Any: ...
2327
def remove(self) -> None: ...
2428

2529
class MediaStorage(BaseStorage):
2630
MEDIA_FOLDER: ClassVar[str]
2731
def save(self, data: IO[Any]) -> None: ...
28-
def read(self): ...
32+
def read(self) -> Any: ...
2933
def remove(self) -> None: ...
3034
def get_full_path(self) -> str: ...

stubs/django-import-export/import_export/widgets.pyi

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ class ForeignKeyWidget(Widget, Generic[_ModelT]):
5959
def __init__(self, model: _ModelT, field: str = "pk", use_natural_foreign_keys: bool = False, **kwargs: Any) -> None: ...
6060
def get_queryset(self, value: Any, row: Mapping[str, Any], *args: Any, **kwargs: Any) -> QuerySet[_ModelT]: ...
6161

62-
class ManyToManyWidget(Widget):
63-
model: Model
62+
class ManyToManyWidget(Widget, Generic[_ModelT]):
63+
model: _ModelT
6464
separator: str
6565
field: str
66-
def __init__(self, model, separator: str | None = None, field: str | None = None, **kwargs: Any) -> None: ...
66+
def __init__(self, model: _ModelT, separator: str | None = None, field: str | None = None, **kwargs: Any) -> None: ...

0 commit comments

Comments
 (0)