Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5b1c389

Browse files
sir-sigurdtimgraham
authored andcommitted
Refs #23919 -- Replaced usage of django.utils.functional.curry() with functools.partial()/partialmethod().
1 parent 34f27f9 commit 5b1c389

8 files changed

Lines changed: 32 additions & 30 deletions

File tree

django/db/models/base.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import copy
22
import inspect
33
import warnings
4+
from functools import partialmethod
45
from itertools import chain
56

67
from django.apps import apps
@@ -27,7 +28,6 @@
2728
)
2829
from django.db.models.utils import make_model_tuple
2930
from django.utils.encoding import force_text
30-
from django.utils.functional import curry
3131
from django.utils.text import capfirst, get_text_list
3232
from django.utils.translation import gettext_lazy as _
3333
from django.utils.version import get_version
@@ -328,8 +328,8 @@ def _prepare(cls):
328328
opts._prepare(cls)
329329

330330
if opts.order_with_respect_to:
331-
cls.get_next_in_order = curry(cls._get_next_or_previous_in_order, is_next=True)
332-
cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False)
331+
cls.get_next_in_order = partialmethod(cls._get_next_or_previous_in_order, is_next=True)
332+
cls.get_previous_in_order = partialmethod(cls._get_next_or_previous_in_order, is_next=False)
333333

334334
# Defer creating accessors on the foreign class until it has been
335335
# created and registered. If remote_field is None, we're ordering
@@ -1670,7 +1670,7 @@ def _check_long_column_names(cls):
16701670

16711671
# ORDERING METHODS #########################
16721672

1673-
def method_set_order(ordered_obj, self, id_list, using=None):
1673+
def method_set_order(self, ordered_obj, id_list, using=None):
16741674
if using is None:
16751675
using = DEFAULT_DB_ALIAS
16761676
order_wrt = ordered_obj._meta.order_with_respect_to
@@ -1682,7 +1682,7 @@ def method_set_order(ordered_obj, self, id_list, using=None):
16821682
ordered_obj.objects.filter(pk=j, **filter_args).update(_order=i)
16831683

16841684

1685-
def method_get_order(ordered_obj, self):
1685+
def method_get_order(self, ordered_obj):
16861686
order_wrt = ordered_obj._meta.order_with_respect_to
16871687
filter_args = order_wrt.get_forward_related_filter(self)
16881688
pk_name = ordered_obj._meta.pk.name
@@ -1693,12 +1693,12 @@ def make_foreign_order_accessors(model, related_model):
16931693
setattr(
16941694
related_model,
16951695
'get_%s_order' % model.__name__.lower(),
1696-
curry(method_get_order, model)
1696+
partialmethod(method_get_order, model)
16971697
)
16981698
setattr(
16991699
related_model,
17001700
'set_%s_order' % model.__name__.lower(),
1701-
curry(method_set_order, model)
1701+
partialmethod(method_set_order, model)
17021702
)
17031703

17041704
########

django/db/models/fields/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import uuid
77
import warnings
88
from base64 import b64decode, b64encode
9-
from functools import total_ordering
9+
from functools import partialmethod, total_ordering
1010

1111
from django import forms
1212
from django.apps import apps
@@ -26,7 +26,7 @@
2626
)
2727
from django.utils.duration import duration_string
2828
from django.utils.encoding import force_bytes, smart_text
29-
from django.utils.functional import Promise, cached_property, curry
29+
from django.utils.functional import Promise, cached_property
3030
from django.utils.ipv6 import clean_ipv6_address
3131
from django.utils.itercompat import is_iterable
3232
from django.utils.text import capfirst
@@ -717,7 +717,7 @@ def contribute_to_class(self, cls, name, private_only=False):
717717
setattr(cls, self.attname, DeferredAttribute(self.attname, cls))
718718
if self.choices:
719719
setattr(cls, 'get_%s_display' % self.name,
720-
curry(cls._get_FIELD_display, field=self))
720+
partialmethod(cls._get_FIELD_display, field=self))
721721

