mirror of
https://github.com/django/django.git
synced 2025-06-04 02:59:13 +00:00
Fixed #36383 -- Improved migration serialization for functools.partial objects.
This commit is contained in:
parent
57fdc104d2
commit
6e36f7f784
@ -207,23 +207,11 @@ class FunctionTypeSerializer(BaseSerializer):
|
||||
|
||||
class FunctoolsPartialSerializer(BaseSerializer):
|
||||
def serialize(self):
|
||||
# Serialize functools.partial() arguments
|
||||
func_string, func_imports = serializer_factory(self.value.func).serialize()
|
||||
args_string, args_imports = serializer_factory(self.value.args).serialize()
|
||||
keywords_string, keywords_imports = serializer_factory(
|
||||
self.value.keywords
|
||||
).serialize()
|
||||
# Add any imports needed by arguments
|
||||
imports = {"import functools", *func_imports, *args_imports, *keywords_imports}
|
||||
return (
|
||||
"functools.%s(%s, *%s, **%s)"
|
||||
% (
|
||||
self.value.__class__.__name__,
|
||||
func_string,
|
||||
args_string,
|
||||
keywords_string,
|
||||
),
|
||||
imports,
|
||||
partial_name = self.value.__class__.__name__
|
||||
return DeconstructibleSerializer.serialize_deconstructed(
|
||||
f"functools.{partial_name}",
|
||||
(self.value.func, *self.value.args),
|
||||
self.value.keywords,
|
||||
)
|
||||
|
||||
|
||||
|
@ -911,7 +911,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partial(datetime.timedelta, *(), **{})",
|
||||
"functools.partial(datetime.timedelta)",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
|
||||
@ -920,7 +920,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partial(datetime.timedelta, *(1,), **{})",
|
||||
"functools.partial(datetime.timedelta, 1)",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
|
||||
@ -929,7 +929,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partial(datetime.timedelta, *(), **{'seconds': 2})",
|
||||
"functools.partial(datetime.timedelta, seconds=2)",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
|
||||
@ -938,7 +938,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partial(datetime.timedelta, *(1,), **{'seconds': 2})",
|
||||
"functools.partial(datetime.timedelta, 1, seconds=2)",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
|
||||
@ -947,7 +947,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partial(datetime.timedelta, *(), **{'kebab-case': 1})",
|
||||
"functools.partial(datetime.timedelta, **{'kebab-case': 1})",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
|
||||
@ -956,7 +956,7 @@ class WriterTests(SimpleTestCase):
|
||||
string, imports = MigrationWriter.serialize(value)
|
||||
result = self.assertSerializedFunctoolsPartialEqual(
|
||||
value,
|
||||
"functools.partialmethod(datetime.timedelta, *(1,), **{'seconds': 2})",
|
||||
"functools.partialmethod(datetime.timedelta, 1, seconds=2)",
|
||||
{"import datetime", "import functools"},
|
||||
)
|
||||
self.assertIsInstance(result, functools.partialmethod)
|
||||
|
Loading…
x
Reference in New Issue
Block a user