@@ -6,49 +6,21 @@ from logging import Logger
6
6
from typing import Any , ClassVar , Generic , Literal , NoReturn , TypeVar , overload
7
7
from typing_extensions import TypeAlias , deprecated
8
8
9
- from django .db .models import Field as DjangoField , ForeignObjectRel , Model , QuerySet
9
+ from django .db .models import Field as DjangoField , Model , QuerySet
10
10
from django .utils .safestring import SafeString
11
11
12
+ from .declarative import DeclarativeMetaclass , ModelDeclarativeMetaclass
12
13
from .fields import Field
13
14
from .instance_loaders import BaseInstanceLoader
15
+ from .options import ResourceOptions
14
16
from .results import Error , Result , RowResult
15
17
from .widgets import ForeignKeyWidget , ManyToManyWidget , Widget
16
18
17
19
Dataset : TypeAlias = _typeshed .Incomplete # tablib.Dataset
18
20
logger : Logger
19
21
20
- @overload
21
- def get_related_model (field : ForeignObjectRel ) -> Model : ...
22
- @overload
23
- def get_related_model (field : DjangoField [Any , Any ]) -> Model | None : ...
24
22
def has_natural_foreign_key (model : Model ) -> bool : ...
25
23
26
- class ResourceOptions (Generic [_ModelT ]):
27
- model : _ModelT
28
- fields : Sequence [str ] | None
29
- exclude : Sequence [str ] | None
30
- instance_loader_class : type [BaseInstanceLoader ] | None
31
- import_id_fields : Sequence [str ]
32
- export_order : Sequence [str ] | None
33
- widgets : dict [str , Any ] | None
34
- use_transactions : bool | None
35
- skip_unchanged : bool
36
- report_skipped : bool
37
- clean_model_instances : bool
38
- chunk_size : int | None
39
- skip_diff : bool
40
- skip_html_diff : bool
41
- use_bulk : bool
42
- batch_size : int
43
- force_init_instance : bool
44
- using_db : str | None
45
- store_row_values : bool
46
- store_instance : bool
47
- use_natural_foreign_keys : bool
48
-
49
- class DeclarativeMetaclass (type ):
50
- def __new__ (cls : type [_typeshed .Self ], name : str , bases : tuple [type [Any ], ...], attrs : dict [str , Any ]) -> _typeshed .Self : ...
51
-
52
24
class Diff :
53
25
left : list [str ]
54
26
right : list [str ]
@@ -78,6 +50,7 @@ class Resource(Generic[_ModelT], metaclass=DeclarativeMetaclass):
78
50
def get_db_connection_name (self ) -> str : ...
79
51
def get_use_transactions (self ) -> bool : ...
80
52
def get_chunk_size (self ) -> int : ...
53
+ @deprecated ("The 'get_fields()' method is deprecated and will be removed in a future release." )
81
54
def get_fields (self , ** kwargs : Any ) -> list [Field ]: ...
82
55
def get_field_name (self , field : Field ) -> str : ...
83
56
def init_instance (self , row : dict [str , Any ] | None = None ) -> _ModelT : ...
@@ -105,56 +78,35 @@ class Resource(Generic[_ModelT], metaclass=DeclarativeMetaclass):
105
78
def validate_instance (
106
79
self , instance : _ModelT , import_validation_errors : dict [str , Any ] | None = None , validate_unique : bool = True
107
80
) -> None : ...
108
- def save_instance (
109
- self , instance : _ModelT , is_create : bool , using_transactions : bool = True , dry_run : bool = False
110
- ) -> None : ...
111
- def before_save_instance (self , instance : _ModelT , using_transactions : bool , dry_run : bool ) -> None : ...
112
- def after_save_instance (self , instance : _ModelT , using_transactions : bool , dry_run : bool ) -> None : ...
113
- def delete_instance (self , instance : _ModelT , using_transactions : bool = True , dry_run : bool = False ) -> None : ...
114
- def before_delete_instance (self , instance : _ModelT , dry_run : bool ) -> None : ...
115
- def after_delete_instance (self , instance : _ModelT , dry_run : bool ) -> None : ...
116
- def import_field (self , field : Field , obj : _ModelT , data : dict [str , Any ], is_m2m : bool = False , ** kwargs : Any ) -> None : ...
81
+ # For all the definitions below (from `save_instance()` to `import_row()`), `**kwargs` should contain:
82
+ # dry_run: bool, use_transactions: bool, row_number: int, retain_instance_in_row_result: bool.
83
+ # Users are free to pass extra arguments in `import_data()`so PEP 728 can probably be leveraged here.
84
+ def save_instance (self , instance : _ModelT , is_create : bool , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
85
+ def do_instance_save (self , instance : _ModelT ) -> None : ...
86
+ def before_save_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
87
+ def after_save_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
88
+ def delete_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
89
+ def before_delete_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
90
+ def after_delete_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
91
+ def import_field (self , field : Field , instance : _ModelT , row : dict [str , Any ], is_m2m : bool = False , ** kwargs : Any ) -> None : ...
117
92
def get_import_fields (self ) -> list [Field ]: ...
118
- def import_obj (self , obj : _ModelT , data : dict [str , Any ], dry_run : bool , ** kwargs : Any ) -> None : ...
119
- def save_m2m (self , obj : _ModelT , data : dict [str , Any ], using_transactions : bool , dry_run : bool ) -> None : ...
93
+ def import_instance (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
94
+ def save_m2m (self , instance : _ModelT , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
120
95
def for_delete (self , row : dict [str , Any ], instance : _ModelT ) -> bool : ...
121
96
def skip_row (
122
97
self , instance : _ModelT , original : _ModelT , row : dict [str , Any ], import_validation_errors : dict [str , Any ] | None = None
123
98
) -> bool : ...
124
99
def get_diff_headers (self ) -> list [str ]: ...
125
- def before_import (self , dataset : Dataset , using_transactions : bool , dry_run : bool , ** kwargs : Any ) -> None : ...
126
- def after_import (self , dataset : Dataset , result : Result , using_transactions : bool , dry_run : bool , ** kwargs : Any ) -> None : ...
127
- def before_import_row (self , row : dict [str , Any ], row_number : int | None = None , ** kwargs : Any ) -> None : ...
128
- def after_import_row (
129
- self , row : dict [str , Any ], row_result : RowResult , row_number : int | None = None , ** kwargs : Any
130
- ) -> None : ...
131
- def after_import_instance (self , instance : _ModelT , new : bool , row_number : int | None = None , ** kwargs : Any ) -> None : ...
100
+ def before_import (self , dataset : Dataset , ** kwargs : Any ) -> None : ...
101
+ def after_import (self , dataset : Dataset , result : Result , ** kwargs : Any ) -> None : ...
102
+ def before_import_row (self , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
103
+ def after_import_row (self , row : dict [str , Any ], row_result : RowResult , ** kwargs : Any ) -> None : ...
104
+ def after_init_instance (self , instance : _ModelT , new : bool , row : dict [str , Any ], ** kwargs : Any ) -> None : ...
132
105
@overload
133
106
def handle_import_error (self , result : Result , error : Exception , raise_errors : Literal [True ]) -> NoReturn : ...
134
107
@overload
135
108
def handle_import_error (self , result : Result , error : Exception , raise_errors : Literal [False ] = ...) -> None : ...
136
- @overload
137
- @deprecated ("raise_errors argument is deprecated and will be removed in a future release." )
138
- def import_row (
139
- self ,
140
- row : dict [str , Any ],
141
- instance_loader : BaseInstanceLoader ,
142
- using_transactions : bool = True ,
143
- dry_run : bool = False ,
144
- * ,
145
- raise_errors : bool ,
146
- ** kwargs : Any ,
147
- ) -> RowResult : ...
148
- @overload
149
- def import_row (
150
- self ,
151
- row : dict [str , Any ],
152
- instance_loader : BaseInstanceLoader ,
153
- using_transactions : bool = True ,
154
- dry_run : bool = False ,
155
- raise_errors : None = None ,
156
- ** kwargs : Any ,
157
- ) -> RowResult : ...
109
+ def import_row (self , row : dict [str , Any ], instance_loader : BaseInstanceLoader , ** kwargs : Any ) -> RowResult : ...
158
110
def import_data (
159
111
self ,
160
112
dataset : Dataset ,
@@ -165,44 +117,28 @@ class Resource(Generic[_ModelT], metaclass=DeclarativeMetaclass):
165
117
rollback_on_validation_errors : bool = False ,
166
118
** kwargs : Any ,
167
119
) -> Result : ...
168
- @overload
169
- @deprecated ("rollback_on_validation_errors argument is deprecated and will be removed in a future release." )
170
120
def import_data_inner (
171
121
self ,
172
122
dataset : Dataset ,
173
123
dry_run : bool ,
174
124
raise_errors : bool ,
175
125
using_transactions : bool ,
176
126
collect_failed_rows : bool ,
177
- rollback_on_validation_errors : bool ,
178
- ** kwargs : Any ,
179
- ) -> Result : ...
180
- @overload
181
- def import_data_inner (
182
- self ,
183
- dataset : Dataset ,
184
- dry_run : bool ,
185
- raise_errors : bool ,
186
- using_transactions : bool ,
187
- collect_failed_rows : bool ,
188
- rollback_on_validation_errors : None = None ,
189
127
** kwargs : Any ,
190
128
) -> Result : ...
129
+ def get_import_order (self ) -> tuple [str , ...]: ...
191
130
def get_export_order (self ) -> tuple [str , ...]: ...
192
- def before_export (self , queryset : QuerySet [_ModelT ], * args : Any , * *kwargs : Any ) -> None : ...
193
- def after_export (self , queryset : QuerySet [_ModelT ], data : Dataset , * args : Any , ** kwargs : Any ) -> None : ...
194
- def filter_export (self , queryset : QuerySet [_ModelT ], * args : Any , * *kwargs : Any ) -> QuerySet [_ModelT ]: ...
195
- def export_field (self , field : Field , obj : _ModelT ) -> str : ...
196
- def get_export_fields (self ) -> list [Field ]: ...
197
- def export_resource (self , obj : _ModelT ) -> list [str ]: ...
198
- def get_export_headers (self ) -> list [str ]: ...
131
+ def before_export (self , queryset : QuerySet [_ModelT ], ** kwargs : Any ) -> None : ...
132
+ def after_export (self , queryset : QuerySet [_ModelT ], dataset : Dataset , ** kwargs : Any ) -> None : ...
133
+ def filter_export (self , queryset : QuerySet [_ModelT ], ** kwargs : Any ) -> QuerySet [_ModelT ]: ...
134
+ def export_field (self , field : Field , instance : _ModelT , ** kwargs : Any ) -> str : ...
135
+ def get_export_fields (self , selected_fields : Sequence [ str ] | None = None ) -> list [Field ]: ...
136
+ def export_resource (self , instance : _ModelT , selected_fields : Sequence [ str ] | None = None , ** kwargs : Any ) -> list [str ]: ...
137
+ def get_export_headers (self , selected_fields : Sequence [ str ] | None = None ) -> list [str ]: ...
199
138
def get_user_visible_headers (self ) -> list [str ]: ...
200
139
def get_user_visible_fields (self ) -> list [str ]: ...
201
140
def iter_queryset (self , queryset : QuerySet [_ModelT ]) -> Iterator [_ModelT ]: ...
202
- def export (self , * args : Any , queryset : QuerySet [_ModelT ] | None = None , ** kwargs : Any ) -> Dataset : ...
203
-
204
- class ModelDeclarativeMetaclass (DeclarativeMetaclass ):
205
- def __new__ (cls : type [_typeshed .Self ], name : str , bases : tuple [type [Any ], ...], attrs : dict [str , Any ]) -> _typeshed .Self : ...
141
+ def export (self , queryset : QuerySet [_ModelT ] | None = None , ** kwargs : Any ) -> Dataset : ...
206
142
207
143
class ModelResource (Resource [_ModelT ], metaclass = ModelDeclarativeMetaclass ):
208
144
DEFAULT_RESOURCE_FIELD : ClassVar [type [Field ]] = ...
@@ -214,12 +150,12 @@ class ModelResource(Resource[_ModelT], metaclass=ModelDeclarativeMetaclass):
214
150
@classmethod
215
151
def widget_from_django_field (cls , f : DjangoField [Any , Any ], default : type [Widget ] = ...) -> type [Widget ]: ...
216
152
@classmethod
217
- def widget_kwargs_for_field (self , field_name : str ) -> dict [str , Any ]: ...
153
+ def widget_kwargs_for_field (cls , field_name : str , django_field : DjangoField [ Any , Any ] ) -> dict [str , Any ]: ...
218
154
@classmethod
219
155
def field_from_django_field (cls , field_name : str , django_field : DjangoField [Any , Any ], readonly : bool ) -> Field : ...
220
156
def get_queryset (self ) -> QuerySet [_ModelT ]: ...
221
157
def init_instance (self , row : dict [str , Any ] | None = None ) -> _ModelT : ...
222
- def after_import (self , dataset : Dataset , result : Result , using_transactions : bool , dry_run : bool , ** kwargs : Any ) -> None : ...
158
+ def after_import (self , dataset : Dataset , result : Result , ** kwargs : Any ) -> None : ...
223
159
@classmethod
224
160
def get_display_name (cls ) -> str : ...
225
161
0 commit comments