| OLD | NEW |
| (Empty) |
| 1 # -*- test-case-name: twisted.test.test_paths -*- | |
| 2 # Copyright (c) 2001-2004 Twisted Matrix Laboratories. | |
| 3 # See LICENSE for details. | |
| 4 | |
| 5 # | |
| 6 | |
| 7 import urlparse | |
| 8 import urllib | |
| 9 | |
| 10 class URLPath: | |
| 11 def __init__(self, scheme='', netloc='localhost', path='', | |
| 12 query='', fragment=''): | |
| 13 self.scheme = scheme or 'http' | |
| 14 self.netloc = netloc | |
| 15 self.path = path or '/' | |
| 16 self.query = query | |
| 17 self.fragment = fragment | |
| 18 | |
| 19 _qpathlist = None | |
| 20 _uqpathlist = None | |
| 21 | |
| 22 def pathList(self, unquote=0, copy=1): | |
| 23 if self._qpathlist is None: | |
| 24 self._qpathlist = self.path.split('/') | |
| 25 self._uqpathlist = map(urllib.unquote, self._qpathlist) | |
| 26 if unquote: | |
| 27 result = self._uqpathlist | |
| 28 else: | |
| 29 result = self._qpathlist | |
| 30 if copy: | |
| 31 return result[:] | |
| 32 else: | |
| 33 return result | |
| 34 | |
| 35 def fromString(klass, st): | |
| 36 t = urlparse.urlsplit(st) | |
| 37 u = klass(*t) | |
| 38 return u | |
| 39 | |
| 40 fromString = classmethod(fromString) | |
| 41 | |
| 42 def fromRequest(klass, request): | |
| 43 return klass.fromString(request.prePathURL()) | |
| 44 | |
| 45 fromRequest = classmethod(fromRequest) | |
| 46 | |
| 47 def _pathMod(self, newpathsegs, keepQuery): | |
| 48 if keepQuery: | |
| 49 query = self.query | |
| 50 else: | |
| 51 query = '' | |
| 52 return URLPath(self.scheme, | |
| 53 self.netloc, | |
| 54 '/'.join(newpathsegs), | |
| 55 query) | |
| 56 | |
| 57 def sibling(self, path, keepQuery=0): | |
| 58 l = self.pathList() | |
| 59 l[-1] = path | |
| 60 return self._pathMod(l, keepQuery) | |
| 61 | |
| 62 def child(self, path, keepQuery=0): | |
| 63 l = self.pathList() | |
| 64 if l[-1] == '': | |
| 65 l[-1] = path | |
| 66 else: | |
| 67 l.append(path) | |
| 68 return self._pathMod(l, keepQuery) | |
| 69 | |
| 70 def parent(self, keepQuery=0): | |
| 71 l = self.pathList() | |
| 72 if l[-1] == '': | |
| 73 del l[-2] | |
| 74 else: | |
| 75 # We are a file, such as http://example.com/foo/bar | |
| 76 # our parent directory is http://example.com/ | |
| 77 l.pop() | |
| 78 l[-1] = '' | |
| 79 return self._pathMod(l, keepQuery) | |
| 80 | |
| 81 def here(self, keepQuery=0): | |
| 82 l = self.pathList() | |
| 83 if l[-1] != '': | |
| 84 l[-1] = '' | |
| 85 return self._pathMod(l, keepQuery) | |
| 86 | |
| 87 def click(self, st): | |
| 88 """Return a path which is the URL where a browser would presumably take | |
| 89 you if you clicked on a link with an HREF as given. | |
| 90 """ | |
| 91 scheme, netloc, path, query, fragment = urlparse.urlsplit(st) | |
| 92 if not scheme: | |
| 93 scheme = self.scheme | |
| 94 if not netloc: | |
| 95 netloc = self.netloc | |
| 96 if not path: | |
| 97 path = self.path | |
| 98 if not query: | |
| 99 query = self.query | |
| 100 elif path[0] != '/': | |
| 101 l = self.pathList() | |
| 102 l[-1] = path | |
| 103 path = '/'.join(l) | |
| 104 | |
| 105 return URLPath(scheme, | |
| 106 netloc, | |
| 107 path, | |
| 108 query, | |
| 109 fragment) | |
| 110 | |
| 111 | |
| 112 | |
| 113 def __str__(self): | |
| 114 x = urlparse.urlunsplit(( | |
| 115 self.scheme, self.netloc, self.path, | |
| 116 self.query, self.fragment)) | |
| 117 return x | |
| 118 | |
| 119 def __repr__(self): | |
| 120 return ('URLPath(scheme=%r, netloc=%r, path=%r, query=%r, fragment=%r)' | |
| 121 % (self.scheme, self.netloc, self.path, self.query, self.fragmen
t)) | |
| 122 | |
| OLD | NEW |