8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
|
14 |
|
15 from pyramid.encode import url_quote, urlencode |
13 from pyramid.encode import url_quote, urlencode |
16 from pyramid.url import QUERY_SAFE, resource_url |
14 from pyramid.url import QUERY_SAFE, resource_url |
|
15 from pyramid_zope_request import PyramidPublisherRequest |
17 from zope.interface import Interface |
16 from zope.interface import Interface |
18 |
17 |
19 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config |
18 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config |
20 from pyams_utils.interfaces.tales import ITALESExtension |
19 from pyams_utils.interfaces.tales import ITALESExtension |
21 from pyams_utils.interfaces.url import DISPLAY_CONTEXT, ICanonicalURL, IRelativeURL |
20 from pyams_utils.interfaces.url import DISPLAY_CONTEXT, ICanonicalURL, IRelativeURL |
22 from pyams_utils.unicode import translate_string |
21 from pyams_utils.unicode import translate_string |
|
22 |
|
23 |
|
24 __docformat__ = 'restructuredtext' |
23 |
25 |
24 |
26 |
25 def generate_url(title, min_word_length=2): |
27 def generate_url(title, min_word_length=2): |
26 """Generate an SEO-friendly content URL from it's title |
28 """Generate an SEO-friendly content URL from it's title |
27 |
29 |
141 return absolute_url(self.context, self.request, view_name, query) |
143 return absolute_url(self.context, self.request, view_name, query) |
142 |
144 |
143 |
145 |
144 def relative_url(context, request, display_context=None, view_name=None, query=None): |
146 def relative_url(context, request, display_context=None, view_name=None, query=None): |
145 """Get resource URL relative to given context""" |
147 """Get resource URL relative to given context""" |
|
148 if isinstance(request, PyramidPublisherRequest): |
|
149 request = request._request |
146 if display_context is None: |
150 if display_context is None: |
147 display_context = request.annotations.get(DISPLAY_CONTEXT, request.context) |
151 display_context = request.annotations.get(DISPLAY_CONTEXT, request.context) |
148 adapter = request.registry.getMultiAdapter((context, request), IRelativeURL) |
152 adapter = request.registry.getMultiAdapter((context, request), IRelativeURL) |
149 return adapter.get_url(display_context, view_name, query) |
153 return adapter.get_url(display_context, view_name, query) |
150 |
154 |