New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support HTTP PATCH method #106

Merged
merged 3 commits into from Aug 10, 2013

Conversation

Projects
None yet
5 participants
@lukecyca
Copy link
Contributor

lukecyca commented May 27, 2013

The PATCH method is a proposed standard in rfc5789 that has already become very popular in the wild. It allows partial updates to resources.

Currently, WebOb doesn't populate PATCH requests' request.params, which makes this verb difficult to use.

@tseaver

This comment has been minimized.

Copy link
Member

tseaver commented Jun 18, 2013

+1

@ryanpetrello

This comment has been minimized.

Copy link
Contributor

ryanpetrello commented Aug 8, 2013

Any progress on this?

@lukecyca

This comment has been minimized.

Copy link
Contributor

lukecyca commented Aug 8, 2013

@ryanpetrello, I ended up working around the issue by switching to json instead of urlencoded PATCH requests. If the body is json, you can always just access request.json_body regardless of the HTTP verb. It is only when you want to use the magic request.params attribute that you need this support.

Still, it would be great to get this merged.

@mcdonc

This comment has been minimized.

Copy link
Member

mcdonc commented Aug 8, 2013

I have no problem with this, although the patch needs a test or two.

@cleverdevil

This comment has been minimized.

Copy link

cleverdevil commented Aug 9, 2013

@lukecyca since you worked around this, are you planning on updating this pull request with some tests, so it can be merged? If you are busy, I can try and knock it out.

@lukecyca

This comment has been minimized.

Copy link
Contributor

lukecyca commented Aug 9, 2013

Now with tests.

(Thanks for the offer, @cleverdevil!)

@tseaver

This comment has been minimized.

Copy link
Member

tseaver commented Aug 9, 2013

Tests look reasonable, keep coverage at 100%.

+1 for merge.

mcdonc added a commit that referenced this pull request Aug 10, 2013

Merge pull request #106 from lukecyca/master
Support HTTP PATCH method

@mcdonc mcdonc merged commit 352fe87 into Pylons:master Aug 10, 2013

@mcdonc

This comment has been minimized.

Copy link
Member

mcdonc commented Aug 10, 2013

Thank you!

@ryanpetrello

This comment has been minimized.

Copy link
Contributor

ryanpetrello commented Aug 10, 2013

Awesome, thanks everyone!

mamash pushed a commit to joyent/pkgsrc-wip that referenced this pull request Aug 20, 2014

thomasklausner
Update to 1.4:
1.4 (2013-05-14)
----------------

Features
~~~~~~~~

- Remove ``webob.__version__``, the version number had not been kept in sync
  with the official pkg version.  To obtain the WebOb version number, use
  ``pkg_resources.get_distribution('webob').version`` instead.

Bug Fixes
~~~~~~~~~

- Fix a bug in ``EmptyResponse`` that prevents it from setting self.close as
  appropriate due to testing truthiness of object rather than if it is
  something other than ``None``.

- Fix a bug in ``SignedSerializer`` preventing secrets from containing
  higher-order characters. See Pylons/webob#136

- Use the ``hmac.compare_digest`` method when available for constant-time
  comparisons.

1.3.1 (2013-12-13)
------------------

Bug Fixes
~~~~~~~~~

- Fix a bug in ``SignedCookieProfile`` whereby we didn't keep the original
  serializer around, this would cause us to have ``SignedSerializer`` be added on
  top of a ``SignedSerializer`` which would cause it to be run twice when
  attempting to verify a cookie.  See Pylons/webob#127

Backwards Incompatibilities
~~~~~~~~~~~~~~~~~~~~~~~~~~~

- When ``CookieProfile.get_value`` and ``SignedCookieProfile.get_value`` fails
  to deserialize a badly encoded value, we now return ``None`` as if the cookie
  was never set in the first place instead of allowing a ``ValueError`` to be
  raised to the calling code.  See Pylons/webob#126

1.3 (2013-12-10)
----------------

Features
~~~~~~~~

- Added a read-only ``domain`` property to ``BaseRequest``.  This property
  returns the domain portion of the host value.  For example, if the
  environment contains an ``HTTP_HOST`` value of ``foo.example.com:8000``,
  ``request.domain`` will return ``foo.example.com``.

- Added five new APIs: ``webob.cookies.CookieProfile``,
  ``webob.cookies.SignedCookieProfile``, ``webob.cookies.JSONSerializer`` and
  ``webob.cookies.SignedSerializer``, and ``webob.cookies.make_cookie``.  These
  APIs are convenience APIs for generating and parsing cookie headers as well
  as dealing with signing cookies.

- Cookies generated via webob.cookies quoted characters in cookie values that
  did not need to be quoted per RFC 6265.  The following characters are no
  longer quoted in cookie values: ``~/=<>()[]{}?@`` .  The full set of
  non-letter-or-digit unquoted cookie value characters is now
  ``!#$%&'*+-.^_`|~/: =<>()[]{}?@``.  See
  http://tools.ietf.org/html/rfc6265#section-4.1.1 for more information.

- Cookie names are now restricted to the set of characters expected by RFC
  6265.  Previously they could contain unsupported characters such as ``/``.

- Older versions of Webob escaped the doublequote to ``\"`` and the backslash
  to ``\\`` when quoting cookie values.  Now, instead, cookie serialization
  generates ``\042`` for the doublequote and ``\134`` for the backslash. This
  is what is expected as per RFC 6265.  Note that old cookie values that do
  have the older style quoting in them will still be unquoted correctly,
  however.

- Added support for draft status code 451 ("Unavailable for Legal Reasons").
  See http://tools.ietf.org/html/draft-tbray-http-legally-restricted-status-00

- Added status codes 428, 429, 431 and 511 to ``util.status_reasons`` (they
  were already present in a previous release as ``webob.exc`` exceptions).

Bug Fixes
~~~~~~~~~

- MIMEAccept happily parsed malformed wildcard strings like "image/pn*" at
  parse time, but then threw an AssertionError during matching.  See
  Pylons/webob#83 .

- Preserve document ordering of GET and POST request data when POST data passed
  to Request.blank is a MultiDict.  See Pylons/webob#96

- Allow query strings attached to PATCH requests to populate request.params.
  See Pylons/webob#106

- Added Python 3.3 trove classifier.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment