Linux ip-148-66-134-25.ip.secureserver.net 3.10.0-1160.119.1.el7.tuxcare.els10.x86_64 #1 SMP Fri Oct 11 21:40:41 UTC 2024 x86_64
Apache
: 148.66.134.25 | : 3.142.198.51
66 Domain
8.0.30
amvm
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
usr /
lib64 /
python2.7 /
[ HOME SHELL ]
Name
Size
Permission
Action
Demo
[ DIR ]
drwxr-xr-x
Doc
[ DIR ]
drwxr-xr-x
Tools
[ DIR ]
drwxr-xr-x
bsddb
[ DIR ]
drwxr-xr-x
compiler
[ DIR ]
drwxr-xr-x
config
[ DIR ]
drwxr-xr-x
ctypes
[ DIR ]
drwxr-xr-x
curses
[ DIR ]
drwxr-xr-x
distutils
[ DIR ]
drwxr-xr-x
email
[ DIR ]
drwxr-xr-x
encodings
[ DIR ]
drwxr-xr-x
hotshot
[ DIR ]
drwxr-xr-x
idlelib
[ DIR ]
drwxr-xr-x
importlib
[ DIR ]
drwxr-xr-x
json
[ DIR ]
drwxr-xr-x
lib-dynload
[ DIR ]
drwxr-xr-x
lib-tk
[ DIR ]
drwxr-xr-x
lib2to3
[ DIR ]
drwxr-xr-x
logging
[ DIR ]
drwxr-xr-x
multiprocessing
[ DIR ]
drwxr-xr-x
plat-linux2
[ DIR ]
drwxr-xr-x
pydoc_data
[ DIR ]
drwxr-xr-x
site-packages
[ DIR ]
drwxr-xr-x
sqlite3
[ DIR ]
drwxr-xr-x
test
[ DIR ]
drwxr-xr-x
unittest
[ DIR ]
drwxr-xr-x
wsgiref
[ DIR ]
drwxr-xr-x
xml
[ DIR ]
drwxr-xr-x
BaseHTTPServer.py
21.93
KB
-rw-r--r--
BaseHTTPServer.pyc
21.18
KB
-rw-r--r--
BaseHTTPServer.pyo
21.18
KB
-rw-r--r--
Bastion.py
5.61
KB
-rw-r--r--
Bastion.pyc
6.5
KB
-rw-r--r--
Bastion.pyo
6.5
KB
-rw-r--r--
CGIHTTPServer.py
12.84
KB
-rw-r--r--
CGIHTTPServer.pyc
10.84
KB
-rw-r--r--
CGIHTTPServer.pyo
10.84
KB
-rw-r--r--
ConfigParser.py
27.1
KB
-rw-r--r--
ConfigParser.pyc
24.62
KB
-rw-r--r--
ConfigParser.pyo
24.62
KB
-rw-r--r--
Cookie.py
24.66
KB
-rw-r--r--
Cookie.pyc
21.64
KB
-rw-r--r--
Cookie.pyo
21.64
KB
-rw-r--r--
DocXMLRPCServer.py
10.52
KB
-rw-r--r--
DocXMLRPCServer.pyc
9.96
KB
-rw-r--r--
DocXMLRPCServer.pyo
9.85
KB
-rw-r--r--
HTMLParser.py
16.58
KB
-rw-r--r--
HTMLParser.pyc
13.39
KB
-rw-r--r--
HTMLParser.pyo
13.1
KB
-rw-r--r--
MimeWriter.py
6.33
KB
-rw-r--r--
MimeWriter.pyc
7.19
KB
-rw-r--r--
MimeWriter.pyo
7.19
KB
-rw-r--r--
Queue.py
8.36
KB
-rw-r--r--
Queue.pyc
9.19
KB
-rw-r--r--
Queue.pyo
9.19
KB
-rw-r--r--
SimpleHTTPServer.py
7.25
KB
-rw-r--r--
SimpleHTTPServer.pyc
7.55
KB
-rw-r--r--
SimpleHTTPServer.pyo
7.55
KB
-rw-r--r--
SimpleXMLRPCServer.py
25.17
KB
-rw-r--r--
SimpleXMLRPCServer.pyc
22.31
KB
-rw-r--r--
SimpleXMLRPCServer.pyo
22.31
KB
-rw-r--r--
SocketServer.py
23.29
KB
-rw-r--r--
SocketServer.pyc
23.49
KB
-rw-r--r--
SocketServer.pyo
23.49
KB
-rw-r--r--
StringIO.py
10.41
KB
-rw-r--r--
StringIO.pyc
11.21
KB
-rw-r--r--
StringIO.pyo
11.21
KB
-rw-r--r--
UserDict.py
5.67
KB
-rw-r--r--
UserDict.pyc
8.61
KB
-rw-r--r--
UserDict.pyo
8.61
KB
-rw-r--r--
UserList.py
3.56
KB
-rw-r--r--
UserList.pyc
6.42
KB
-rw-r--r--
UserList.pyo
6.42
KB
-rw-r--r--
UserString.py
9.46
KB
-rwxr-xr-x
UserString.pyc
14.52
KB
-rw-r--r--
UserString.pyo
14.52
KB
-rw-r--r--
_LWPCookieJar.py
6.4
KB
-rw-r--r--
_LWPCookieJar.pyc
5.4
KB
-rw-r--r--
_LWPCookieJar.pyo
5.4
KB
-rw-r--r--
_MozillaCookieJar.py
5.67
KB
-rw-r--r--
_MozillaCookieJar.pyc
4.37
KB
-rw-r--r--
_MozillaCookieJar.pyo
4.33
KB
-rw-r--r--
__future__.py
4.28
KB
-rw-r--r--
__future__.pyc
4.13
KB
-rw-r--r--
__future__.pyo
4.13
KB
-rw-r--r--
__phello__.foo.py
64
B
-rw-r--r--
__phello__.foo.pyc
125
B
-rw-r--r--
__phello__.foo.pyo
125
B
-rw-r--r--
_abcoll.py
17.45
KB
-rw-r--r--
_abcoll.pyc
24.4
KB
-rw-r--r--
_abcoll.pyo
24.4
KB
-rw-r--r--
_osx_support.py
18.03
KB
-rw-r--r--
_osx_support.pyc
11.28
KB
-rw-r--r--
_osx_support.pyo
11.28
KB
-rw-r--r--
_pyio.py
67.24
KB
-rw-r--r--
_pyio.pyc
62.71
KB
-rw-r--r--
_pyio.pyo
62.71
KB
-rw-r--r--
_strptime.py
19.75
KB
-rw-r--r--
_strptime.pyc
14.53
KB
-rw-r--r--
_strptime.pyo
14.53
KB
-rw-r--r--
_sysconfigdata.py
17.56
KB
-rw-r--r--
_sysconfigdata.pyc
20.72
KB
-rw-r--r--
_sysconfigdata.pyo
20.72
KB
-rw-r--r--
_threading_local.py
7.28
KB
-rw-r--r--
_threading_local.pyc
6.45
KB
-rw-r--r--
_threading_local.pyo
6.45
KB
-rw-r--r--
_weakrefset.py
5.48
KB
-rw-r--r--
_weakrefset.pyc
9.25
KB
-rw-r--r--
_weakrefset.pyo
9.25
KB
-rw-r--r--
abc.py
6.98
KB
-rw-r--r--
abc.pyc
6
KB
-rw-r--r--
abc.pyo
5.94
KB
-rw-r--r--
aifc.py
32.94
KB
-rw-r--r--
aifc.pyc
29.31
KB
-rw-r--r--
aifc.pyo
29.31
KB
-rw-r--r--
antigravity.py
60
B
-rw-r--r--
antigravity.pyc
203
B
-rw-r--r--
antigravity.pyo
203
B
-rw-r--r--
anydbm.py
2.6
KB
-rw-r--r--
anydbm.pyc
2.73
KB
-rw-r--r--
anydbm.pyo
2.73
KB
-rw-r--r--
argparse.py
86.46
KB
-rw-r--r--
argparse.pyc
62.57
KB
-rw-r--r--
argparse.pyo
62.41
KB
-rw-r--r--
ast.py
11.53
KB
-rw-r--r--
ast.pyc
12.65
KB
-rw-r--r--
ast.pyo
12.65
KB
-rw-r--r--
asynchat.py
11.13
KB
-rw-r--r--
asynchat.pyc
8.44
KB
-rw-r--r--
asynchat.pyo
8.44
KB
-rw-r--r--
asyncore.py
20.36
KB
-rw-r--r--
asyncore.pyc
18.4
KB
-rw-r--r--
asyncore.pyo
18.4
KB
-rw-r--r--
atexit.py
1.67
KB
-rw-r--r--
atexit.pyc
2.15
KB
-rw-r--r--
atexit.pyo
2.15
KB
-rw-r--r--
audiodev.py
7.42
KB
-rw-r--r--
audiodev.pyc
8.27
KB
-rw-r--r--
audiodev.pyo
8.27
KB
-rw-r--r--
base64.py
11.09
KB
-rwxr-xr-x
base64.pyc
10.63
KB
-rw-r--r--
base64.pyo
10.63
KB
-rw-r--r--
bdb.py
21.21
KB
-rw-r--r--
bdb.pyc
18.65
KB
-rw-r--r--
bdb.pyo
18.65
KB
-rw-r--r--
binhex.py
14.14
KB
-rw-r--r--
binhex.pyc
15.04
KB
-rw-r--r--
binhex.pyo
15.04
KB
-rw-r--r--
bisect.py
2.53
KB
-rw-r--r--
bisect.pyc
3
KB
-rw-r--r--
bisect.pyo
3
KB
-rw-r--r--
cProfile.py
6.43
KB
-rwxr-xr-x
cProfile.pyc
6.25
KB
-rw-r--r--
cProfile.pyo
6.25
KB
-rw-r--r--
calendar.py
22.76
KB
-rw-r--r--
calendar.pyc
27.13
KB
-rw-r--r--
calendar.pyo
27.13
KB
-rw-r--r--
cgi.py
33.68
KB
-rwxr-xr-x
cgi.pyc
31.71
KB
-rw-r--r--
cgi.pyo
31.71
KB
-rw-r--r--
cgitb.py
11.89
KB
-rw-r--r--
cgitb.pyc
11.9
KB
-rw-r--r--
cgitb.pyo
11.9
KB
-rw-r--r--
chunk.py
5.25
KB
-rw-r--r--
chunk.pyc
5.46
KB
-rw-r--r--
chunk.pyo
5.46
KB
-rw-r--r--
cmd.py
14.67
KB
-rw-r--r--
cmd.pyc
13.71
KB
-rw-r--r--
cmd.pyo
13.71
KB
-rw-r--r--
code.py
9.95
KB
-rw-r--r--
code.pyc
10.09
KB
-rw-r--r--
code.pyo
10.09
KB
-rw-r--r--
codecs.py
34.44
KB
-rw-r--r--
codecs.pyc
35.74
KB
-rw-r--r--
codecs.pyo
35.74
KB
-rw-r--r--
codeop.py
5.86
KB
-rw-r--r--
codeop.pyc
6.44
KB
-rw-r--r--
codeop.pyo
6.44
KB
-rw-r--r--
collections.py
25.28
KB
-rw-r--r--
collections.pyc
23.99
KB
-rw-r--r--
collections.pyo
23.94
KB
-rw-r--r--
colorsys.py
3.6
KB
-rw-r--r--
colorsys.pyc
3.9
KB
-rw-r--r--
colorsys.pyo
3.9
KB
-rw-r--r--
commands.py
2.49
KB
-rw-r--r--
commands.pyc
2.41
KB
-rw-r--r--
commands.pyo
2.41
KB
-rw-r--r--
compileall.py
7.58
KB
-rw-r--r--
compileall.pyc
6.85
KB
-rw-r--r--
compileall.pyo
6.85
KB
-rw-r--r--
contextlib.py
4.32
KB
-rw-r--r--
contextlib.pyc
4.35
KB
-rw-r--r--
contextlib.pyo
4.35
KB
-rw-r--r--
cookielib.py
63.21
KB
-rw-r--r--
cookielib.pyc
53.55
KB
-rw-r--r--
cookielib.pyo
53.37
KB
-rw-r--r--
copy.py
11.25
KB
-rw-r--r--
copy.pyc
11.91
KB
-rw-r--r--
copy.pyo
11.82
KB
-rw-r--r--
copy_reg.py
6.64
KB
-rw-r--r--
copy_reg.pyc
4.99
KB
-rw-r--r--
copy_reg.pyo
4.95
KB
-rw-r--r--
crypt.py
2.24
KB
-rw-r--r--
crypt.pyc
2.89
KB
-rw-r--r--
crypt.pyo
2.89
KB
-rw-r--r--
csv.py
15.96
KB
-rw-r--r--
csv.pyc
13.14
KB
-rw-r--r--
csv.pyo
13.14
KB
-rw-r--r--
dbhash.py
498
B
-rw-r--r--
dbhash.pyc
718
B
-rw-r--r--
dbhash.pyo
718
B
-rw-r--r--
decimal.py
215.84
KB
-rw-r--r--
decimal.pyc
167.33
KB
-rw-r--r--
decimal.pyo
167.33
KB
-rw-r--r--
difflib.py
80.42
KB
-rw-r--r--
difflib.pyc
60.5
KB
-rw-r--r--
difflib.pyo
60.45
KB
-rw-r--r--
dircache.py
1.1
KB
-rw-r--r--
dircache.pyc
1.54
KB
-rw-r--r--
dircache.pyo
1.54
KB
-rw-r--r--
dis.py
6.35
KB
-rw-r--r--
dis.pyc
6.08
KB
-rw-r--r--
dis.pyo
6.08
KB
-rw-r--r--
doctest.py
102.01
KB
-rw-r--r--
doctest.pyc
81.45
KB
-rw-r--r--
doctest.pyo
81.17
KB
-rw-r--r--
dumbdbm.py
8.61
KB
-rw-r--r--
dumbdbm.pyc
6.41
KB
-rw-r--r--
dumbdbm.pyo
6.41
KB
-rw-r--r--
dummy_thread.py
4.31
KB
-rw-r--r--
dummy_thread.pyc
5.27
KB
-rw-r--r--
dummy_thread.pyo
5.27
KB
-rw-r--r--
dummy_threading.py
2.74
KB
-rw-r--r--
dummy_threading.pyc
1.25
KB
-rw-r--r--
dummy_threading.pyo
1.25
KB
-rw-r--r--
filecmp.py
9.36
KB
-rw-r--r--
filecmp.pyc
9.4
KB
-rw-r--r--
filecmp.pyo
9.4
KB
-rw-r--r--
fileinput.py
13.81
KB
-rw-r--r--
fileinput.pyc
14.48
KB
-rw-r--r--
fileinput.pyo
14.48
KB
-rw-r--r--
fnmatch.py
3.16
KB
-rw-r--r--
fnmatch.pyc
3.45
KB
-rw-r--r--
fnmatch.pyo
3.45
KB
-rw-r--r--
formatter.py
14.56
KB
-rw-r--r--
formatter.pyc
18.73
KB
-rw-r--r--
formatter.pyo
18.73
KB
-rw-r--r--
fpformat.py
4.59
KB
-rw-r--r--
fpformat.pyc
4.56
KB
-rw-r--r--
fpformat.pyo
4.56
KB
-rw-r--r--
fractions.py
21.87
KB
-rw-r--r--
fractions.pyc
19.27
KB
-rw-r--r--
fractions.pyo
19.27
KB
-rw-r--r--
ftplib.py
36.1
KB
-rw-r--r--
ftplib.pyc
33.38
KB
-rw-r--r--
ftplib.pyo
33.38
KB
-rw-r--r--
functools.py
4.37
KB
-rw-r--r--
functools.pyc
5.95
KB
-rw-r--r--
functools.pyo
5.95
KB
-rw-r--r--
genericpath.py
2.94
KB
-rw-r--r--
genericpath.pyc
3.19
KB
-rw-r--r--
genericpath.pyo
3.19
KB
-rw-r--r--
getopt.py
7.15
KB
-rw-r--r--
getopt.pyc
6.5
KB
-rw-r--r--
getopt.pyo
6.45
KB
-rw-r--r--
getpass.py
5.43
KB
-rw-r--r--
getpass.pyc
4.63
KB
-rw-r--r--
getpass.pyo
4.63
KB
-rw-r--r--
gettext.py
19.47
KB
-rw-r--r--
gettext.pyc
15.19
KB
-rw-r--r--
gettext.pyo
15.19
KB
-rw-r--r--
glob.py
2.86
KB
-rw-r--r--
glob.pyc
2.83
KB
-rw-r--r--
glob.pyo
2.83
KB
-rw-r--r--
gzip.py
18.26
KB
-rw-r--r--
gzip.pyc
14.72
KB
-rw-r--r--
gzip.pyo
14.72
KB
-rw-r--r--
hashlib.py
7.48
KB
-rw-r--r--
hashlib.pyc
6.74
KB
-rw-r--r--
hashlib.pyo
6.74
KB
-rw-r--r--
heapq.py
17.76
KB
-rw-r--r--
heapq.pyc
14.13
KB
-rw-r--r--
heapq.pyo
14.13
KB
-rw-r--r--
hmac.py
4.48
KB
-rw-r--r--
hmac.pyc
4.44
KB
-rw-r--r--
hmac.pyo
4.44
KB
-rw-r--r--
htmlentitydefs.py
17.63
KB
-rw-r--r--
htmlentitydefs.pyc
6.22
KB
-rw-r--r--
htmlentitydefs.pyo
6.22
KB
-rw-r--r--
htmllib.py
12.57
KB
-rw-r--r--
htmllib.pyc
19.83
KB
-rw-r--r--
htmllib.pyo
19.83
KB
-rw-r--r--
httplib.py
51.37
KB
-rw-r--r--
httplib.pyc
37.54
KB
-rw-r--r--
httplib.pyo
37.37
KB
-rw-r--r--
ihooks.py
18.54
KB
-rw-r--r--
ihooks.pyc
20.87
KB
-rw-r--r--
ihooks.pyo
20.87
KB
-rw-r--r--
imaplib.py
47.14
KB
-rw-r--r--
imaplib.pyc
44.28
KB
-rw-r--r--
imaplib.pyo
41.63
KB
-rw-r--r--
imghdr.py
3.46
KB
-rw-r--r--
imghdr.pyc
4.73
KB
-rw-r--r--
imghdr.pyo
4.73
KB
-rw-r--r--
imputil.py
25.16
KB
-rw-r--r--
imputil.pyc
15.26
KB
-rw-r--r--
imputil.pyo
15.08
KB
-rw-r--r--
inspect.py
41.47
KB
-rw-r--r--
inspect.pyc
39.04
KB
-rw-r--r--
inspect.pyo
39.04
KB
-rw-r--r--
io.py
3.12
KB
-rw-r--r--
io.pyc
3.4
KB
-rw-r--r--
io.pyo
3.4
KB
-rw-r--r--
keyword.py
1.95
KB
-rwxr-xr-x
keyword.pyc
2.06
KB
-rw-r--r--
keyword.pyo
2.06
KB
-rw-r--r--
linecache.py
3.87
KB
-rw-r--r--
linecache.pyc
3.14
KB
-rw-r--r--
linecache.pyo
3.14
KB
-rw-r--r--
locale.py
87.33
KB
-rw-r--r--
locale.pyc
48.77
KB
-rw-r--r--
locale.pyo
48.77
KB
-rw-r--r--
macpath.py
6.11
KB
-rw-r--r--
macpath.pyc
7.47
KB
-rw-r--r--
macpath.pyo
7.47
KB
-rw-r--r--
macurl2path.py
3.2
KB
-rw-r--r--
macurl2path.pyc
2.71
KB
-rw-r--r--
macurl2path.pyo
2.71
KB
-rw-r--r--
mailbox.py
78.86
KB
-rw-r--r--
mailbox.pyc
74.87
KB
-rw-r--r--
mailbox.pyo
74.82
KB
-rw-r--r--
mailcap.py
7.25
KB
-rw-r--r--
mailcap.pyc
6.92
KB
-rw-r--r--
mailcap.pyo
6.92
KB
-rw-r--r--
markupbase.py
14.3
KB
-rw-r--r--
markupbase.pyc
9.08
KB
-rw-r--r--
markupbase.pyo
8.89
KB
-rw-r--r--
md5.py
358
B
-rw-r--r--
md5.pyc
378
B
-rw-r--r--
md5.pyo
378
B
-rw-r--r--
mhlib.py
32.65
KB
-rw-r--r--
mhlib.pyc
33.01
KB
-rw-r--r--
mhlib.pyo
33.01
KB
-rw-r--r--
mimetools.py
7
KB
-rw-r--r--
mimetools.pyc
8.03
KB
-rw-r--r--
mimetools.pyo
8.03
KB
-rw-r--r--
mimetypes.py
20.22
KB
-rw-r--r--
mimetypes.pyc
17.86
KB
-rw-r--r--
mimetypes.pyo
17.86
KB
-rw-r--r--
mimify.py
14.67
KB
-rwxr-xr-x
mimify.pyc
11.71
KB
-rw-r--r--
mimify.pyo
11.71
KB
-rw-r--r--
modulefinder.py
23.71
KB
-rw-r--r--
modulefinder.pyc
18.27
KB
-rw-r--r--
modulefinder.pyo
18.19
KB
-rw-r--r--
multifile.py
4.71
KB
-rw-r--r--
multifile.pyc
5.29
KB
-rw-r--r--
multifile.pyo
5.25
KB
-rw-r--r--
mutex.py
1.83
KB
-rw-r--r--
mutex.pyc
2.46
KB
-rw-r--r--
mutex.pyo
2.46
KB
-rw-r--r--
netrc.py
4.47
KB
-rw-r--r--
netrc.pyc
3.83
KB
-rw-r--r--
netrc.pyo
3.83
KB
-rw-r--r--
new.py
610
B
-rw-r--r--
new.pyc
862
B
-rw-r--r--
new.pyo
862
B
-rw-r--r--
nntplib.py
20.97
KB
-rw-r--r--
nntplib.pyc
20.55
KB
-rw-r--r--
nntplib.pyo
20.55
KB
-rw-r--r--
ntpath.py
18.02
KB
-rw-r--r--
ntpath.pyc
11.6
KB
-rw-r--r--
ntpath.pyo
11.56
KB
-rw-r--r--
nturl2path.py
2.32
KB
-rw-r--r--
nturl2path.pyc
1.77
KB
-rw-r--r--
nturl2path.pyo
1.77
KB
-rw-r--r--
numbers.py
10.08
KB
-rw-r--r--
numbers.pyc
13.68
KB
-rw-r--r--
numbers.pyo
13.68
KB
-rw-r--r--
opcode.py
5.35
KB
-rw-r--r--
opcode.pyc
6
KB
-rw-r--r--
opcode.pyo
6
KB
-rw-r--r--
optparse.py
59.69
KB
-rw-r--r--
optparse.pyc
52.78
KB
-rw-r--r--
optparse.pyo
52.7
KB
-rw-r--r--
os.py
25.17
KB
-rw-r--r--
os.pyc
24.96
KB
-rw-r--r--
os.pyo
24.96
KB
-rw-r--r--
os2emxpath.py
4.5
KB
-rw-r--r--
os2emxpath.pyc
4.39
KB
-rw-r--r--
os2emxpath.pyo
4.39
KB
-rw-r--r--
pdb.doc
7.73
KB
-rw-r--r--
pdb.py
44.94
KB
-rwxr-xr-x
pdb.pyc
42.59
KB
-rw-r--r--
pdb.pyo
42.59
KB
-rw-r--r--
pickle.py
44.09
KB
-rw-r--r--
pickle.pyc
37.56
KB
-rw-r--r--
pickle.pyo
37.37
KB
-rw-r--r--
pickletools.py
72.79
KB
-rw-r--r--
pickletools.pyc
55.77
KB
-rw-r--r--
pickletools.pyo
54.95
KB
-rw-r--r--
pipes.py
9.36
KB
-rw-r--r--
pipes.pyc
9.09
KB
-rw-r--r--
pipes.pyo
9.09
KB
-rw-r--r--
pkgutil.py
19.87
KB
-rw-r--r--
pkgutil.pyc
18.49
KB
-rw-r--r--
pkgutil.pyo
18.49
KB
-rw-r--r--
platform.py
51.97
KB
-rwxr-xr-x
platform.pyc
36.04
KB
-rw-r--r--
platform.pyo
36.04
KB
-rw-r--r--
plistlib.py
15.44
KB
-rw-r--r--
plistlib.pyc
19.52
KB
-rw-r--r--
plistlib.pyo
19.44
KB
-rw-r--r--
popen2.py
8.22
KB
-rw-r--r--
popen2.pyc
8.81
KB
-rw-r--r--
popen2.pyo
8.77
KB
-rw-r--r--
poplib.py
12.52
KB
-rw-r--r--
poplib.pyc
13.03
KB
-rw-r--r--
poplib.pyo
13.03
KB
-rw-r--r--
posixfile.py
7.82
KB
-rw-r--r--
posixfile.pyc
7.47
KB
-rw-r--r--
posixfile.pyo
7.47
KB
-rw-r--r--
posixpath.py
13.27
KB
-rw-r--r--
posixpath.pyc
11.03
KB
-rw-r--r--
posixpath.pyo
11.03
KB
-rw-r--r--
pprint.py
11.73
KB
-rw-r--r--
pprint.pyc
10.06
KB
-rw-r--r--
pprint.pyo
9.89
KB
-rw-r--r--
profile.py
22.25
KB
-rwxr-xr-x
profile.pyc
16.07
KB
-rw-r--r--
profile.pyo
15.83
KB
-rw-r--r--
pstats.py
26.08
KB
-rw-r--r--
pstats.pyc
24.43
KB
-rw-r--r--
pstats.pyo
24.43
KB
-rw-r--r--
pty.py
4.94
KB
-rw-r--r--
pty.pyc
4.85
KB
-rw-r--r--
pty.pyo
4.85
KB
-rw-r--r--
py_compile.py
5.79
KB
-rw-r--r--
py_compile.pyc
6.27
KB
-rw-r--r--
py_compile.pyo
6.27
KB
-rw-r--r--
pyclbr.py
13.07
KB
-rw-r--r--
pyclbr.pyc
9.42
KB
-rw-r--r--
pyclbr.pyo
9.42
KB
-rw-r--r--
pydoc.py
91.12
KB
-rwxr-xr-x
pydoc.pyc
88.35
KB
-rw-r--r--
pydoc.pyo
88.29
KB
-rw-r--r--
quopri.py
6.81
KB
-rwxr-xr-x
quopri.pyc
6.42
KB
-rw-r--r--
quopri.pyo
6.42
KB
-rw-r--r--
random.py
31.45
KB
-rw-r--r--
random.pyc
24.99
KB
-rw-r--r--
random.pyo
24.99
KB
-rw-r--r--
re.py
12.66
KB
-rw-r--r--
re.pyc
12.79
KB
-rw-r--r--
re.pyo
12.79
KB
-rw-r--r--
repr.py
4.2
KB
-rw-r--r--
repr.pyc
5.26
KB
-rw-r--r--
repr.pyo
5.26
KB
-rw-r--r--
rexec.py
19.68
KB
-rw-r--r--
rexec.pyc
23.58
KB
-rw-r--r--
rexec.pyo
23.58
KB
-rw-r--r--
rfc822.py
32.51
KB
-rw-r--r--
rfc822.pyc
31.05
KB
-rw-r--r--
rfc822.pyo
31.05
KB
-rw-r--r--
rlcompleter.py
5.68
KB
-rw-r--r--
rlcompleter.pyc
5.84
KB
-rw-r--r--
rlcompleter.pyo
5.84
KB
-rw-r--r--
robotparser.py
7.03
KB
-rw-r--r--
robotparser.pyc
7.7
KB
-rw-r--r--
robotparser.pyo
7.7
KB
-rw-r--r--
runpy.py
10.45
KB
-rw-r--r--
runpy.pyc
8.21
KB
-rw-r--r--
runpy.pyo
8.21
KB
-rw-r--r--
sched.py
4.97
KB
-rw-r--r--
sched.pyc
4.88
KB
-rw-r--r--
sched.pyo
4.88
KB
-rw-r--r--
sets.py
18.6
KB
-rw-r--r--
sets.pyc
16.5
KB
-rw-r--r--
sets.pyo
16.5
KB
-rw-r--r--
sgmllib.py
17.46
KB
-rw-r--r--
sgmllib.pyc
15.07
KB
-rw-r--r--
sgmllib.pyo
15.07
KB
-rw-r--r--
sha.py
393
B
-rw-r--r--
sha.pyc
421
B
-rw-r--r--
sha.pyo
421
B
-rw-r--r--
shelve.py
7.89
KB
-rw-r--r--
shelve.pyc
10.03
KB
-rw-r--r--
shelve.pyo
10.03
KB
-rw-r--r--
shlex.py
10.88
KB
-rw-r--r--
shlex.pyc
7.37
KB
-rw-r--r--
shlex.pyo
7.37
KB
-rw-r--r--
shutil.py
18.46
KB
-rw-r--r--
shutil.pyc
18.1
KB
-rw-r--r--
shutil.pyo
18.1
KB
-rw-r--r--
site.py
19.61
KB
-rw-r--r--
site.pyc
19.11
KB
-rw-r--r--
site.pyo
19.11
KB
-rw-r--r--
smtpd.py
18.11
KB
-rwxr-xr-x
smtpd.pyc
15.52
KB
-rw-r--r--
smtpd.pyo
15.52
KB
-rw-r--r--
smtplib.py
30.9
KB
-rwxr-xr-x
smtplib.pyc
29.29
KB
-rw-r--r--
smtplib.pyo
29.29
KB
-rw-r--r--
sndhdr.py
5.83
KB
-rw-r--r--
sndhdr.pyc
7.18
KB
-rw-r--r--
sndhdr.pyo
7.18
KB
-rw-r--r--
socket.py
20.03
KB
-rw-r--r--
socket.pyc
15.73
KB
-rw-r--r--
socket.pyo
15.64
KB
-rw-r--r--
sre.py
384
B
-rw-r--r--
sre.pyc
519
B
-rw-r--r--
sre.pyo
519
B
-rw-r--r--
sre_compile.py
15.99
KB
-rw-r--r--
sre_compile.pyc
10.76
KB
-rw-r--r--
sre_compile.pyo
10.65
KB
-rw-r--r--
sre_constants.py
6.95
KB
-rw-r--r--
sre_constants.pyc
5.97
KB
-rw-r--r--
sre_constants.pyo
5.97
KB
-rw-r--r--
sre_parse.py
26.84
KB
-rw-r--r--
sre_parse.pyc
18.98
KB
-rw-r--r--
sre_parse.pyo
18.98
KB
-rw-r--r--
ssl.py
38.7
KB
-rw-r--r--
ssl.pyc
32.05
KB
-rw-r--r--
ssl.pyo
32.05
KB
-rw-r--r--
stat.py
1.8
KB
-rw-r--r--
stat.pyc
2.69
KB
-rw-r--r--
stat.pyo
2.69
KB
-rw-r--r--
statvfs.py
898
B
-rw-r--r--
statvfs.pyc
620
B
-rw-r--r--
statvfs.pyo
620
B
-rw-r--r--
string.py
20.27
KB
-rw-r--r--
string.pyc
19.54
KB
-rw-r--r--
string.pyo
19.54
KB
-rw-r--r--
stringold.py
12.16
KB
-rw-r--r--
stringold.pyc
12.25
KB
-rw-r--r--
stringold.pyo
12.25
KB
-rw-r--r--
stringprep.py
13.21
KB
-rw-r--r--
stringprep.pyc
14.15
KB
-rw-r--r--
stringprep.pyo
14.08
KB
-rw-r--r--
struct.py
82
B
-rw-r--r--
struct.pyc
239
B
-rw-r--r--
struct.pyo
239
B
-rw-r--r--
subprocess.py
57.68
KB
-rw-r--r--
subprocess.pyc
40.93
KB
-rw-r--r--
subprocess.pyo
40.93
KB
-rw-r--r--
sunau.py
16.15
KB
-rw-r--r--
sunau.pyc
17.53
KB
-rw-r--r--
sunau.pyo
17.53
KB
-rw-r--r--
sunaudio.py
1.37
KB
-rw-r--r--
sunaudio.pyc
1.94
KB
-rw-r--r--
sunaudio.pyo
1.94
KB
-rw-r--r--
symbol.py
2.01
KB
-rwxr-xr-x
symbol.pyc
2.96
KB
-rw-r--r--
symbol.pyo
2.96
KB
-rw-r--r--
symtable.py
7.34
KB
-rw-r--r--
symtable.pyc
11.59
KB
-rw-r--r--
symtable.pyo
11.46
KB
-rw-r--r--
sysconfig.py
21.88
KB
-rw-r--r--
sysconfig.pyc
17.23
KB
-rw-r--r--
sysconfig.pyo
17.23
KB
-rw-r--r--
tabnanny.py
11.07
KB
-rwxr-xr-x
tabnanny.pyc
8.05
KB
-rw-r--r--
tabnanny.pyo
8.05
KB
-rw-r--r--
tarfile.py
88
KB
-rw-r--r--
tarfile.pyc
73.78
KB
-rw-r--r--
tarfile.pyo
73.78
KB
-rw-r--r--
telnetlib.py
26.18
KB
-rw-r--r--
telnetlib.pyc
22.53
KB
-rw-r--r--
telnetlib.pyo
22.53
KB
-rw-r--r--
tempfile.py
17.91
KB
-rw-r--r--
tempfile.pyc
19.35
KB
-rw-r--r--
tempfile.pyo
19.35
KB
-rw-r--r--
textwrap.py
16.64
KB
-rw-r--r--
textwrap.pyc
11.62
KB
-rw-r--r--
textwrap.pyo
11.53
KB
-rw-r--r--
this.py
1002
B
-rw-r--r--
this.pyc
1.19
KB
-rw-r--r--
this.pyo
1.19
KB
-rw-r--r--
threading.py
46.28
KB
-rw-r--r--
threading.pyc
41.7
KB
-rw-r--r--
threading.pyo
39.58
KB
-rw-r--r--
timeit.py
11.82
KB
-rw-r--r--
timeit.pyc
11.5
KB
-rw-r--r--
timeit.pyo
11.5
KB
-rw-r--r--
toaiff.py
3.07
KB
-rw-r--r--
toaiff.pyc
3.03
KB
-rw-r--r--
toaiff.pyo
3.03
KB
-rw-r--r--
token.py
2.88
KB
-rwxr-xr-x
token.pyc
3.73
KB
-rw-r--r--
token.pyo
3.73
KB
-rw-r--r--
tokenize.py
16.15
KB
-rw-r--r--
tokenize.pyc
13.61
KB
-rw-r--r--
tokenize.pyo
13.52
KB
-rw-r--r--
trace.py
29.19
KB
-rw-r--r--
trace.pyc
22.26
KB
-rw-r--r--
trace.pyo
22.2
KB
-rw-r--r--
traceback.py
10.99
KB
-rw-r--r--
traceback.pyc
11.35
KB
-rw-r--r--
traceback.pyo
11.35
KB
-rw-r--r--
tty.py
879
B
-rw-r--r--
tty.pyc
1.29
KB
-rw-r--r--
tty.pyo
1.29
KB
-rw-r--r--
types.py
1.99
KB
-rw-r--r--
types.pyc
2.45
KB
-rw-r--r--
types.pyo
2.45
KB
-rw-r--r--
urllib.py
57.14
KB
-rw-r--r--
urllib.pyc
49.1
KB
-rw-r--r--
urllib.pyo
49
KB
-rw-r--r--
urllib2.py
51.87
KB
-rw-r--r--
urllib2.pyc
46.61
KB
-rw-r--r--
urllib2.pyo
46.52
KB
-rw-r--r--
urlparse.py
16.44
KB
-rw-r--r--
urlparse.pyc
15.38
KB
-rw-r--r--
urlparse.pyo
15.38
KB
-rw-r--r--
user.py
1.59
KB
-rw-r--r--
user.pyc
1.68
KB
-rw-r--r--
user.pyo
1.68
KB
-rw-r--r--
uu.py
6.4
KB
-rwxr-xr-x
uu.pyc
4.21
KB
-rw-r--r--
uu.pyo
4.21
KB
-rw-r--r--
uuid.py
20.6
KB
-rw-r--r--
uuid.pyc
20.68
KB
-rw-r--r--
uuid.pyo
20.68
KB
-rw-r--r--
warnings.py
13.71
KB
-rw-r--r--
warnings.pyc
12.84
KB
-rw-r--r--
warnings.pyo
12.02
KB
-rw-r--r--
wave.py
17.67
KB
-rw-r--r--
wave.pyc
19
KB
-rw-r--r--
wave.pyo
18.94
KB
-rw-r--r--
weakref.py
10.44
KB
-rw-r--r--
weakref.pyc
13.72
KB
-rw-r--r--
weakref.pyo
13.72
KB
-rw-r--r--
webbrowser.py
22.19
KB
-rw-r--r--
webbrowser.pyc
19.32
KB
-rw-r--r--
webbrowser.pyo
19.27
KB
-rw-r--r--
whichdb.py
3.3
KB
-rw-r--r--
whichdb.pyc
2.19
KB
-rw-r--r--
whichdb.pyo
2.19
KB
-rw-r--r--
wsgiref.egg-info
187
B
-rw-r--r--
xdrlib.py
5.43
KB
-rw-r--r--
xdrlib.pyc
9.07
KB
-rw-r--r--
xdrlib.pyo
9.07
KB
-rw-r--r--
xmllib.py
34.05
KB
-rw-r--r--
xmllib.pyc
26.22
KB
-rw-r--r--
xmllib.pyo
26.22
KB
-rw-r--r--
xmlrpclib.py
50.78
KB
-rw-r--r--
xmlrpclib.pyc
42.89
KB
-rw-r--r--
xmlrpclib.pyo
42.71
KB
-rw-r--r--
zipfile.py
56.45
KB
-rw-r--r--
zipfile.pyc
40.33
KB
-rw-r--r--
zipfile.pyo
40.33
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : urlparse.py
"""Parse (absolute and relative) URLs. urlparse module is based upon the following RFC specifications. RFC 3986 (STD66): "Uniform Resource Identifiers" by T. Berners-Lee, R. Fielding and L. Masinter, January 2005. RFC 2732 : "Format for Literal IPv6 Addresses in URL's by R.Hinden, B.Carpenter and L.Masinter, December 1999. RFC 2396: "Uniform Resource Identifiers (URI)": Generic Syntax by T. Berners-Lee, R. Fielding, and L. Masinter, August 1998. RFC 2368: "The mailto URL scheme", by P.Hoffman , L Masinter, J. Zwinski, July 1998. RFC 1808: "Relative Uniform Resource Locators", by R. Fielding, UC Irvine, June 1995. RFC 1738: "Uniform Resource Locators (URL)" by T. Berners-Lee, L. Masinter, M. McCahill, December 1994 RFC 3986 is considered the current standard and any future changes to urlparse module should conform with it. The urlparse module is currently not entirely compliant with this RFC due to defacto scenarios for parsing, and for backward compatibility purposes, some parsing quirks from older RFCs are retained. The testcases in test_urlparse.py provides a good indicator of parsing behavior. The WHATWG URL Parser spec should also be considered. We are not compliant with it either due to existing user code API behavior expectations (Hyrum's Law). It serves as a useful guide when making changes. """ import re __all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", "urlsplit", "urlunsplit", "parse_qs", "parse_qsl"] # A classification of schemes ('' means apply by default) uses_relative = ['ftp', 'http', 'gopher', 'nntp', 'imap', 'wais', 'file', 'https', 'shttp', 'mms', 'prospero', 'rtsp', 'rtspu', '', 'sftp', 'svn', 'svn+ssh'] uses_netloc = ['ftp', 'http', 'gopher', 'nntp', 'telnet', 'imap', 'wais', 'file', 'mms', 'https', 'shttp', 'snews', 'prospero', 'rtsp', 'rtspu', 'rsync', '', 'svn', 'svn+ssh', 'sftp','nfs','git', 'git+ssh'] uses_params = ['ftp', 'hdl', 'prospero', 'http', 'imap', 'https', 'shttp', 'rtsp', 'rtspu', 'sip', 'sips', 'mms', '', 'sftp', 'tel'] # These are not actually used anymore, but should stay for backwards # compatibility. (They are undocumented, but have a public-looking name.) non_hierarchical = ['gopher', 'hdl', 'mailto', 'news', 'telnet', 'wais', 'imap', 'snews', 'sip', 'sips'] uses_query = ['http', 'wais', 'imap', 'https', 'shttp', 'mms', 'gopher', 'rtsp', 'rtspu', 'sip', 'sips', ''] uses_fragment = ['ftp', 'hdl', 'http', 'gopher', 'news', 'nntp', 'wais', 'https', 'shttp', 'snews', 'file', 'prospero', ''] # Characters valid in scheme names scheme_chars = ('abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '0123456789' '+-.') # Leading and trailing C0 control and space to be stripped per WHATWG spec. # == "".join([chr(i) for i in range(0, 0x20 + 1)]) _WHATWG_C0_CONTROL_OR_SPACE = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ' # Unsafe bytes to be removed per WHATWG spec _UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] MAX_CACHE_SIZE = 20 _parse_cache = {} def clear_cache(): """Clear the parse cache.""" _parse_cache.clear() class ResultMixin(object): """Shared methods for the parsed result objects.""" @property def username(self): netloc = self.netloc if "@" in netloc: userinfo = netloc.rsplit("@", 1)[0] if ":" in userinfo: userinfo = userinfo.split(":", 1)[0] return userinfo return None @property def password(self): netloc = self.netloc if "@" in netloc: userinfo = netloc.rsplit("@", 1)[0] if ":" in userinfo: return userinfo.split(":", 1)[1] return None @property def hostname(self): netloc = self.netloc.split('@')[-1] if '[' in netloc and ']' in netloc: return netloc.split(']')[0][1:].lower() elif ':' in netloc: return netloc.split(':')[0].lower() elif netloc == '': return None else: return netloc.lower() @property def port(self): netloc = self.netloc.split('@')[-1].split(']')[-1] if ':' in netloc: port = netloc.split(':')[1] port = int(port, 10) # verify legal port if (0 <= port <= 65535): return port return None from collections import namedtuple class SplitResult(namedtuple('SplitResult', 'scheme netloc path query fragment'), ResultMixin): __slots__ = () def geturl(self): return urlunsplit(self) class ParseResult(namedtuple('ParseResult', 'scheme netloc path params query fragment'), ResultMixin): __slots__ = () def geturl(self): return urlunparse(self) def urlparse(url, scheme='', allow_fragments=True): """Parse a URL into 6 components: <scheme>://<netloc>/<path>;<params>?<query>#<fragment> Return a 6-tuple: (scheme, netloc, path, params, query, fragment). Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" tuple = urlsplit(url, scheme, allow_fragments) scheme, netloc, url, query, fragment = tuple if scheme in uses_params and ';' in url: url, params = _splitparams(url) else: params = '' return ParseResult(scheme, netloc, url, params, query, fragment) def _splitparams(url): if '/' in url: i = url.find(';', url.rfind('/')) if i < 0: return url, '' else: i = url.find(';') return url[:i], url[i+1:] def _splitnetloc(url, start=0): delim = len(url) # position of end of domain part of url, default is end for c in '/?#': # look for delimiters; the order is NOT important wdelim = url.find(c, start) # find first of this delim if wdelim >= 0: # if found delim = min(delim, wdelim) # use earliest delim position return url[start:delim], url[delim:] # return (domain, rest) def _checknetloc(netloc): if not netloc or not isinstance(netloc, unicode): return # looking for characters like \u2100 that expand to 'a/c' # IDNA uses NFKC equivalence, so normalize for this check import unicodedata n = netloc.replace(u'@', u'') # ignore characters already included n = n.replace(u':', u'') # but not the surrounding text n = n.replace(u'#', u'') n = n.replace(u'?', u'') netloc2 = unicodedata.normalize('NFKC', n) if n == netloc2: return for c in '/?#@:': if c in netloc2: raise ValueError("netloc %r contains invalid characters " "under NFKC normalization" % netloc) def _remove_unsafe_bytes_from_url(url): for b in _UNSAFE_URL_BYTES_TO_REMOVE: url = url.replace(b, "") return url def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: <scheme>://<netloc>/<path>?<query>#<fragment> Return a 5-tuple: (scheme, netloc, path, query, fragment). Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" url = _remove_unsafe_bytes_from_url(url) scheme = _remove_unsafe_bytes_from_url(scheme) url = url.lstrip(_WHATWG_C0_CONTROL_OR_SPACE) scheme = scheme.strip(_WHATWG_C0_CONTROL_OR_SPACE) allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) if cached: return cached if len(_parse_cache) >= MAX_CACHE_SIZE: # avoid runaway growth clear_cache() netloc = query = fragment = '' i = url.find(':') if i > 0: if url[:i] == 'http': # optimize the common case scheme = url[:i].lower() url = url[i+1:] if url[:2] == '//': netloc, url = _splitnetloc(url, 2) if (('[' in netloc and ']' not in netloc) or (']' in netloc and '[' not in netloc)): raise ValueError("Invalid IPv6 URL") if allow_fragments and '#' in url: url, fragment = url.split('#', 1) if '?' in url: url, query = url.split('?', 1) _checknetloc(netloc) v = SplitResult(scheme, netloc, url, query, fragment) _parse_cache[key] = v return v for c in url[:i]: if c not in scheme_chars: break else: # make sure "url" is not actually a port number (in which case # "scheme" is really part of the path) rest = url[i+1:] if not rest or any(c not in '0123456789' for c in rest): # not a port number scheme, url = url[:i].lower(), rest if url[:2] == '//': netloc, url = _splitnetloc(url, 2) if (('[' in netloc and ']' not in netloc) or (']' in netloc and '[' not in netloc)): raise ValueError("Invalid IPv6 URL") if allow_fragments and '#' in url: url, fragment = url.split('#', 1) if '?' in url: url, query = url.split('?', 1) _checknetloc(netloc) v = SplitResult(scheme, netloc, url, query, fragment) _parse_cache[key] = v return v def urlunparse(data): """Put a parsed URL back together again. This may result in a slightly different, but equivalent URL, if the URL that was parsed originally had redundant delimiters, e.g. a ? with an empty query (the draft states that these are equivalent).""" scheme, netloc, url, params, query, fragment = data if params: url = "%s;%s" % (url, params) return urlunsplit((scheme, netloc, url, query, fragment)) def urlunsplit(data): """Combine the elements of a tuple as returned by urlsplit() into a complete URL as a string. The data argument can be any five-item iterable. This may result in a slightly different, but equivalent URL, if the URL that was parsed originally had unnecessary delimiters (for example, a ? with an empty query; the RFC states that these are equivalent).""" scheme, netloc, url, query, fragment = data if netloc or (scheme and scheme in uses_netloc and url[:2] != '//'): if url and url[:1] != '/': url = '/' + url url = '//' + (netloc or '') + url if scheme: url = scheme + ':' + url if query: url = url + '?' + query if fragment: url = url + '#' + fragment return url def urljoin(base, url, allow_fragments=True): """Join a base URL and a possibly relative URL to form an absolute interpretation of the latter.""" if not base: return url if not url: return base bscheme, bnetloc, bpath, bparams, bquery, bfragment = \ urlparse(base, '', allow_fragments) scheme, netloc, path, params, query, fragment = \ urlparse(url, bscheme, allow_fragments) if scheme != bscheme or scheme not in uses_relative: return url if scheme in uses_netloc: if netloc: return urlunparse((scheme, netloc, path, params, query, fragment)) netloc = bnetloc if path[:1] == '/': return urlunparse((scheme, netloc, path, params, query, fragment)) if not path and not params: path = bpath params = bparams if not query: query = bquery return urlunparse((scheme, netloc, path, params, query, fragment)) segments = bpath.split('/')[:-1] + path.split('/') # XXX The stuff below is bogus in various ways... if segments[-1] == '.': segments[-1] = '' while '.' in segments: segments.remove('.') while 1: i = 1 n = len(segments) - 1 while i < n: if (segments[i] == '..' and segments[i-1] not in ('', '..')): del segments[i-1:i+1] break i = i+1 else: break if segments == ['', '..']: segments[-1] = '' elif len(segments) >= 2 and segments[-1] == '..': segments[-2:] = [''] return urlunparse((scheme, netloc, '/'.join(segments), params, query, fragment)) def urldefrag(url): """Removes any existing fragment from URL. Returns a tuple of the defragmented URL and the fragment. If the URL contained no fragments, the second element is the empty string. """ if '#' in url: s, n, p, a, q, frag = urlparse(url) defrag = urlunparse((s, n, p, a, q, '')) return defrag, frag else: return url, '' try: unicode except NameError: def _is_unicode(x): return 0 else: def _is_unicode(x): return isinstance(x, unicode) # unquote method for parse_qs and parse_qsl # Cannot use directly from urllib as it would create a circular reference # because urllib uses urlparse methods (urljoin). If you update this function, # update it also in urllib. This code duplication does not existin in Python3. _hexdig = '0123456789ABCDEFabcdef' _hextochr = dict((a+b, chr(int(a+b,16))) for a in _hexdig for b in _hexdig) _asciire = re.compile('([\x00-\x7f]+)') def unquote(s): """unquote('abc%20def') -> 'abc def'.""" if _is_unicode(s): if '%' not in s: return s bits = _asciire.split(s) res = [bits[0]] append = res.append for i in range(1, len(bits), 2): append(unquote(str(bits[i])).decode('latin1')) append(bits[i + 1]) return ''.join(res) bits = s.split('%') # fastpath if len(bits) == 1: return s res = [bits[0]] append = res.append for item in bits[1:]: try: append(_hextochr[item[:2]]) append(item[2:]) except KeyError: append('%') append(item) return ''.join(res) def parse_qs(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument. Arguments: qs: percent-encoded query string to be parsed keep_blank_values: flag indicating whether blank values in percent-encoded queries should be treated as blank strings. A true value indicates that blanks should be retained as blank strings. The default false value indicates that blank values are to be ignored and treated as if they were not included. strict_parsing: flag indicating what to do with parsing errors. If false (the default), errors are silently ignored. If true, errors raise a ValueError exception. """ dict = {} for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): if name in dict: dict[name].append(value) else: dict[name] = [value] return dict def parse_qsl(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument. Arguments: qs: percent-encoded query string to be parsed keep_blank_values: flag indicating whether blank values in percent-encoded queries should be treated as blank strings. A true value indicates that blanks should be retained as blank strings. The default false value indicates that blank values are to be ignored and treated as if they were not included. strict_parsing: flag indicating what to do with parsing errors. If false (the default), errors are silently ignored. If true, errors raise a ValueError exception. Returns a list, as G-d intended. """ pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] r = [] for name_value in pairs: if not name_value and not strict_parsing: continue nv = name_value.split('=', 1) if len(nv) != 2: if strict_parsing: raise ValueError, "bad query field: %r" % (name_value,) # Handle case of a control-name with no equal sign if keep_blank_values: nv.append('') else: continue if len(nv[1]) or keep_blank_values: name = unquote(nv[0].replace('+', ' ')) value = unquote(nv[1].replace('+', ' ')) r.append((name, value)) return r
Close