Skip to content

Commit

Permalink
Use literals to create lists and dicts (#1881)
Browse files Browse the repository at this point in the history
They’re clearer and a little bit faster, per [rule C408 in flake8-comprehensions](https://github.com/adamchainz/flake8-comprehensions?tab=readme-ov-file#c408-unnecessary-dictlisttuple-call---rewrite-as-a-literal) (which I’d be happy to add to the setup, if you want).
  • Loading branch information
adamchainz committed Jun 19, 2024
1 parent e2f8b0f commit 5595178
Show file tree
Hide file tree
Showing 14 changed files with 32 additions and 32 deletions.
2 changes: 2 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ repos:
rev: 6.1.0
hooks:
- id: flake8
additional_dependencies:
- flake8-comprehensions==3.14.0
6 changes: 3 additions & 3 deletions import_export/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ def import_action(self, request, **kwargs):

import_formats = self.get_import_formats()
import_form = self.create_import_form(request)
resources = list()
resources = []
if request.POST and import_form.is_valid():
input_format = import_formats[int(import_form.cleaned_data["format"])]()
if not input_format.is_binary():
Expand Down Expand Up @@ -556,9 +556,9 @@ def _log_actions(self, result, request):
"""
Create appropriate LogEntry instances for the result.
"""
rows = dict()
rows = {}
for row in result:
rows.setdefault(row.import_type, list())
rows.setdefault(row.import_type, [])
rows[row.import_type].append(row.instance)

self._create_log_entries(request.user.pk, rows)
Expand Down
2 changes: 1 addition & 1 deletion import_export/declarative.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def __new__(cls, name, bases, attrs):
# class.
# if 'fields' property is defined, declared fields can only be included
# if they appear in the 'fields' iterable.
declared_fields = dict()
declared_fields = {}
for field_name, field in new_class.fields.items():
column_name = field.column_name
if (
Expand Down
8 changes: 4 additions & 4 deletions import_export/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def _init_selectable_fields(self, resources: Iterable[ModelResource]) -> None:
"""
self.resources = resources
self.is_selectable_fields_form = True
self.resource_fields = {resource.__name__: list() for resource in resources}
self.resource_fields = {resource.__name__: [] for resource in resources}

for index, resource in enumerate(resources):
boolean_fields = self._create_boolean_fields(resource, index)
Expand All @@ -130,7 +130,7 @@ def _init_selectable_fields(self, resources: Iterable[ModelResource]) -> None:
ordered_fields = [
"resource",
# flatten resource fields lists
*chain(*[fields for fields in self.resource_fields.values()]),
*chain(*self.resource_fields.values()),
]
self.order_fields(ordered_fields)

Expand Down Expand Up @@ -262,9 +262,9 @@ def _validate_any_field_selected(self, resource) -> None:
"""
Validate if any field for resource was selected in form data
"""
resource_fields = [field for field in resource().get_export_order()]
resource_fields = list(resource().get_export_order())

if not any([v for k, v in self.cleaned_data.items() if k in resource_fields]):
if not any(v for k, v in self.cleaned_data.items() if k in resource_fields):
raise forms.ValidationError(
_("""Select at least 1 field for "%(resource_name)s" to export"""),
code="invalid",
Expand Down
18 changes: 8 additions & 10 deletions import_export/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ def __init__(self, **kwargs):
self.fields = deepcopy(self.fields)

# lists to hold model instances in memory when bulk operations are enabled
self.create_instances = list()
self.update_instances = list()
self.delete_instances = list()
self.create_instances = []
self.update_instances = []
self.delete_instances = []

@classmethod
def get_result_class(self):
Expand Down Expand Up @@ -578,9 +578,7 @@ def skip_row(self, instance, original,
# have not been written to the 'instance' at this point
instance_values = list(field.clean(row))
original_values = (
list()
if original.pk is None
else list(field.get_value(original).all())
[] if original.pk is None else list(field.get_value(original).all())
)
if len(instance_values) != len(original_values):
return False
Expand Down Expand Up @@ -1123,7 +1121,7 @@ def _get_ordered_field_names(self, order_field):
# get any defined fields
defined_fields = order_fields + tuple(getattr(self._meta, "fields") or ())

order = list()
order = []
[order.append(f) for f in defined_fields if f not in order]
declared_fields = []
for field_name, field in self.fields.items():
Expand All @@ -1145,9 +1143,9 @@ def _check_import_id_fields(self, headers):
There are conditions, such as 'dynamic fields' where this does not apply.
See issue 1834 for more information.
"""
import_id_fields = list()
missing_fields = list()
missing_headers = list()
import_id_fields = []
missing_fields = []
missing_headers = []

if self.get_import_id_fields() == ["id"]:
# this is the default case, so ok if not present
Expand Down
2 changes: 1 addition & 1 deletion import_export/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def append_base_error(self, error):
self.base_errors.append(error)

def add_dataset_headers(self, headers):
headers = list() if not headers else headers
headers = [] if not headers else headers
self.failed_dataset.headers = headers + ["Error"]

def append_failed_row(self, row, error):
Expand Down
2 changes: 1 addition & 1 deletion tests/core/tests/admin_integration/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def _do_import_post(
)
with open(filename, "rb") as f:
if data is None:
data = dict()
data = {}
data.update(
{
"format": str(input_format),
Expand Down
12 changes: 6 additions & 6 deletions tests/core/tests/admin_integration/test_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ def get_data_for_export(self, request, queryset, **kwargs):
return dataset

def get_export_queryset(self, request):
return list()
return []

def get_export_filename(self, request, queryset, file_format):
return "f"
Expand All @@ -432,15 +432,15 @@ def setUp(self):
def test_to_encoding_not_set_default_encoding_is_utf8(self):
self.export_mixin = self.TestMixin(test_str="teststr")
data = self.export_mixin.get_export_data(
self.file_format, self.mock_request, list()
self.file_format, self.mock_request, []
)
csv_dataset = tablib.import_set(data)
self.assertEqual("teststr", csv_dataset.dict[0]["name"])

def test_to_encoding_set(self):
self.export_mixin = self.TestMixin(test_str="ハローワールド")
data = self.export_mixin.get_export_data(
self.file_format, self.mock_request, list(), encoding="shift-jis"
self.file_format, self.mock_request, [], encoding="shift-jis"
)
encoding = chardet.detect(bytes(data))["encoding"]
self.assertEqual("SHIFT_JIS", encoding)
Expand All @@ -451,7 +451,7 @@ def test_to_encoding_set_incorrect(self):
self.export_mixin.get_export_data(
self.file_format,
self.mock_request,
list(),
[],
encoding="bad-encoding",
)

Expand All @@ -462,7 +462,7 @@ def test_to_encoding_not_set_for_binary_file(self):
data = self.export_mixin.get_export_data(
self.file_format,
self.mock_request,
list(),
[],
)
binary_dataset = tablib.import_set(data)
self.assertEqual("teststr", binary_dataset.dict[0]["name"])
Expand All @@ -487,7 +487,7 @@ def get_export_filename(self, request, queryset, file_format):
with mock.patch(
"import_export.admin.ExportMixin.get_export_data"
) as mock_get_export_data:
self.export_mixin.export_admin_action(self.mock_request, list())
self.export_mixin.export_admin_action(self.mock_request, [])
encoding_kwarg = mock_get_export_data.call_args_list[0][1]["encoding"]
self.assertEqual("utf-8", encoding_kwarg)

Expand Down
2 changes: 1 addition & 1 deletion tests/core/tests/admin_integration/test_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ def test_get_import_data_kwargs_with_no_form_kwarg_returns_kwarg_dict(self):

def test_get_context_data_returns_empty_dict(self):
m = ExportMixin()
self.assertEqual(dict(), m.get_context_data())
self.assertEqual({}, m.get_context_data())

@patch("import_export.admin.logger")
def test_issue_1521_change_list_template_as_property(self, mock_logger):
Expand Down
2 changes: 1 addition & 1 deletion tests/core/tests/test_mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

class ExportViewMixinTest(TestCase):
class TestExportForm(forms.ExportForm):
cleaned_data = dict()
cleaned_data = {}

def setUp(self):
self.url = reverse("export-category")
Expand Down
2 changes: 1 addition & 1 deletion tests/core/tests/test_resources/test_import_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def test_after_import_row_check_for_change(self):
class ImportExportFieldOrderTest(TestCase):
class BaseBookResource(resources.ModelResource):
def __init__(self):
self.field_names = list()
self.field_names = []

def get_queryset(self):
return Book.objects.all().order_by("id")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def before_export(self, queryset, **kwargs):
# when queryset is supplied, it should be passed to before_export()
self.resource.export(queryset=Book.objects.all(), **{"a": 1})
self.assertEqual(Book.objects.count(), len(self.resource.qs))
self.assertEqual(dict(a=1), self.resource.kwargs_)
self.assertEqual({"a": 1}, self.resource.kwargs_)

def test_export_declared_field(self):
# test that declared fields with no attribute return empty value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_validate_instance_called_with_import_validation_errors_as_None(
book = Book()
self.my_resource._meta.clean_model_instances = True
self.my_resource.validate_instance(book)
target = dict()
target = {}
full_clean_mock.assert_called_once_with(
exclude=target.keys(), validate_unique=True
)
2 changes: 1 addition & 1 deletion tests/core/tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ def test_clean_none(self):

def test_render_none(self):
self.assertEqual(self.widget.render(None), None)
self.assertEqual(self.widget.render(dict()), None)
self.assertEqual(self.widget.render({}), None)
self.assertEqual(self.widget.render({"value": None}), '{"value": null}')


Expand Down

0 comments on commit 5595178

Please sign in to comment.