722722
def get_filter_kwargs_for_object(self, obj):
723723
"""
@@ -1254,11 +1254,11 @@ def contribute_to_class(self, cls, name, **kwargs):
12541254
if not self.null:
12551255
setattr(
12561256
cls, 'get_next_by_%s' % self.name,
1257-
curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=True)
1257+
partialmethod(cls._get_next_or_previous_by_FIELD, field=self, is_next=True)
12581258
)
12591259
setattr(
12601260
cls, 'get_previous_by_%s' % self.name,
1261-
curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False)
1261+
partialmethod(cls._get_next_or_previous_by_FIELD, field=self, is_next=False)
12621262
)
12631263

12641264
def get_prep_value(self, value):

django/db/models/fields/related.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from django.db.models.deletion import CASCADE, SET_DEFAULT, SET_NULL
1313
from django.db.models.query_utils import PathInfo
1414
from django.db.models.utils import make_model_tuple
15-
from django.utils.functional import cached_property, curry
15+
from django.utils.functional import cached_property
1616
from django.utils.translation import gettext_lazy as _
1717

1818
from . import Field
@@ -1567,7 +1567,7 @@ def resolve_through_model(_, model, field):
15671567
setattr(cls, self.name, ManyToManyDescriptor(self.remote_field, reverse=False))
15681568

15691569
# Set up the accessor for the m2m table name for the relation.
1570-
self.m2m_db_table = curry(self._get_m2m_db_table, cls._meta)
1570+
self.m2m_db_table = partial(self._get_m2m_db_table, cls._meta)
15711571

15721572
def contribute_to_related_class(self, cls, related):
15731573
# Internal M2Ms (i.e., those with a related name ending with '+')
@@ -1576,15 +1576,15 @@ def contribute_to_related_class(self, cls, related):
15761576
setattr(cls, related.get_accessor_name(), ManyToManyDescriptor(self.remote_field, reverse=True))
15771577

15781578
# Set up the accessors for the column names on the m2m table.
1579-
self.m2m_column_name = curry(self._get_m2m_attr, related, 'column')
1580-
self.m2m_reverse_name = curry(self._get_m2m_reverse_attr, related, 'column')
1579+
self.m2m_column_name = partial(self._get_m2m_attr, related, 'column')
1580+
self.m2m_reverse_name = partial(self._get_m2m_reverse_attr, related, 'column')
15811581

1582-
self.m2m_field_name = curry(self._get_m2m_attr, related, 'name')
1583-
self.m2m_reverse_field_name = curry(self._get_m2m_reverse_attr, related, 'name')
1582+
self.m2m_field_name = partial(self._get_m2m_attr, related, 'name')
1583+
self.m2m_reverse_field_name = partial(self._get_m2m_reverse_attr, related, 'name')
15841584

1585-
get_m2m_rel = curry(self._get_m2m_attr, related, 'remote_field')
1585+
get_m2m_rel = partial(self._get_m2m_attr, related, 'remote_field')
15861586
self.m2m_target_field_name = lambda: get_m2m_rel().field_name
1587-
get_m2m_reverse_rel = curry(self._get_m2m_reverse_attr, related, 'remote_field')
1587+
get_m2m_reverse_rel = partial(self._get_m2m_reverse_attr, related, 'remote_field')
15881588
self.m2m_reverse_target_field_name = lambda: get_m2m_reverse_rel().field_name
15891589

15901590
def set_attributes_from_rel(self):

django/test/client.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import re
55
import sys
66
from copy import copy
7+
from functools import partial
78
from importlib import import_module
89
from io import BytesIO
910
from urllib.parse import unquote_to_bytes, urljoin, urlparse, urlsplit
@@ -21,7 +22,7 @@
2122
from django.test.utils import ContextList
2223
from django.urls import resolve
2324
from django.utils.encoding import force_bytes
24-
from django.utils.functional import SimpleLazyObject, curry
25+
from django.utils.functional import SimpleLazyObject
2526
from django.utils.http import urlencode
2627
from django.utils.itercompat import is_iterable
2728

@@ -455,7 +456,7 @@ def request(self, **request):
455456
# Curry a data dictionary into an instance of the template renderer
456457
# callback function.
457458
data = {}
458-
on_template_render = curry(store_rendered_templates, data)
459+
on_template_render = partial(store_rendered_templates, data)
459460
signal_uid = "template-render-%s" % id(request)
460461
signals.template_rendered.connect(on_template_render, dispatch_uid=signal_uid)
461462
# Capture exceptions created by the handler.
@@ -491,7 +492,7 @@ def request(self, **request):
491492
response.templates = data.get("templates", [])
492493
response.context = data.get("context")
493494

494-
response.json = curry(self._parse_json, response)
495+
response.json = partial(self._parse_json, response)
495496

496497
# Attach the ResolverMatch instance to the response
497498
response.resolver_match = SimpleLazyObject(lambda: resolve(request['PATH_INFO']))

tests/schema/fields.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
from functools import partial
2+
13
from django.db import models
24
from django.db.models.fields.related import (
35
RECURSIVE_RELATIONSHIP_CONSTANT, ManyToManyDescriptor, ManyToManyField,
46
ManyToManyRel, RelatedField, create_many_to_many_intermediary_model,
57
)
6-
from django.utils.functional import curry
78

89

910
class CustomManyToManyField(RelatedField):
@@ -43,7 +44,7 @@ def contribute_to_class(self, cls, name, **kwargs):
4344
if not self.remote_field.through and not cls._meta.abstract and not cls._meta.swapped:
4445
self.remote_field.through = create_many_to_many_intermediary_model(self, cls)
4546
setattr(cls, self.name, ManyToManyDescriptor(self.remote_field))
46-
self.m2m_db_table = curry(self._get_m2m_db_table, cls._meta)
47+
self.m2m_db_table = partial(self._get_m2m_db_table, cls._meta)
4748

4849
def get_internal_type(self):
4950
return 'ManyToManyField'

tests/serializers/test_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ class SerializerDataTests(TestCase):
390390
pass
391391

392392

393-
def serializerTest(format, self):
393+
def serializerTest(self, format):
394394

395395
# Create all the objects defined in the test data
396396
objects = []

tests/serializers/test_natural.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class NaturalKeySerializerTests(TestCase):
1010
pass
1111

1212

13-
def natural_key_serializer_test(format, self):
13+
def natural_key_serializer_test(self, format):
1414
# Create all the objects defined in the test data
1515
with connection.constraint_checks_disabled():
1616
objects = [
@@ -36,7 +36,7 @@ def natural_key_serializer_test(format, self):
3636
)
3737

3838

39-
def natural_key_test(format, self):
39+
def natural_key_test(self, format):
4040
book1 = {
4141
'data': '978-1590597255',
4242
'title': 'The Definitive Guide to Django: Web Development Done Right',

tests/serializers/tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
from functools import partialmethod
23
from io import StringIO
34
from unittest import mock
45

@@ -9,7 +10,6 @@
910
from django.http import HttpResponse
1011
from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
1112
from django.test.utils import Approximate
12-
from django.utils.functional import curry
1313

1414
from .models import (
1515
Actor, Article, Author, AuthorProfile, BaseModel, Category, ComplexModel,
@@ -405,4 +405,4 @@ def register_tests(test_class, method_name, test_func, exclude=None):
405405
(exclude is None or f not in exclude))
406406
]
407407
for format_ in formats:
408-
setattr(test_class, method_name % format_, curry(test_func, format_))
408+
setattr(test_class, method_name % format_, partialmethod(test_func, format_))

0 commit comments

Comments
 (0)