src/pyams_utils/url.py
changeset 388 e768f0e1e52f
parent 292 b338586588ad
child 392 1af0ba410187
equal deleted inserted replaced
387:604807051f00 388:e768f0e1e52f
     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