root / snf-common / synnefo / lib / __init__.py @ 381a548c
History | View | Annotate | Download (3.6 kB)
1 | d2c9adac | Christos Stavrakakis | # Copyright (C) 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | d2c9adac | Christos Stavrakakis | #
|
3 | d2c9adac | Christos Stavrakakis | # Redistribution and use in source and binary forms, with or
|
4 | d2c9adac | Christos Stavrakakis | # without modification, are permitted provided that the following
|
5 | d2c9adac | Christos Stavrakakis | # conditions are met:
|
6 | d2c9adac | Christos Stavrakakis | #
|
7 | d2c9adac | Christos Stavrakakis | # 1. Redistributions of source code must retain the above
|
8 | d2c9adac | Christos Stavrakakis | # copyright notice, this list of conditions and the following
|
9 | d2c9adac | Christos Stavrakakis | # disclaimer.
|
10 | d2c9adac | Christos Stavrakakis | #
|
11 | d2c9adac | Christos Stavrakakis | # 2. Redistributions in binary form must reproduce the above
|
12 | d2c9adac | Christos Stavrakakis | # copyright notice, this list of conditions and the following
|
13 | d2c9adac | Christos Stavrakakis | # disclaimer in the documentation and/or other materials
|
14 | d2c9adac | Christos Stavrakakis | # provided with the distribution.
|
15 | d2c9adac | Christos Stavrakakis | #
|
16 | d2c9adac | Christos Stavrakakis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | d2c9adac | Christos Stavrakakis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | d2c9adac | Christos Stavrakakis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | d2c9adac | Christos Stavrakakis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A. OR
|
20 | d2c9adac | Christos Stavrakakis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | d2c9adac | Christos Stavrakakis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | d2c9adac | Christos Stavrakakis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | d2c9adac | Christos Stavrakakis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | d2c9adac | Christos Stavrakakis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | d2c9adac | Christos Stavrakakis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | d2c9adac | Christos Stavrakakis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | d2c9adac | Christos Stavrakakis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | d2c9adac | Christos Stavrakakis | #
|
29 | d2c9adac | Christos Stavrakakis | # The views and conclusions contained in the software and
|
30 | d2c9adac | Christos Stavrakakis | # documentation are those of the authors and should not be
|
31 | d2c9adac | Christos Stavrakakis | # interpreted as representing official policies, either expressed
|
32 | d2c9adac | Christos Stavrakakis | # or implied, of GRNET S.
|
33 | d2c9adac | Christos Stavrakakis | |
34 | e3ff6830 | Georgios D. Tsoukalas | from urlparse import urlparse |
35 | e3ff6830 | Georgios D. Tsoukalas | |
36 | d2c9adac | Christos Stavrakakis | |
37 | 3c1e7bef | Kostas Papadimitriou | def join_urls(*args): |
38 | d2c9adac | Christos Stavrakakis | """
|
39 | 3c1e7bef | Kostas Papadimitriou | Join arguments into a url.
|
40 | 3c1e7bef | Kostas Papadimitriou |
|
41 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org", "path")
|
42 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/path'
|
43 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/", "path")
|
44 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/path'
|
45 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org", "/path")
|
46 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/path'
|
47 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/", "/path")
|
48 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/path'
|
49 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/", "/path/")
|
50 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/path/'
|
51 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/a/b", "c/d")
|
52 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/a/b/c/d'
|
53 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/a/b/", "c/d")
|
54 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/a/b/c/d'
|
55 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/a/b", "/c/d")
|
56 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/a/b/c/d'
|
57 | d2c9adac | Christos Stavrakakis | >>> join_urls("http://www.test.org/a/b/", "/c/d")
|
58 | d2c9adac | Christos Stavrakakis | 'http://www.test.org/a/b/c/d'
|
59 | c1a0ab9b | Georgios D. Tsoukalas | >>> join_urls("http://www.test.org/a/b/", "/c/d/", "/e/f/")
|
60 | c1a0ab9b | Georgios D. Tsoukalas | 'http://www.test.org/a/b/c/d/e/f/'
|
61 | 173f8f52 | Kostas Papadimitriou | >>> join_urls("/path1", "/path")
|
62 | 173f8f52 | Kostas Papadimitriou | '/path1/path'
|
63 | 173f8f52 | Kostas Papadimitriou | >>> join_urls("path1", "/path")
|
64 | 173f8f52 | Kostas Papadimitriou | 'path1/path'
|
65 | 173f8f52 | Kostas Papadimitriou | >>> join_urls("path1/")
|
66 | 173f8f52 | Kostas Papadimitriou | 'path1/'
|
67 | 173f8f52 | Kostas Papadimitriou | >>> join_urls("path1/", "path2", "path3")
|
68 | 173f8f52 | Kostas Papadimitriou | 'path1/path2/path3'
|
69 | e5e80733 | Kostas Papadimitriou | >>> join_urls("", "path2", "path3")
|
70 | e5e80733 | Kostas Papadimitriou | 'path2/path3'
|
71 | e5e80733 | Kostas Papadimitriou | >>> join_urls("", "", "")
|
72 | e5e80733 | Kostas Papadimitriou | ''
|
73 | d2c9adac | Christos Stavrakakis | """
|
74 | e5e80733 | Kostas Papadimitriou | args = filter(bool, args) |
75 | e5e80733 | Kostas Papadimitriou | |
76 | e5e80733 | Kostas Papadimitriou | if len(args) == 0: |
77 | e5e80733 | Kostas Papadimitriou | return '' |
78 | e5e80733 | Kostas Papadimitriou | |
79 | 173f8f52 | Kostas Papadimitriou | if len(args) == 1: |
80 | 173f8f52 | Kostas Papadimitriou | return args[0] |
81 | 173f8f52 | Kostas Papadimitriou | |
82 | 173f8f52 | Kostas Papadimitriou | return "/".join([args[0].rstrip("/")] + |
83 | c1a0ab9b | Georgios D. Tsoukalas | [a.strip("/") for a in args[1:-1]] + |
84 | 173f8f52 | Kostas Papadimitriou | [args[-1].lstrip("/")]) |
85 | d2c9adac | Christos Stavrakakis | |
86 | e3ff6830 | Georgios D. Tsoukalas | |
87 | e3ff6830 | Georgios D. Tsoukalas | def parse_base_url(base_url): |
88 | e3ff6830 | Georgios D. Tsoukalas | """
|
89 | e3ff6830 | Georgios D. Tsoukalas | >>> parse_base_url("https://one.two.three/four/five")
|
90 | c1a0ab9b | Georgios D. Tsoukalas | ('https://one.two.three', 'four/five')
|
91 | e3ff6830 | Georgios D. Tsoukalas | >>> parse_base_url("https://one.two.three/four/five/")
|
92 | c1a0ab9b | Georgios D. Tsoukalas | ('https://one.two.three', 'four/five')
|
93 | e3ff6830 | Georgios D. Tsoukalas | >>> parse_base_url("https://one.two.three/")
|
94 | c1a0ab9b | Georgios D. Tsoukalas | ('https://one.two.three', '')
|
95 | e3ff6830 | Georgios D. Tsoukalas | >>> parse_base_url("https://one.two.three")
|
96 | c1a0ab9b | Georgios D. Tsoukalas | ('https://one.two.three', '')
|
97 | e3ff6830 | Georgios D. Tsoukalas |
|
98 | e3ff6830 | Georgios D. Tsoukalas | """
|
99 | e3ff6830 | Georgios D. Tsoukalas | parsed = urlparse(base_url) |
100 | e3ff6830 | Georgios D. Tsoukalas | base_path = parsed.path.strip('/')
|
101 | e3ff6830 | Georgios D. Tsoukalas | base_host = parsed.scheme + '://' + parsed.netloc
|
102 | e3ff6830 | Georgios D. Tsoukalas | return base_host, base_path
|
103 | e3ff6830 | Georgios D. Tsoukalas | |
104 | e3ff6830 | Georgios D. Tsoukalas | |
105 | d2c9adac | Christos Stavrakakis | if __name__ == "__main__": |
106 | d2c9adac | Christos Stavrakakis | import doctest |
107 | d2c9adac | Christos Stavrakakis | doctest.testmod() |