summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-12-03 20:44:48 -0500
committerChris McDonough <chrism@plope.com>2011-12-03 20:44:48 -0500
commit79f34b817580f1043270b467a3c79aeeaebd9233 (patch)
tree3e63e3f4a4418919450e3e02bc9a64290c6ac275
parent58c01ff8863971f81db59d437d49fd9e97b59e5c (diff)
downloadpyramid-79f34b817580f1043270b467a3c79aeeaebd9233.tar.gz
pyramid-79f34b817580f1043270b467a3c79aeeaebd9233.tar.bz2
pyramid-79f34b817580f1043270b467a3c79aeeaebd9233.zip
change interface of get_category
-rw-r--r--pyramid/interfaces.py18
-rw-r--r--pyramid/registry.py16
-rw-r--r--pyramid/tests/test_registry.py8
3 files changed, 28 insertions, 14 deletions
diff --git a/pyramid/interfaces.py b/pyramid/interfaces.py
index a8a9cc55a..559d3c110 100644
--- a/pyramid/interfaces.py
+++ b/pyramid/interfaces.py
@@ -865,16 +865,20 @@ class IIntrospector(Interface):
discriminator (or discriminator hash) ``discriminator``. If it does
not exist in the introspector, return the value of ``default`` """
- def get_category(category_name, sort_key=None):
+ def get_category(category_name, default=None, sort_key=None):
""" Get a sequence of dictionaries in the form
``[{'introspectable':IIntrospectable, 'related':[sequence of related
IIntrospectables]}, ...]`` where each introspectable is part of the
- category associated with ``category_name`` . If ``sort_key`` is
- ``None``, the sequence will be returned in the order the
- introspectables were added to the introspector. Otherwise, sort_key
- should be a function that accepts an IIntrospectable and returns a
- value from it (ala the ``key`` function of Python's ``sorted``
- callable)."""
+ category associated with ``category_name`` .
+
+ If the category named ``category_name`` does not exist in the
+ introspector the value passed as ``default`` will be returned.
+
+ If ``sort_key`` is ``None``, the sequence will be returned in the
+ order the introspectables were added to the introspector. Otherwise,
+ sort_key should be a function that accepts an IIntrospectable and
+ returns a value from it (ala the ``key`` function of Python's
+ ``sorted`` callable)."""
def categories():
""" Return a sorted sequence of category names known by
diff --git a/pyramid/registry.py b/pyramid/registry.py
index a6d70bfa8..295d6c6b9 100644
--- a/pyramid/registry.py
+++ b/pyramid/registry.py
@@ -103,19 +103,25 @@ class Introspector(object):
intr = category.get(discriminator, default)
return intr
- def get_category(self, category_name, sort_key=None):
+ def get_category(self, category_name, default=None, sort_key=None):
if sort_key is None:
sort_key = operator.attrgetter('order')
- category = self._categories[category_name]
+ category = self._categories.get(category_name)
+ if category is None:
+ return default
values = category.values()
values = sorted(set(values), key=sort_key)
- return [{'introspectable':intr, 'related':self.related(intr)} for
- intr in values]
+ return [
+ {'introspectable':intr,
+ 'related':self.related(intr)}
+ for intr in values
+ ]
def categorized(self, sort_key=None):
L = []
for category_name in self.categories():
- L.append((category_name, self.get_category(category_name,sort_key)))
+ L.append((category_name, self.get_category(category_name,
+ sort_key=sort_key)))
return L
def categories(self):
diff --git a/pyramid/tests/test_registry.py b/pyramid/tests/test_registry.py
index 3d68688d1..11019b852 100644
--- a/pyramid/tests/test_registry.py
+++ b/pyramid/tests/test_registry.py
@@ -97,6 +97,10 @@ class TestIntrospector(unittest.TestCase):
]
self.assertEqual(inst.get_category('category'), expected)
+ def test_get_category_returns_default_on_miss(self):
+ inst = self._makeOne()
+ self.assertEqual(inst.get_category('category', '123'), '123')
+
def test_get_category_with_sortkey(self):
import operator
inst = self._makeOne()
@@ -113,7 +117,7 @@ class TestIntrospector(unittest.TestCase):
{'introspectable':intr, 'related':[]},
]
self.assertEqual(
- inst.get_category('category', operator.attrgetter('foo')),
+ inst.get_category('category', sort_key=operator.attrgetter('foo')),
expected)
def test_categorized(self):
@@ -132,7 +136,7 @@ class TestIntrospector(unittest.TestCase):
{'introspectable':intr, 'related':[]},
])]
self.assertEqual(
- inst.categorized(operator.attrgetter('foo')), expected)
+ inst.categorized(sort_key=operator.attrgetter('foo')), expected)
def test_categories(self):
inst = self._makeOne()