root / helpers.py @ f4fe8796
History | View | Annotate | Download (1 kB)
1 | 5c812d1b | Faidon Liambotis | # vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
|
---|---|---|---|
2 | 5c812d1b | Faidon Liambotis | #
|
3 | 5c812d1b | Faidon Liambotis | # Copyright © 2010 Greek Research and Technology Network
|
4 | 5c812d1b | Faidon Liambotis | #
|
5 | 5c812d1b | Faidon Liambotis | |
6 | 5c812d1b | Faidon Liambotis | import re |
7 | 5c812d1b | Faidon Liambotis | from django.conf.urls.defaults import url |
8 | 5c812d1b | Faidon Liambotis | |
9 | 5c812d1b | Faidon Liambotis | _accept_re = re.compile(r'([^\s;,]+)(?:[^,]*?;\s*q=(\d*(?:\.\d+)?))?')
|
10 | 5c812d1b | Faidon Liambotis | |
11 | e646ebe5 | Dimitris Moraitis | |
12 | 5c812d1b | Faidon Liambotis | def parse_accept_header(value): |
13 | 5c812d1b | Faidon Liambotis | """Parse an HTTP Accept header
|
14 | 5c812d1b | Faidon Liambotis |
|
15 | 5c812d1b | Faidon Liambotis | Returns an ordered by quality list of tuples (value, quality)
|
16 | 5c812d1b | Faidon Liambotis | """
|
17 | 5c812d1b | Faidon Liambotis | if not value: |
18 | 5c812d1b | Faidon Liambotis | return []
|
19 | 5c812d1b | Faidon Liambotis | |
20 | 5c812d1b | Faidon Liambotis | result = [] |
21 | 5c812d1b | Faidon Liambotis | for match in _accept_re.finditer(value): |
22 | 5c812d1b | Faidon Liambotis | quality = match.group(2)
|
23 | 5c812d1b | Faidon Liambotis | if not quality: |
24 | 5c812d1b | Faidon Liambotis | quality = 1
|
25 | 5c812d1b | Faidon Liambotis | else:
|
26 | 5c812d1b | Faidon Liambotis | quality = max(min(float(quality), 1), 0) |
27 | 5c812d1b | Faidon Liambotis | result.append((match.group(1), quality))
|
28 | 5c812d1b | Faidon Liambotis | |
29 | 5c812d1b | Faidon Liambotis | # sort by quality
|
30 | 5c812d1b | Faidon Liambotis | result.sort(key=lambda x: x[1]) |
31 | 5c812d1b | Faidon Liambotis | |
32 | 5c812d1b | Faidon Liambotis | return result
|
33 | 5c812d1b | Faidon Liambotis | |
34 | e646ebe5 | Dimitris Moraitis | |
35 | 5c812d1b | Faidon Liambotis | def url_with_format(regex, *args, **kwargs): |
36 | 5c812d1b | Faidon Liambotis | """
|
37 | 5c812d1b | Faidon Liambotis | An extended url() that adds an .json/.xml suffix to the end to avoid DRY
|
38 | 5c812d1b | Faidon Liambotis | """
|
39 | 5c812d1b | Faidon Liambotis | if regex[-1] == '$' and regex[-2] != '\\': |
40 | 5c812d1b | Faidon Liambotis | regex = regex[:-1]
|
41 | 5c812d1b | Faidon Liambotis | regex = regex + r'(\.(?P<emitter_format>json|xml))?$'
|
42 | 5c812d1b | Faidon Liambotis | return url(regex, *args, **kwargs) |