From effe0e6c5adf64ac99f54082121373f84be4611b Mon Sep 17 00:00:00 2001 From: Michael Merickel <michael@merickel.org> Date: Sun, 18 Jun 2017 09:12:51 +0200 Subject: [PATCH] document changes and add tests --- pyramid/url.py | 63 ++++++++++++++++++------------- 1 files changed, 37 insertions(+), 26 deletions(-) diff --git a/pyramid/url.py b/pyramid/url.py index c21d49c..2e964dc 100644 --- a/pyramid/url.py +++ b/pyramid/url.py @@ -32,12 +32,14 @@ ANCHOR_SAFE = QUERY_SAFE def parse_url_overrides(request, kw): - """Parse special arguments passed when generating urls. + """ + Parse special arguments passed when generating urls. The supplied dictionary is mutated when we pop arguments. Returns a 3-tuple of the format: ``(app_url, qs, anchor)``. + """ app_url = kw.pop('_app_url', None) scheme = kw.pop('_scheme', None) @@ -59,10 +61,11 @@ else: qs = '?' + urlencode(query, doseq=True) + frag = '' if anchor: - anchor = '#' + url_quote(anchor, ANCHOR_SAFE) + frag = '#' + url_quote(anchor, ANCHOR_SAFE) - return app_url, qs, anchor + return app_url, qs, frag class URLMethodsMixin(object): """ Request methods mixin for BaseRequest having to do with URL @@ -78,6 +81,7 @@ passed, the ``port`` value is assumed to ``443``. Likewise, if ``scheme`` is passed as ``http`` and ``port`` is not passed, the ``port`` value is assumed to be ``80``. + """ e = self.environ if scheme is None: @@ -184,10 +188,6 @@ as values, and a k=v pair will be placed into the query string for each value. - .. versionchanged:: 1.5 - Allow the ``_query`` option to be a string to enable alternative - encodings. - If a keyword argument ``_anchor`` is present, its string representation will be quoted per :rfc:`3986#section-3.5` and used as a named anchor in the generated URL @@ -200,10 +200,6 @@ If ``_anchor`` is passed as a string, it should be UTF-8 encoded. If ``_anchor`` is passed as a Unicode object, it will be converted to UTF-8 before being appended to the URL. - - .. versionchanged:: 1.5 - The ``_anchor`` option will be escaped instead of using - its raw string representation. If both ``_anchor`` and ``_query`` are specified, the anchor element will always follow the query element, @@ -245,6 +241,18 @@ If the route object which matches the ``route_name`` argument has a :term:`pregenerator`, the ``*elements`` and ``**kw`` arguments passed to this function might be augmented or changed. + + .. versionchanged:: 1.5 + Allow the ``_query`` option to be a string to enable alternative + encodings. + + The ``_anchor`` option will be escaped instead of using + its raw string representation. + + .. versionchanged:: 1.9 + If ``_query`` or ``_anchor`` are falsey (such as ``None`` or an + empty string) they will not be included in the generated url. + """ try: reg = self.registry @@ -298,13 +306,13 @@ implemented in terms of :meth:`pyramid.request.Request.route_url` in just this way. As a result, any ``_app_url`` passed within the ``**kw`` values to ``route_path`` will be ignored. + """ kw['_app_url'] = self.script_name return self.route_url(route_name, *elements, **kw) def resource_url(self, resource, *elements, **kw): """ - Generate a string representing the absolute URL of the :term:`resource` object based on the ``wsgi.url_scheme``, ``HTTP_HOST`` or ``SERVER_NAME`` in the request, plus any @@ -370,10 +378,6 @@ as values, and a k=v pair will be placed into the query string for each value. - .. versionchanged:: 1.5 - Allow the ``query`` option to be a string to enable alternative - encodings. - If a keyword argument ``anchor`` is present, its string representation will be used as a named anchor in the generated URL (e.g. if ``anchor`` is passed as ``foo`` and the resource URL is @@ -385,10 +389,6 @@ If ``anchor`` is passed as a string, it should be UTF-8 encoded. If ``anchor`` is passed as a Unicode object, it will be converted to UTF-8 before being appended to the URL. - - .. versionchanged:: 1.5 - The ``anchor`` option will be escaped instead of using - its raw string representation. If both ``anchor`` and ``query`` are specified, the anchor element will always follow the query element, @@ -418,9 +418,6 @@ pass ``app_url=''``. Passing ``app_url=''`` when the resource path is ``/baz/bar`` will return ``/baz/bar``. - .. versionadded:: 1.3 - ``app_url`` - If ``app_url`` is passed and any of ``scheme``, ``port``, or ``host`` are also passed, ``app_url`` will take precedence and the values passed for ``scheme``, ``host``, and/or ``port`` will be ignored. @@ -432,9 +429,6 @@ .. seealso:: See also :ref:`overriding_resource_url_generation`. - - .. versionadded:: 1.5 - ``route_name``, ``route_kw``, and ``route_remainder_name`` If ``route_name`` is passed, this function will delegate its URL production to the ``route_url`` function. Calling @@ -508,6 +502,23 @@ For backwards compatibility purposes, this method is also aliased as the ``model_url`` method of request. + + .. versionchanged:: 1.3 + Added the ``app_url`` keyword argument. + + .. versionchanged:: 1.5 + Allow the ``query`` option to be a string to enable alternative + encodings. + + The ``anchor`` option will be escaped instead of using + its raw string representation. + + Added the ``route_name``, ``route_kw``, and + ``route_remainder_name`` keyword arguments. + + .. versionchanged:: 1.9 + If ``query`` or ``anchor`` are falsey (such as ``None`` or an + empty string) they will not be included in the generated url. """ try: reg = self.registry -- Gitblit v1.9.3