File: test_request.doctest

package info (click to toggle)
python-mechanize 1%3A0.4.10%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,316 kB
  • sloc: python: 16,656; makefile: 11; sh: 4
file content (70 lines) | stat: -rw-r--r-- 2,123 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
>>> from mechanize import Request
>>> Request("http://example.com/foo#frag").get_selector()
'/foo'

>>> Request("http://example.com?query").get_selector()
'/?query'

>>> Request("http://example.com").get_selector()
'/'


Request Headers Dictionary
--------------------------

The Request.headers dictionary is not a documented interface.  It should
stay that way, because the complete set of headers are only accessible
through the .get_header(), .has_header(), .header_items() interface.
However, .headers pre-dates those methods, and so real code will be using
the dictionary.

The introduction in 2.4 of those methods was a mistake for the same reason:
code that previously saw all (urllib2 user)-provided headers in .headers
now sees only a subset (and the function interface is ugly and incomplete).
A better change would have been to replace .headers dict with a dict
subclass (or UserDict.DictMixin instance?)  that preserved the .headers
interface and also provided access to the "unredirected" headers.  It's
probably too late to fix that, though.


Check case normalization:

>>> url = "http://example.com"
>>> Request(url, headers={"Spam-eggs": "blah"}).headers["Spam-Eggs"]
'blah'
>>> Request(url, headers={"spam-EggS": "blah"}).headers["Spam-Eggs"]
'blah'

Currently, Request(url, "Spam-eggs").headers["Spam-eggs"] raises KeyError,
but that could be changed in future.


Request Headers Methods
-----------------------

Note the case normalization of header names here, to .capitalize()-case.
This should be preserved for backwards-compatibility.  (In the HTTP case,
normalization to .title()-case is done by urllib2 before sending headers to
httplib).

>>> url = "http://example.com"
>>> r = Request(url, headers={"Spam-eggs": "blah"})
>>> r.has_header("Spam-eggs")
True
>>> r.header_items()
[('Spam-Eggs', 'blah')]
>>> r.add_header("Foo-Bar", "baz")
>>> items = r.header_items()
>>> items.sort()
>>> items
[('Foo-Bar', 'baz'), ('Spam-Eggs', 'blah')]
>>> r.has_header("Not-there")
False
>>> print(r.get_header("Not-there"))
None
>>> r.get_header("Not-there", "default")
'default'


Header Order
-------------