OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
python2.7
Server IP: 10.0.0.4
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
11/20/2022 06:48:07 AM
rwxr-xr-x
📄
BaseHTTPServer.py
22.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
BaseHTTPServer.pyc
21.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Bastion.py
5.61 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Bastion.pyc
6.47 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
CGIHTTPServer.py
12.78 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
CGIHTTPServer.pyc
10.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ConfigParser.py
27.1 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ConfigParser.pyc
24.51 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Cookie.py
25.92 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Cookie.pyc
22.05 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
DocXMLRPCServer.py
10.52 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
DocXMLRPCServer.pyc
9.92 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
HTMLParser.py
16.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
HTMLParser.pyc
13.34 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
LICENSE.txt
12.47 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
MimeWriter.py
6.33 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
MimeWriter.pyc
7.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Queue.py
8.38 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Queue.pyc
9.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SimpleHTTPServer.py
7.81 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SimpleHTTPServer.pyc
7.8 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SimpleXMLRPCServer.py
25.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SimpleXMLRPCServer.pyc
22.26 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SocketServer.py
23.39 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SocketServer.pyc
23.41 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
StringIO.py
10.41 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
StringIO.pyc
11.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserDict.py
6.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
UserDict.pyc
9.4 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserList.py
3.56 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
UserList.pyc
6.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserString.py
9.46 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
UserString.pyc
14.38 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_LWPCookieJar.py
6.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_LWPCookieJar.pyc
5.29 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_MozillaCookieJar.py
5.66 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_MozillaCookieJar.pyc
4.35 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
__future__.py
4.28 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
__future__.pyc
4.11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
__phello__.foo.py
64 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
__phello__.foo.pyc
123 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
_abcoll.py
18.18 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_abcoll.pyc
24.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_osx_support.py
18.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_osx_support.pyc
11.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_pyio.py
68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_pyio.pyc
62.84 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_strptime.py
20.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_strptime.pyc
14.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_sysconfigdata.py
126 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
_sysconfigdata.pyc
279 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
_threading_local.py
7.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_threading_local.pyc
6.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_weakrefset.py
5.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_weakrefset.pyc
9.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
abc.py
6.98 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
abc.pyc
5.98 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
aifc.py
33.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
aifc.pyc
29.6 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
antigravity.py
60 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
antigravity.pyc
201 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
anydbm.py
2.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
anydbm.pyc
2.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
argparse.egg-info
217 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
argparse.py
87.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
argparse.pyc
62.56 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ast.py
11.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ast.pyc
12.59 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
asynchat.py
11.31 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
asynchat.pyc
8.54 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
asyncore.py
20.45 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
asyncore.pyc
18.33 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
atexit.py
1.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
atexit.pyc
2.14 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
audiodev.py
7.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
audiodev.pyc
8.22 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
base64.py
11.53 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
base64.pyc
11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
bdb.py
21.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
bdb.pyc
18.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
binhex.py
14.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
binhex.pyc
15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
bisect.py
2.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
bisect.pyc
2.99 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
bsddb
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
cProfile.py
6.42 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
cProfile.pyc
6.22 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
calendar.py
22.84 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
calendar.pyc
27.1 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cgi.py
34.96 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
cgi.pyc
32.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cgitb.py
11.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cgitb.pyc
11.82 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
chunk.py
5.29 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
chunk.pyc
5.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cmd.py
14.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cmd.pyc
13.67 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
code.py
9.95 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
code.pyc
10.06 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
codecs.py
35.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
codecs.pyc
35.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
codeop.py
5.86 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
codeop.pyc
6.42 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
collections.py
27.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
collections.pyc
25.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
colorsys.py
3.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
colorsys.pyc
3.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
commands.py
2.49 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
commands.pyc
2.4 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
compileall.py
7.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
compileall.pyc
6.84 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
compiler
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
config-x86_64-linux-gnu
-
07/15/2022 06:13:38 AM
rwxr-xr-x
📄
contextlib.py
4.32 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
contextlib.pyc
4.33 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cookielib.py
63.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cookielib.pyc
53.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
copy.py
11.26 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
copy.pyc
11.83 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
copy_reg.py
6.81 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
copy_reg.pyc
5.02 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
csv.py
16.32 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
csv.pyc
13.13 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
ctypes
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
curses
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
dbhash.py
498 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
dbhash.pyc
714 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
decimal.py
216.73 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
decimal.pyc
167.62 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
difflib.py
80.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
difflib.pyc
60.34 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
dircache.py
1.1 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dircache.pyc
1.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
dis.py
6.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dis.pyc
6.07 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
dist-packages
-
07/15/2022 06:13:39 AM
rwxr-xr-x
📁
distutils
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
doctest.py
102.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
doctest.pyc
81.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dumbdbm.py
8.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dumbdbm.pyc
6.55 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dummy_thread.py
4.31 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dummy_thread.pyc
5.24 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dummy_threading.py
2.74 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dummy_threading.pyc
1.25 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
email
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📁
encodings
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
ensurepip
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
filecmp.py
9.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
filecmp.pyc
9.36 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fileinput.py
13.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fileinput.pyc
14.1 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fnmatch.py
3.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fnmatch.pyc
3.52 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
formatter.py
14.56 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
formatter.pyc
18.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fpformat.py
4.62 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fpformat.pyc
4.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fractions.py
21.87 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fractions.pyc
19.17 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ftplib.py
37.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ftplib.pyc
33.99 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
functools.py
4.69 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
functools.pyc
6.42 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
genericpath.py
3.13 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
genericpath.pyc
3.41 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
getopt.py
7.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
getopt.pyc
6.48 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
getpass.py
5.43 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
getpass.pyc
4.62 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
gettext.py
22.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
gettext.pyc
17.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
glob.py
3.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
glob.pyc
2.86 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
gzip.py
18.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
gzip.pyc
14.82 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
hashlib.py
7.66 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
hashlib.pyc
6.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
heapq.py
17.87 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
heapq.pyc
14.19 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
hmac.py
4.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
hmac.pyc
4.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
hotshot
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
htmlentitydefs.py
17.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
htmlentitydefs.pyc
6.22 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
htmllib.py
12.57 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
htmllib.pyc
19.66 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
httplib.py
51.72 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
httplib.pyc
37.22 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ihooks.py
18.54 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ihooks.pyc
20.74 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
imaplib.py
47.23 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imaplib.pyc
43.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
imghdr.py
3.46 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imghdr.pyc
4.69 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
importlib
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
imputil.py
25.16 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imputil.pyc
15.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
inspect.py
42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
inspect.pyc
39.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
io.py
3.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
io.pyc
3.5 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
json
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
keyword.py
1.95 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
keyword.pyc
2.05 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
lib-dynload
-
07/15/2022 06:13:39 AM
rwxr-xr-x
📁
lib-tk
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📁
lib2to3
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
linecache.py
3.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
linecache.pyc
3.18 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
locale.py
100.43 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
locale.pyc
55.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
logging
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
macpath.py
6.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
macpath.pyc
7.46 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
macurl2path.py
2.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
macurl2path.pyc
2.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mailbox.py
79.34 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mailbox.pyc
74.49 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mailcap.py
8.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mailcap.pyc
7.74 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
markupbase.py
14.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
markupbase.pyc
9.02 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
md5.py
358 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
md5.pyc
376 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
mhlib.py
32.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mhlib.pyc
32.83 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimetools.py
7 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mimetools.pyc
7.97 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimetypes.py
20.54 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mimetypes.pyc
18.02 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimify.py
14.67 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
mimify.pyc
11.69 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
modulefinder.py
23.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
modulefinder.pyc
18.61 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
multifile.py
4.71 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
multifile.pyc
5.26 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
multiprocessing
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
mutex.py
1.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mutex.pyc
2.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
netrc.py
5.75 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
netrc.pyc
4.59 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
new.py
610 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
new.pyc
860 bytes
07/15/2022 06:13:41 AM
rw-r--r--
📄
nntplib.py
20.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
nntplib.pyc
20.46 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ntpath.py
18.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ntpath.pyc
12.78 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
nturl2path.py
2.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
nturl2path.pyc
1.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
numbers.py
10.08 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
numbers.pyc
13.56 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
opcode.py
5.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
opcode.pyc
5.99 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
optparse.py
59.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
optparse.pyc
52.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
os.py
25.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
os.pyc
24.98 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
os2emxpath.py
4.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
os2emxpath.pyc
4.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pdb.doc
7.73 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pdb.py
45.02 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
pdb.pyc
42.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pickle.py
44.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pickle.pyc
37.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pickletools.py
72.78 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pickletools.pyc
55.63 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pipes.py
9.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pipes.pyc
9.06 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pkgutil.py
19.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pkgutil.pyc
18.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
plat-x86_64-linux-gnu
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
platform.py
52.52 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
platform.pyc
37.65 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
plistlib.py
14.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
plistlib.pyc
18.67 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
popen2.py
8.22 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
popen2.pyc
8.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
poplib.py
12.52 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
poplib.pyc
12.97 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
posixfile.py
7.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
posixfile.pyc
7.45 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
posixpath.py
13.96 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
posixpath.pyc
11.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pprint.py
11.5 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pprint.pyc
9.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
profile.py
22.25 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
profile.pyc
15.99 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pstats.py
26.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pstats.pyc
24.31 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pty.py
4.94 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pty.pyc
4.83 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
py_compile.py
6.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
py_compile.pyc
6.46 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pyclbr.py
13.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pyclbr.pyc
9.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pydoc.py
93.9 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
pydoc.pyc
90.23 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
pydoc_data
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
quopri.py
6.8 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
quopri.pyc
6.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
random.py
31.7 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
random.pyc
25.02 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
re.py
13.11 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
re.pyc
13.06 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
repr.py
4.2 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
repr.pyc
5.23 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
rexec.py
19.68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rexec.pyc
23.13 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
rfc822.py
32.76 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rfc822.pyc
30.95 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
rlcompleter.py
5.85 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rlcompleter.pyc
5.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
robotparser.py
7.51 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
robotparser.pyc
7.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
runpy.py
10.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
runpy.pyc
8.56 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sched.py
4.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sched.pyc
4.86 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sets.py
18.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sets.pyc
16.39 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sgmllib.py
17.46 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sgmllib.pyc
14.98 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sha.py
393 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
sha.pyc
419 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
shelve.py
7.99 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shelve.pyc
9.96 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
shlex.py
10.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shlex.pyc
7.36 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
shutil.py
19.41 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shutil.pyc
18.75 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
site.py
19.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
site.pyc
19.08 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sitecustomize.py
155 bytes
07/20/2020 03:37:01 PM
rw-r--r--
📄
sitecustomize.pyc
232 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
smtpd.py
18.11 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
smtpd.pyc
15.45 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
smtplib.py
31.38 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
smtplib.pyc
29.49 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sndhdr.py
5.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sndhdr.pyc
7.16 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
socket.py
20.13 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
socket.pyc
15.71 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
sqlite3
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
sre.py
384 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre.pyc
517 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_compile.py
19.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_compile.pyc
12.24 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_constants.py
7.03 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_constants.pyc
6.04 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_parse.py
29.98 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_parse.pyc
20.59 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ssl.py
36.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ssl.pyc
31.29 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
stat.py
1.8 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stat.pyc
2.67 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
statvfs.py
898 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
statvfs.pyc
618 bytes
07/15/2022 06:13:41 AM
rw-r--r--
📄
string.py
21.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
string.pyc
19.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
stringold.py
12.16 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stringold.pyc
12.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
stringprep.py
13.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stringprep.pyc
14.11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
struct.py
82 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
struct.pyc
237 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
subprocess.py
49.34 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
subprocess.pyc
31.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sunau.py
16.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sunau.pyc
17.87 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sunaudio.py
1.37 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sunaudio.pyc
1.93 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
symbol.py
2.01 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
symbol.pyc
2.95 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
symtable.py
7.26 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
symtable.pyc
11.41 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sysconfig.py
24.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sysconfig.pyc
18.37 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tabnanny.py
11.07 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
tabnanny.pyc
8.01 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
tarfile.py
88.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tarfile.pyc
74.07 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
telnetlib.py
26.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
telnetlib.pyc
22.55 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
tempfile.py
19.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tempfile.pyc
19.76 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
test
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
textwrap.py
16.88 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
textwrap.pyc
11.79 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
this.py
1002 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
this.pyc
1.19 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
threading.py
46.01 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
threading.pyc
41.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
timeit.py
12.49 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
timeit.pyc
11.87 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
toaiff.py
3.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
toaiff.pyc
3.03 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
token.py
2.85 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
token.pyc
3.72 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tokenize.py
17.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tokenize.pyc
14.13 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
trace.py
29.19 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
trace.pyc
22.19 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
traceback.py
11.02 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
traceback.pyc
11.37 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tty.py
879 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
tty.pyc
1.28 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
types.py
2.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
types.pyc
2.65 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
unittest
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
urllib.py
58.68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urllib.pyc
49.75 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
urllib2.py
51.57 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urllib2.pyc
45.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
urlparse.py
16.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urlparse.pyc
15.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
user.py
1.59 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
user.pyc
1.68 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
uu.py
6.4 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
uu.pyc
4.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
uuid.py
22.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
uuid.pyc
22.56 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
warnings.py
14.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
warnings.pyc
13.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
wave.py
18.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
wave.pyc
19.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
weakref.py
14.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
weakref.pyc
15.95 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
webbrowser.py
22.19 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
webbrowser.pyc
19.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
whichdb.py
3.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
whichdb.pyc
2.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
wsgiref
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
wsgiref.egg-info
187 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
xdrlib.py
5.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xdrlib.pyc
9.59 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
xml
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
xmllib.py
34.05 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xmllib.pyc
26.11 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
xmlrpclib.py
50.91 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xmlrpclib.pyc
42.8 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
zipfile.py
58.08 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
zipfile.pyc
41.03 KB
07/15/2022 06:13:41 AM
rw-r--r--
Editing: sgmllib.py
Close
"""A parser for SGML, using the derived class as a static DTD.""" # XXX This only supports those SGML features used by HTML. # XXX There should be a way to distinguish between PCDATA (parsed # character data -- the normal case), RCDATA (replaceable character # data -- only char and entity references and end tags are special) # and CDATA (character data -- only end tags are special). RCDATA is # not supported at all. from warnings import warnpy3k warnpy3k("the sgmllib module has been removed in Python 3.0", stacklevel=2) del warnpy3k import markupbase import re __all__ = ["SGMLParser", "SGMLParseError"] # Regular expressions used for parsing interesting = re.compile('[&<]') incomplete = re.compile('&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|' '<([a-zA-Z][^<>]*|' '/([a-zA-Z][^<>]*)?|' '![^<>]*)?') entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]') charref = re.compile('&#([0-9]+)[^0-9]') starttagopen = re.compile('<[>a-zA-Z]') shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/') shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/') piclose = re.compile('>') endbracket = re.compile('[<>]') tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*') attrfind = re.compile( r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*' r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?') class SGMLParseError(RuntimeError): """Exception raised for all parse errors.""" pass # SGML parser base class -- find tags and call handler functions. # Usage: p = SGMLParser(); p.feed(data); ...; p.close(). # The dtd is defined by deriving a class which defines methods # with special names to handle tags: start_foo and end_foo to handle # <foo> and </foo>, respectively, or do_foo to handle <foo> by itself. # (Tags are converted to lower case for this purpose.) The data # between tags is passed to the parser by calling self.handle_data() # with some data as argument (the data may be split up in arbitrary # chunks). Entity references are passed by calling # self.handle_entityref() with the entity reference as argument. class SGMLParser(markupbase.ParserBase): # Definition of entities -- derived classes may override entity_or_charref = re.compile('&(?:' '([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+)' ')(;?)') def __init__(self, verbose=0): """Initialize and reset this instance.""" self.verbose = verbose self.reset() def reset(self): """Reset this instance. Loses all unprocessed data.""" self.__starttag_text = None self.rawdata = '' self.stack = [] self.lasttag = '???' self.nomoretags = 0 self.literal = 0 markupbase.ParserBase.reset(self) def setnomoretags(self): """Enter literal mode (CDATA) till EOF. Intended for derived classes only. """ self.nomoretags = self.literal = 1 def setliteral(self, *args): """Enter literal mode (CDATA). Intended for derived classes only. """ self.literal = 1 def feed(self, data): """Feed some data to the parser. Call this as often as you want, with as little or as much text as you want (may include '\n'). (This just saves the text, all the processing is done by goahead().) """ self.rawdata = self.rawdata + data self.goahead(0) def close(self): """Handle the remaining data.""" self.goahead(1) def error(self, message): raise SGMLParseError(message) # Internal -- handle data as far as reasonable. May leave state # and data to be processed by a subsequent call. If 'end' is # true, force handling all data as if followed by EOF marker. def goahead(self, end): rawdata = self.rawdata i = 0 n = len(rawdata) while i < n: if self.nomoretags: self.handle_data(rawdata[i:n]) i = n break match = interesting.search(rawdata, i) if match: j = match.start() else: j = n if i < j: self.handle_data(rawdata[i:j]) i = j if i == n: break if rawdata[i] == '<': if starttagopen.match(rawdata, i): if self.literal: self.handle_data(rawdata[i]) i = i+1 continue k = self.parse_starttag(i) if k < 0: break i = k continue if rawdata.startswith("</", i): k = self.parse_endtag(i) if k < 0: break i = k self.literal = 0 continue if self.literal: if n > (i + 1): self.handle_data("<") i = i+1 else: # incomplete break continue if rawdata.startswith("<!--", i): # Strictly speaking, a comment is --.*-- # within a declaration tag <!...>. # This should be removed, # and comments handled only in parse_declaration. k = self.parse_comment(i) if k < 0: break i = k continue if rawdata.startswith("<?", i): k = self.parse_pi(i) if k < 0: break i = i+k continue if rawdata.startswith("<!", i): # This is some sort of declaration; in "HTML as # deployed," this should only be the document type # declaration ("<!DOCTYPE html...>"). k = self.parse_declaration(i) if k < 0: break i = k continue elif rawdata[i] == '&': if self.literal: self.handle_data(rawdata[i]) i = i+1 continue match = charref.match(rawdata, i) if match: name = match.group(1) self.handle_charref(name) i = match.end(0) if rawdata[i-1] != ';': i = i-1 continue match = entityref.match(rawdata, i) if match: name = match.group(1) self.handle_entityref(name) i = match.end(0) if rawdata[i-1] != ';': i = i-1 continue else: self.error('neither < nor & ??') # We get here only if incomplete matches but # nothing else match = incomplete.match(rawdata, i) if not match: self.handle_data(rawdata[i]) i = i+1 continue j = match.end(0) if j == n: break # Really incomplete self.handle_data(rawdata[i:j]) i = j # end while if end and i < n: self.handle_data(rawdata[i:n]) i = n self.rawdata = rawdata[i:] # XXX if end: check for empty stack # Extensions for the DOCTYPE scanner: _decl_otherchars = '=' # Internal -- parse processing instr, return length or -1 if not terminated def parse_pi(self, i): rawdata = self.rawdata if rawdata[i:i+2] != '<?': self.error('unexpected call to parse_pi()') match = piclose.search(rawdata, i+2) if not match: return -1 j = match.start(0) self.handle_pi(rawdata[i+2: j]) j = match.end(0) return j-i def get_starttag_text(self): return self.__starttag_text # Internal -- handle starttag, return length or -1 if not terminated def parse_starttag(self, i): self.__starttag_text = None start_pos = i rawdata = self.rawdata if shorttagopen.match(rawdata, i): # SGML shorthand: <tag/data/ == <tag>data</tag> # XXX Can data contain &... (entity or char refs)? # XXX Can data contain < or > (tag characters)? # XXX Can there be whitespace before the first /? match = shorttag.match(rawdata, i) if not match: return -1 tag, data = match.group(1, 2) self.__starttag_text = '<%s/' % tag tag = tag.lower() k = match.end(0) self.finish_shorttag(tag, data) self.__starttag_text = rawdata[start_pos:match.end(1) + 1] return k # XXX The following should skip matching quotes (' or ") # As a shortcut way to exit, this isn't so bad, but shouldn't # be used to locate the actual end of the start tag since the # < or > characters may be embedded in an attribute value. match = endbracket.search(rawdata, i+1) if not match: return -1 j = match.start(0) # Now parse the data between i+1 and j into a tag and attrs attrs = [] if rawdata[i:i+2] == '<>': # SGML shorthand: <> == <last open tag seen> k = j tag = self.lasttag else: match = tagfind.match(rawdata, i+1) if not match: self.error('unexpected call to parse_starttag') k = match.end(0) tag = rawdata[i+1:k].lower() self.lasttag = tag while k < j: match = attrfind.match(rawdata, k) if not match: break attrname, rest, attrvalue = match.group(1, 2, 3) if not rest: attrvalue = attrname else: if (attrvalue[:1] == "'" == attrvalue[-1:] or attrvalue[:1] == '"' == attrvalue[-1:]): # strip quotes attrvalue = attrvalue[1:-1] attrvalue = self.entity_or_charref.sub( self._convert_ref, attrvalue) attrs.append((attrname.lower(), attrvalue)) k = match.end(0) if rawdata[j] == '>': j = j+1 self.__starttag_text = rawdata[start_pos:j] self.finish_starttag(tag, attrs) return j # Internal -- convert entity or character reference def _convert_ref(self, match): if match.group(2): return self.convert_charref(match.group(2)) or \ '&#%s%s' % match.groups()[1:] elif match.group(3): return self.convert_entityref(match.group(1)) or \ '&%s;' % match.group(1) else: return '&%s' % match.group(1) # Internal -- parse endtag def parse_endtag(self, i): rawdata = self.rawdata match = endbracket.search(rawdata, i+1) if not match: return -1 j = match.start(0) tag = rawdata[i+2:j].strip().lower() if rawdata[j] == '>': j = j+1 self.finish_endtag(tag) return j # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>) def finish_shorttag(self, tag, data): self.finish_starttag(tag, []) self.handle_data(data) self.finish_endtag(tag) # Internal -- finish processing of start tag # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag def finish_starttag(self, tag, attrs): try: method = getattr(self, 'start_' + tag) except AttributeError: try: method = getattr(self, 'do_' + tag) except AttributeError: self.unknown_starttag(tag, attrs) return -1 else: self.handle_starttag(tag, method, attrs) return 0 else: self.stack.append(tag) self.handle_starttag(tag, method, attrs) return 1 # Internal -- finish processing of end tag def finish_endtag(self, tag): if not tag: found = len(self.stack) - 1 if found < 0: self.unknown_endtag(tag) return else: if tag not in self.stack: try: method = getattr(self, 'end_' + tag) except AttributeError: self.unknown_endtag(tag) else: self.report_unbalanced(tag) return found = len(self.stack) for i in range(found): if self.stack[i] == tag: found = i while len(self.stack) > found: tag = self.stack[-1] try: method = getattr(self, 'end_' + tag) except AttributeError: method = None if method: self.handle_endtag(tag, method) else: self.unknown_endtag(tag) del self.stack[-1] # Overridable -- handle start tag def handle_starttag(self, tag, method, attrs): method(attrs) # Overridable -- handle end tag def handle_endtag(self, tag, method): method() # Example -- report an unbalanced </...> tag. def report_unbalanced(self, tag): if self.verbose: print '*** Unbalanced </' + tag + '>' print '*** Stack:', self.stack def convert_charref(self, name): """Convert character reference, may be overridden.""" try: n = int(name) except ValueError: return if not 0 <= n <= 127: return return self.convert_codepoint(n) def convert_codepoint(self, codepoint): return chr(codepoint) def handle_charref(self, name): """Handle character reference, no need to override.""" replacement = self.convert_charref(name) if replacement is None: self.unknown_charref(name) else: self.handle_data(replacement) # Definition of entities -- derived classes may override entitydefs = \ {'lt': '<', 'gt': '>', 'amp': '&', 'quot': '"', 'apos': '\''} def convert_entityref(self, name): """Convert entity references. As an alternative to overriding this method; one can tailor the results by setting up the self.entitydefs mapping appropriately. """ table = self.entitydefs if name in table: return table[name] else: return def handle_entityref(self, name): """Handle entity references, no need to override.""" replacement = self.convert_entityref(name) if replacement is None: self.unknown_entityref(name) else: self.handle_data(replacement) # Example -- handle data, should be overridden def handle_data(self, data): pass # Example -- handle comment, could be overridden def handle_comment(self, data): pass # Example -- handle declaration, could be overridden def handle_decl(self, decl): pass # Example -- handle processing instruction, could be overridden def handle_pi(self, data): pass # To be overridden -- handlers for unknown objects def unknown_starttag(self, tag, attrs): pass def unknown_endtag(self, tag): pass def unknown_charref(self, ref): pass def unknown_entityref(self, ref): pass class TestSGMLParser(SGMLParser): def __init__(self, verbose=0): self.testdata = "" SGMLParser.__init__(self, verbose) def handle_data(self, data): self.testdata = self.testdata + data if len(repr(self.testdata)) >= 70: self.flush() def flush(self): data = self.testdata if data: self.testdata = "" print 'data:', repr(data) def handle_comment(self, data): self.flush() r = repr(data) if len(r) > 68: r = r[:32] + '...' + r[-32:] print 'comment:', r def unknown_starttag(self, tag, attrs): self.flush() if not attrs: print 'start tag: <' + tag + '>' else: print 'start tag: <' + tag, for name, value in attrs: print name + '=' + '"' + value + '"', print '>' def unknown_endtag(self, tag): self.flush() print 'end tag: </' + tag + '>' def unknown_entityref(self, ref): self.flush() print '*** unknown entity ref: &' + ref + ';' def unknown_charref(self, ref): self.flush() print '*** unknown char ref: &#' + ref + ';' def unknown_decl(self, data): self.flush() print '*** unknown decl: [' + data + ']' def close(self): SGMLParser.close(self) self.flush() def test(args = None): import sys if args is None: args = sys.argv[1:] if args and args[0] == '-s': args = args[1:] klass = SGMLParser else: klass = TestSGMLParser if args: file = args[0] else: file = 'test.html' if file == '-': f = sys.stdin else: try: f = open(file, 'r') except IOError, msg: print file, ":", msg sys.exit(1) data = f.read() if f is not sys.stdin: f.close() x = klass() for c in data: x.feed(c) x.close() if __name__ == '__main__': test()