Skip to content

Commit 7f35c10

Browse files
committed
Make gargoyle.register() usable as a decorator, and gargoyle.unregister() return whether it unregistered
Fixes disqus#75.
1 parent 677bdcc commit 7f35c10

File tree

4 files changed

+37
-8
lines changed

4 files changed

+37
-8
lines changed

HISTORY.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ Pending Release
88
---------------
99

1010
* New release notes here
11+
* Made ``gargoyle.register()`` usable as a decorator
12+
* Made ``gargoyle.unregister()`` return the boolean value of whether something
13+
was unregistered.
1114

1215
1.2.5 (2016-05-09)
1316
------------------

gargoyle/builtins.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def clean(self, value):
5858
return value
5959

6060

61+
@gargoyle.register
6162
class IPAddressConditionSet(RequestConditionSet):
6263
percent = Percent()
6364
ip_address = IPAddress(label='IP Address')
@@ -90,9 +91,8 @@ def _ip_to_int(self, ip):
9091
def get_group_label(self):
9192
return 'IP Address'
9293

93-
gargoyle.register(IPAddressConditionSet())
94-
9594

95+
@gargoyle.register
9696
class HostConditionSet(ConditionSet):
9797
hostname = String()
9898

@@ -108,5 +108,3 @@ def get_field_value(self, instance, field_name):
108108

109109
def get_group_label(self):
110110
return 'Host'
111-
112-
gargoyle.register(HostConditionSet())

gargoyle/manager.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,11 @@ def register(self, condition_set):
104104
"""
105105

106106
if callable(condition_set):
107-
condition_set = condition_set()
108-
self._registry[condition_set.get_id()] = condition_set
107+
registerable = condition_set()
108+
else:
109+
registerable = condition_set
110+
self._registry[registerable.get_id()] = registerable
111+
return condition_set
109112

110113
def unregister(self, condition_set):
111114
"""
@@ -114,8 +117,11 @@ def unregister(self, condition_set):
114117
>>> gargoyle.unregister(condition_set)
115118
"""
116119
if callable(condition_set):
117-
condition_set = condition_set()
118-
self._registry.pop(condition_set.get_id(), None)
120+
registerable = condition_set()
121+
else:
122+
registerable = condition_set
123+
popped = self._registry.pop(registerable.get_id(), None)
124+
return (popped is not None)
119125

120126
def get_condition_set_by_id(self, switch_id):
121127
"""

tests/testapp/test_api.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,28 @@ def setUp(self):
3030
self.gargoyle.register(UserConditionSet(User))
3131
self.gargoyle.register(IPAddressConditionSet())
3232

33+
def test_register_unregister_class(self):
34+
klass = IPAddressConditionSet
35+
registered = self.gargoyle.register(IPAddressConditionSet)
36+
assert registered is klass
37+
38+
unregistered = self.gargoyle.unregister(klass)
39+
assert unregistered
40+
41+
unregistered = self.gargoyle.unregister(klass)
42+
assert not unregistered
43+
44+
def test_register_unregister_instance(self):
45+
condition_set = IPAddressConditionSet()
46+
registered = self.gargoyle.register(condition_set)
47+
assert registered is condition_set
48+
49+
unregistered = self.gargoyle.unregister(condition_set)
50+
assert unregistered
51+
52+
unregistered = self.gargoyle.unregister(condition_set)
53+
assert not unregistered
54+
3355
def test_builtin_registration(self):
3456
assert 'gargoyle.builtins.UserConditionSet(auth.user)' in self.gargoyle._registry
3557
assert 'gargoyle.builtins.IPAddressConditionSet' in self.gargoyle._registry

0 commit comments

Comments
 (0)