Skip to content

Commit e5a6c25

Browse files
committed
Black codebase
1 parent d85de38 commit e5a6c25

File tree

4 files changed

+91
-77
lines changed

4 files changed

+91
-77
lines changed

fieldsignals/signals.py

+32-17
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
from django.dispatch import Signal
88

99

10-
__all__ = ('pre_save_changed', 'post_save_changed')
10+
__all__ = ("pre_save_changed", "post_save_changed")
1111

1212

13-
IMMUTABLE_TYPES_WHITELIST = tuple(
14-
[tuple, frozenset, float, str, int]
15-
)
13+
IMMUTABLE_TYPES_WHITELIST = tuple([tuple, frozenset, float, str, int])
1614

1715

1816
class ChangedSignal(Signal):
@@ -38,7 +36,7 @@ def connect(self, receiver, sender=None, fields=None, dispatch_uid=None, **kwarg
3836

3937
# Validate arguments
4038

41-
if kwargs.get('weak', False):
39+
if kwargs.get("weak", False):
4240
# TODO: weak refs? I'm hella confused.
4341
# We can't go passing our proxy receivers around as weak refs, since they're
4442
# defined as closures and hence don't exist by the time they're called.
@@ -62,21 +60,25 @@ def is_reverse_rel(f):
6260
if is_reverse_rel(f):
6361
raise ValueError(
6462
"django-fieldsignals doesn't handle reverse related fields "
65-
"({f.name} is a {f.__class__.__name__})"
66-
.format(f=f)
63+
"({f.name} is a {f.__class__.__name__})".format(f=f)
6764
)
6865

6966
if not fields:
7067
raise ValueError("fields must be non-empty")
7168

7269
proxy_receiver = self._make_proxy_receiver(receiver, sender, fields)
7370

74-
super(ChangedSignal, self).connect(proxy_receiver, sender=sender, weak=False, dispatch_uid=dispatch_uid)
71+
super(ChangedSignal, self).connect(
72+
proxy_receiver, sender=sender, weak=False, dispatch_uid=dispatch_uid
73+
)
7574

7675
### post_init : initialize the list of fields for each instance
7776
def post_init_closure(sender, instance, **kwargs):
7877
self.get_and_update_changed_fields(receiver, instance, fields)
79-
_signals.post_init.connect(post_init_closure, sender=sender, weak=False, dispatch_uid=(self, receiver))
78+
79+
_signals.post_init.connect(
80+
post_init_closure, sender=sender, weak=False, dispatch_uid=(self, receiver)
81+
)
8082
self.connect_source_signals(sender)
8183

8284
def connect_source_signals(self, sender):
@@ -95,10 +97,15 @@ def _make_proxy_receiver(self, receiver, sender, fields):
9597
to watch. The original receiver is called for an instance iff the value of
9698
at least one of the fields has changed since the last time it was called.
9799
"""
100+
98101
def pr(instance, *args, **kwargs):
99-
changed_fields = self.get_and_update_changed_fields(receiver, instance, fields)
102+
changed_fields = self.get_and_update_changed_fields(
103+
receiver, instance, fields
104+
)
100105
if changed_fields:
101-
receiver(instance=instance, changed_fields=changed_fields, *args, **kwargs)
106+
receiver(
107+
instance=instance, changed_fields=changed_fields, *args, **kwargs
108+
)
102109

103110
pr._original_receiver = receiver
104111
pr._fields = fields
@@ -123,7 +130,7 @@ def get_and_update_changed_fields(self, receiver, instance, fields):
123130
# (id(<signal instance>), id(<receiver>)) : {"field_name": "old value",},
124131
# }
125132
key = (id(self), id(receiver))
126-
if not hasattr(instance, '_fieldsignals_originals'):
133+
if not hasattr(instance, "_fieldsignals_originals"):
127134
instance._fieldsignals_originals = {}
128135
if key not in instance._fieldsignals_originals:
129136
instance._fieldsignals_originals[key] = {}
@@ -156,20 +163,28 @@ def _on_model_pre_save(self, sender, instance=None, **kwargs):
156163
return self.send(sender, instance=instance)
157164

158165
def connect_source_signals(self, sender):
159-
_signals.pre_save.connect(self._on_model_pre_save, sender=sender, dispatch_uid=id(self))
166+
_signals.pre_save.connect(
167+
self._on_model_pre_save, sender=sender, dispatch_uid=id(self)
168+
)
160169

161170

162171
class PostSaveChangedSignal(ChangedSignal):
163-
def _on_model_post_save(self, sender, instance=None, created=None, using=None, **kwargs):
172+
def _on_model_post_save(
173+
self, sender, instance=None, created=None, using=None, **kwargs
174+
):
164175
return self.send(sender, instance=instance, created=created, using=using)
165176

166177
def connect_source_signals(self, sender):
167-
_signals.post_save.connect(self._on_model_post_save, sender=sender, dispatch_uid=id(self))
178+
_signals.post_save.connect(
179+
self._on_model_post_save, sender=sender, dispatch_uid=id(self)
180+
)
168181

169182

170183
### API:
171184

172185
pre_save_changed = PreSaveChangedSignal(providing_args=["instance", "changed_fields"])
173-
post_save_changed = PostSaveChangedSignal(providing_args=["instance", "changed_fields", "created", "using"])
186+
post_save_changed = PostSaveChangedSignal(
187+
providing_args=["instance", "changed_fields", "created", "using"]
188+
)
174189

175-
#TODO other signals?
190+
# TODO other signals?

fieldsignals/tests/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
import os
22
from .test_signals import *
3-

fieldsignals/tests/test_signals.py

+37-37
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313

1414
from fieldsignals.signals import post_save_changed, pre_save_changed
1515

16-
_field = namedtuple('field', ['name'])
16+
_field = namedtuple("field", ["name"])
1717

1818

1919
@contextmanager
2020
def must_be_called(must=True):
21-
x = {'called': False}
21+
x = {"called": False}
2222

2323
def func(*args, **kwargs):
24-
x['called'] = True
24+
x["called"] = True
2525
func.args = args
2626
func.kwargs = kwargs
2727

@@ -30,9 +30,9 @@ def func(*args, **kwargs):
3030

3131
yield func
3232

33-
if x['called'] and not must:
33+
if x["called"] and not must:
3434
raise AssertionError("Function was called, shouldn't have been")
35-
elif must and not x['called']:
35+
elif must and not x["called"]:
3636
raise AssertionError("Function wasn't called, should have been")
3737

3838

@@ -70,19 +70,19 @@ def to_python(self, value):
7070

7171

7272
class FakeModel(object):
73-
a_key = 'a value'
74-
another = 'something else'
73+
a_key = "a value"
74+
another = "something else"
7575
m2m = []
7676
a_datetime = None
7777

7878
class _meta(object):
7979
@staticmethod
8080
def get_fields():
8181
return [
82-
Field('a_key'),
83-
Field('another'),
84-
Field('m2m', m2m=True),
85-
DateTimeField('a_datetime'),
82+
Field("a_key"),
83+
Field("another"),
84+
Field("m2m", m2m=True),
85+
DateTimeField("a_datetime"),
8686
]
8787

8888
def get_deferred_fields(self):
@@ -96,12 +96,12 @@ class _meta(object):
9696
@staticmethod
9797
def get_fields():
9898
return [
99-
Field('a'),
100-
Field('b'),
99+
Field("a"),
100+
Field("b"),
101101
]
102102

103103
def get_deferred_fields(self):
104-
return {'b'}
104+
return {"b"}
105105

106106

107107
class MockOneToOneRel(OneToOneRel):
@@ -112,13 +112,13 @@ def __init__(self, name):
112112

113113

114114
class FakeModelWithOneToOne(object):
115-
f = 'a value'
115+
f = "a value"
116116
o2o = 1
117117

118118
class _meta(object):
119119
@staticmethod
120120
def get_fields():
121-
return [Field('f'), MockOneToOneRel('o2o')]
121+
return [Field("f"), MockOneToOneRel("o2o")]
122122

123123

124124
class TestGeneral(object):
@@ -129,13 +129,13 @@ def ready(self):
129129
def test_m2m_fields_error(self):
130130
with must_be_called(False) as func:
131131
with pytest.raises(ValueError):
132-
post_save_changed.connect(func, sender=FakeModel, fields=('m2m',))
132+
post_save_changed.connect(func, sender=FakeModel, fields=("m2m",))
133133

134134
def test_one_to_one_rel_field_error(self):
135135
with must_be_called(False) as func:
136136
with pytest.raises(ValueError):
137137
post_save_changed.connect(
138-
func, sender=FakeModelWithOneToOne, fields=('o2o', 'f')
138+
func, sender=FakeModelWithOneToOne, fields=("o2o", "f")
139139
)
140140

141141
def test_one_to_one_rel_excluded(self):
@@ -153,10 +153,10 @@ def test_compare_after_to_python(self):
153153
Ensures that to_python() is called prior to comparison between old & new values.
154154
"""
155155
with must_be_called(False) as func:
156-
pre_save_changed.connect(func, sender=FakeModel, fields=('a_datetime',))
156+
pre_save_changed.connect(func, sender=FakeModel, fields=("a_datetime",))
157157

158158
obj = FakeModel()
159-
obj.a_datetime = '2017-01-01T00:00:00.000000Z'
159+
obj.a_datetime = "2017-01-01T00:00:00.000000Z"
160160
post_init.send(instance=obj, sender=FakeModel)
161161

162162
# This is identical to the above, even though the type is different,
@@ -170,7 +170,7 @@ def test_deferred_fields(self):
170170
obj = DeferredModel()
171171
post_init.send(instance=obj, sender=DeferredModel)
172172

173-
assert list(obj._fieldsignals_originals.values()) == [{'a': 1}]
173+
assert list(obj._fieldsignals_originals.values()) == [{"a": 1}]
174174

175175

176176
class TestPostSave(object):
@@ -194,31 +194,31 @@ def test_post_save_changed(self):
194194
obj = FakeModel()
195195
post_init.send(instance=obj, sender=FakeModel)
196196

197-
obj.a_key = 'another value'
197+
obj.a_key = "another value"
198198
post_save.send(instance=obj, sender=FakeModel)
199-
assert func.kwargs['changed_fields'] == {'a_key': ('a value', 'another value')}
199+
assert func.kwargs["changed_fields"] == {"a_key": ("a value", "another value")}
200200

201201
def test_post_save_with_fields_changed(self):
202202
with must_be_called(True) as func:
203-
post_save_changed.connect(func, sender=FakeModel, fields=('a_key',))
203+
post_save_changed.connect(func, sender=FakeModel, fields=("a_key",))
204204

205205
obj = FakeModel()
206206
post_init.send(instance=obj, sender=FakeModel)
207207

208-
obj.a_key = 'change a field that we care about'
208+
obj.a_key = "change a field that we care about"
209209
post_save.send(instance=obj, sender=FakeModel)
210-
assert func.kwargs['changed_fields'] == {
211-
'a_key': ('a value', 'change a field that we care about')
210+
assert func.kwargs["changed_fields"] == {
211+
"a_key": ("a value", "change a field that we care about")
212212
}
213213

214214
def test_post_save_with_fields_unchanged(self):
215215
with must_be_called(False) as func:
216-
post_save_changed.connect(func, sender=FakeModel, fields=('a_key',))
216+
post_save_changed.connect(func, sender=FakeModel, fields=("a_key",))
217217

218218
obj = FakeModel()
219219
post_init.send(instance=obj, sender=FakeModel)
220220

221-
obj.another = 'dont care about this field'
221+
obj.another = "dont care about this field"
222222
post_save.send(instance=obj, sender=FakeModel)
223223

224224

@@ -247,30 +247,30 @@ def test_pre_save_changed(self):
247247
# post_init sets list of initial values
248248
post_init.send(instance=obj, sender=FakeModel)
249249

250-
obj.a_key = 'another value'
250+
obj.a_key = "another value"
251251
pre_save.send(instance=obj, sender=FakeModel)
252252

253-
assert func.kwargs['changed_fields'] == {'a_key': ('a value', 'another value')}
253+
assert func.kwargs["changed_fields"] == {"a_key": ("a value", "another value")}
254254

255255
def test_pre_save_with_fields_changed(self):
256256
with must_be_called(True) as func:
257-
pre_save_changed.connect(func, sender=FakeModel, fields=('a_key',))
257+
pre_save_changed.connect(func, sender=FakeModel, fields=("a_key",))
258258

259259
obj = FakeModel()
260260
post_init.send(instance=obj, sender=FakeModel)
261261

262-
obj.a_key = 'change a field that we care about'
262+
obj.a_key = "change a field that we care about"
263263
pre_save.send(instance=obj, sender=FakeModel)
264-
assert func.kwargs['changed_fields'] == {
265-
'a_key': ('a value', 'change a field that we care about')
264+
assert func.kwargs["changed_fields"] == {
265+
"a_key": ("a value", "change a field that we care about")
266266
}
267267

268268
def test_pre_save_with_fields_unchanged(self):
269269
with must_be_called(False) as func:
270-
pre_save_changed.connect(func, sender=FakeModel, fields=('a_key',))
270+
pre_save_changed.connect(func, sender=FakeModel, fields=("a_key",))
271271

272272
obj = FakeModel()
273273
post_init.send(instance=obj, sender=FakeModel)
274274

275-
obj.another = 'dont care about this field'
275+
obj.another = "dont care about this field"
276276
pre_save.send(instance=obj, sender=FakeModel)

setup.py

+22-22
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,36 @@
22
from setuptools import setup
33

44
try:
5-
README = open(os.path.join(os.path.dirname(__file__), 'README.md')).read()
5+
README = open(os.path.join(os.path.dirname(__file__), "README.md")).read()
66
except:
7-
README = ''
7+
README = ""
88

99
# allow setup.py to be run from any path
1010
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
1111

1212
setup(
13-
name='django-fieldsignals',
14-
version='0.5.0',
15-
packages=['fieldsignals', 'fieldsignals.tests'],
13+
name="django-fieldsignals",
14+
version="0.5.0",
15+
packages=["fieldsignals", "fieldsignals.tests"],
1616
include_package_data=True,
17-
test_suite='fieldsignals.tests.test_signals',
18-
description='Django fieldsignals simply makes it easy to tell when the fields on your model have changed.',
17+
test_suite="fieldsignals.tests.test_signals",
18+
description="Django fieldsignals simply makes it easy to tell when the fields on your model have changed.",
1919
long_description=README,
20-
long_description_content_type='text/markdown',
21-
url='https://github.com/craigds/django-fieldsignals',
22-
author='Craig de Stigter',
23-
author_email='[email protected]',
20+
long_description_content_type="text/markdown",
21+
url="https://github.com/craigds/django-fieldsignals",
22+
author="Craig de Stigter",
23+
author_email="[email protected]",
2424
classifiers=[
25-
'Environment :: Web Environment',
26-
'Framework :: Django',
27-
'Intended Audience :: Developers',
28-
'Operating System :: OS Independent',
29-
'Programming Language :: Python',
30-
'Programming Language :: Python :: 3',
31-
'Programming Language :: Python :: 3.6',
32-
'Programming Language :: Python :: 3.7',
33-
'Programming Language :: Python :: 3.8',
34-
'Topic :: Internet :: WWW/HTTP',
35-
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
25+
"Environment :: Web Environment",
26+
"Framework :: Django",
27+
"Intended Audience :: Developers",
28+
"Operating System :: OS Independent",
29+
"Programming Language :: Python",
30+
"Programming Language :: Python :: 3",
31+
"Programming Language :: Python :: 3.6",
32+
"Programming Language :: Python :: 3.7",
33+
"Programming Language :: Python :: 3.8",
34+
"Topic :: Internet :: WWW/HTTP",
35+
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
3636
],
3737
)

0 commit comments

Comments
 (0)