summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-23 11:44:56 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-23 11:44:56 +0000
commitafc4bba9d08233824977215429d3e0ca6fb9fa02 (patch)
tree704c92ff0aa63adac3f560eca0945335b8eb193b
parent94da801721dc65110cb94a25d75f6200adf3d125 (diff)
downloadpyramid-afc4bba9d08233824977215429d3e0ca6fb9fa02.tar.gz
pyramid-afc4bba9d08233824977215429d3e0ca6fb9fa02.tar.bz2
pyramid-afc4bba9d08233824977215429d3e0ca6fb9fa02.zip
- Speed up ``repoze.bfg.url.model_url`` slightly.
- Speed up ``repoze.bfg.url.route_url`` slightly.
-rw-r--r--CHANGES.txt4
-rw-r--r--repoze/bfg/url.py9
2 files changed, 11 insertions, 2 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 96f5a8355..95ca8e3e2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,10 @@ Features
- Speed up ``repoze.bfg.traversal.traverse`` slightly.
+- Speed up ``repoze.bfg.url.model_url`` slightly.
+
+- Speed up ``repoze.bfg.url.route_url`` slightly.
+
Internal
--------
diff --git a/repoze/bfg/url.py b/repoze/bfg/url.py
index 1fd9bab1e..40badf5d1 100644
--- a/repoze/bfg/url.py
+++ b/repoze/bfg/url.py
@@ -5,6 +5,8 @@ import os
from zope.component import getUtility
from zope.component import queryMultiAdapter
+from repoze.lru import lru_cache
+
from repoze.bfg.interfaces import IContextURL
from repoze.bfg.interfaces import IRoutesMapper
@@ -103,7 +105,7 @@ def route_url(route_name, request, *elements, **kw):
anchor = '#' + anchor
if elements:
- suffix = '/'.join([quote_path_segment(s) for s in elements])
+ suffix = _join_elements(elements)
if not path.endswith('/'):
suffix = '/' + suffix
else:
@@ -194,7 +196,7 @@ def model_url(model, request, *elements, **kw):
anchor = '#' + anchor
if elements:
- suffix = '/'.join([quote_path_segment(s) for s in elements])
+ suffix = _join_elements(elements)
else:
suffix = ''
@@ -249,3 +251,6 @@ def static_url(path, request, **kw):
raise ValueError('No static URL definition matching %s' % path)
+@lru_cache(1000)
+def _join_elements(elements):
+ return '/'.join([quote_path_segment(s) for s in elements])