
This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.
Created on2013-09-08 16:41 byjaraco, last changed2022-04-11 14:57 byadmin. This issue is nowclosed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| 6d6d68c068ad.diff | jaraco,2013-09-08 16:49 | review | ||
| 2b2744cfb08f.diff | jaraco,2013-09-08 16:55 | review | ||
| 061eb75339e2.diff | jaraco,2013-09-08 17:07 | review | ||
| Repositories containing patches | |||
|---|---|---|---|
| http://hg.python.org/sandbox/cpython-issue18978 | |||
| Messages (8) | |||
|---|---|---|---|
| msg197281 -(view) | Author: Jason R. Coombs (jaraco)*![]() | Date: 2013-09-08 16:41 | |
In Python 2.x and 3.2, I used to use a Request subclass I created for overriding the method used:class MethodRequest(request.Request):def __init__(self, *args, **kwargs):"""Construct a MethodRequest. Usage is the same as for`urllib.request.Request` except it also takes an optional `method`keyword argument. If supplied, `method` will be used instead ofthe default."""if 'method' in kwargs:self.method = kwargs.pop('method')return request.Request.__init__(self, *args, **kwargs)def get_method(self):return getattr(self, 'method', request.Request.get_method(self))In Python 3.3, which now supports a method parameter, it broke this paradigm (because the method is stored in the instance and is always set to None in __init__ if not specified).I believe a paradigm where the method is stored as a class attribute and possibly overridden in an instance would be much better, allowing for subclasses to simply and directly override the method. For example:class HeadRequest(MethodRequest):method = 'HEAD'That straightforward example works very well if method is allowed to be a class attribute, but won't work at all if 'method' is always set as an instance attribute in __init__.And while it's possible for HeadRequest to override __init__, that requires HeadRequest to override that entire signature, which is less elegant than simply setting a class attribute.For Python 3.4, I'd like to adapt the Request class to allow the Method to be defined at the class level (while still honoring customization at the instance level). | |||
| msg197283 -(view) | Author: Senthil Kumaran (orsenthil)*![]() | Date: 2013-09-08 16:43 | |
Hi Jason, Agree with you. This design change could be valuable in extending urllib.request.RequestThanks! | |||
| msg197284 -(view) | Author: Jason R. Coombs (jaraco)*![]() | Date: 2013-09-08 16:49 | |
I've created a clone in which to draft this work. | |||
| msg197288 -(view) | Author: Jason R. Coombs (jaraco)*![]() | Date: 2013-09-08 17:07 | |
I've added tests to capture the new behavior. | |||
| msg198278 -(view) | Author: Roundup Robot (python-dev)![]() | Date: 2013-09-22 14:11 | |
New changeset6d6d68c068ad by Jason R. Coombs in branch 'default':Issue#18978: Allow Request.method to be defined at the class level.http://hg.python.org/cpython/rev/6d6d68c068adNew changeset2b2744cfb08f by Jason R. Coombs in branch 'default':Issue#18978: A more elegant technique for resolving the methodhttp://hg.python.org/cpython/rev/2b2744cfb08fNew changeset061eb75339e2 by Jason R. Coombs in branch 'default':Issue#18978: Add tests to capture expected behavior for class-level method overrides.http://hg.python.org/cpython/rev/061eb75339e2New changeset8620aea9bbca by Jason R. Coombs in branch 'default':Close#18978: Merge changes.http://hg.python.org/cpython/rev/8620aea9bbca | |||
| msg198280 -(view) | Author: Roundup Robot (python-dev)![]() | Date: 2013-09-22 14:17 | |
New changeset7f13d5ecf71f by Jason R. Coombs in branch 'default':Issue#18978: Update docs to reflect explicitly the ability to set the attribute at the class level.http://hg.python.org/cpython/rev/7f13d5ecf71f | |||
| msg198551 -(view) | Author: Senthil Kumaran (orsenthil)*![]() | Date: 2013-09-28 20:53 | |
Thanks for the this change, Jason. Docs could be updated to reflect this change (using ..versionchanged: directive). Thank you! | |||
| msg212184 -(view) | Author: Roundup Robot (python-dev)![]() | Date: 2014-02-25 15:23 | |
New changeset1afbd851d1c1 by R David Murray in branch 'default':whatsnew: Request.method can be overridden in subclasses (#18978).http://hg.python.org/cpython/rev/1afbd851d1c1 | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:57:50 | admin | set | github: 63178 |
| 2014-02-25 15:23:30 | python-dev | set | messages: +msg212184 |
| 2013-09-28 20:53:43 | orsenthil | set | messages: +msg198551 |
| 2013-09-22 14:17:35 | python-dev | set | messages: +msg198280 |
| 2013-09-22 14:11:15 | python-dev | set | status: open -> closed nosy: +python-dev messages: +msg198278 resolution: fixed stage: resolved |
| 2013-09-08 17:07:53 | jaraco | set | files: +061eb75339e2.diff |
| 2013-09-08 17:07:37 | jaraco | set | messages: +msg197288 |
| 2013-09-08 16:55:01 | jaraco | set | files: +2b2744cfb08f.diff |
| 2013-09-08 16:49:33 | jaraco | set | files: +6d6d68c068ad.diff keywords: +patch |
| 2013-09-08 16:49:04 | jaraco | set | hgrepos: + hgrepo208 messages: +msg197284 |
| 2013-09-08 16:43:00 | orsenthil | set | nosy: +orsenthil messages: +msg197283 |
| 2013-09-08 16:41:28 | jaraco | create | |