__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
"""A parser for XML, using the derived class as static DTD."""
# Author: Sjoerd Mullender.
import re
import string
import warnings
warnings.warn("The xmllib module is obsolete. Use xml.sax instead.",
DeprecationWarning, 2)
del warnings
version = '0.3'
class Error(RuntimeError):
pass
# Regular expressions used for parsing
_S = '[ \t\r\n]+' # white space
_opS = '[ \t\r\n]*' # optional white space
_Name = '[a-zA-Z_:][-a-zA-Z0-9._:]*' # valid XML name
_QStr = "(?:'[^']*'|\"[^\"]*\")" # quoted XML string
illegal = re.compile('[^\t\r\n -\176\240-\377]') # illegal chars in content
interesting = re.compile('[]&<]')
amp = re.compile('&')
ref = re.compile('&(' + _Name + '|#[0-9]+|#x[0-9a-fA-F]+)[^-a-zA-Z0-9._:]')
entityref = re.compile('&(?P<name>' + _Name + ')[^-a-zA-Z0-9._:]')
charref = re.compile('&#(?P<char>[0-9]+[^0-9]|x[0-9a-fA-F]+[^0-9a-fA-F])')
space = re.compile(_S + '$')
newline = re.compile('\n')
attrfind = re.compile(
_S + '(?P<name>' + _Name + ')'
'(' + _opS + '=' + _opS +
'(?P<value>'+_QStr+'|[-a-zA-Z0-9.:+*%?!\(\)_#=~]+))?')
starttagopen = re.compile('<' + _Name)
starttagend = re.compile(_opS + '(?P<slash>/?)>')
starttagmatch = re.compile('<(?P<tagname>'+_Name+')'
'(?P<attrs>(?:'+attrfind.pattern+')*)'+
starttagend.pattern)
endtagopen = re.compile('</')
endbracket = re.compile(_opS + '>')
endbracketfind = re.compile('(?:[^>\'"]|'+_QStr+')*>')
tagfind = re.compile(_Name)
cdataopen = re.compile(r'<!\[CDATA\[')
cdataclose = re.compile(r'\]\]>')
# this matches one of the following:
# SYSTEM SystemLiteral
# PUBLIC PubidLiteral SystemLiteral
_SystemLiteral = '(?P<%s>'+_QStr+')'
_PublicLiteral = '(?P<%s>"[-\'\(\)+,./:=?;!*#@$_%% \n\ra-zA-Z0-9]*"|' \
"'[-\(\)+,./:=?;!*#@$_%% \n\ra-zA-Z0-9]*')"
_ExternalId = '(?:SYSTEM|' \
'PUBLIC'+_S+_PublicLiteral%'pubid'+ \
')'+_S+_SystemLiteral%'syslit'
doctype = re.compile('<!DOCTYPE'+_S+'(?P<name>'+_Name+')'
'(?:'+_S+_ExternalId+')?'+_opS)
xmldecl = re.compile('<\?xml'+_S+
'version'+_opS+'='+_opS+'(?P<version>'+_QStr+')'+
'(?:'+_S+'encoding'+_opS+'='+_opS+
"(?P<encoding>'[A-Za-z][-A-Za-z0-9._]*'|"
'"[A-Za-z][-A-Za-z0-9._]*"))?'
'(?:'+_S+'standalone'+_opS+'='+_opS+
'(?P<standalone>\'(?:yes|no)\'|"(?:yes|no)"))?'+
_opS+'\?>')
procopen = re.compile(r'<\?(?P<proc>' + _Name + ')' + _opS)
procclose = re.compile(_opS + r'\?>')
commentopen = re.compile('<!--')
commentclose = re.compile('-->')
doubledash = re.compile('--')
attrtrans = string.maketrans(' \r\n\t', ' ')
# definitions for XML namespaces
_NCName = '[a-zA-Z_][-a-zA-Z0-9._]*' # XML Name, minus the ":"
ncname = re.compile(_NCName + '$')
qname = re.compile('(?:(?P<prefix>' + _NCName + '):)?' # optional prefix
'(?P<local>' + _NCName + ')$')
xmlns = re.compile('xmlns(?::(?P<ncname>'+_NCName+'))?$')
# XML parser base class -- find tags and call handler functions.
# Usage: p = XMLParser(); 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. 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).
class XMLParser:
attributes = {} # default, to be overridden
elements = {} # default, to be overridden
# parsing options, settable using keyword args in __init__
__accept_unquoted_attributes = 0
__accept_missing_endtag_name = 0
__map_case = 0
__accept_utf8 = 0
__translate_attribute_references = 1
# Interface -- initialize and reset this instance
def __init__(self, **kw):
self.__fixed = 0
if 'accept_unquoted_attributes' in kw:
self.__accept_unquoted_attributes = kw['accept_unquoted_attributes']
if 'accept_missing_endtag_name' in kw:
self.__accept_missing_endtag_name = kw['accept_missing_endtag_name']
if 'map_case' in kw:
self.__map_case = kw['map_case']
if 'accept_utf8' in kw:
self.__accept_utf8 = kw['accept_utf8']
if 'translate_attribute_references' in kw:
self.__translate_attribute_references = kw['translate_attribute_references']
self.reset()
def __fixelements(self):
self.__fixed = 1
self.elements = {}
self.__fixdict(self.__dict__)
self.__fixclass(self.__class__)
def __fixclass(self, kl):
self.__fixdict(kl.__dict__)
for k in kl.__bases__:
self.__fixclass(k)
def __fixdict(self, dict):
for key in dict.keys():
if key[:6] == 'start_':
tag = key[6:]
start, end = self.elements.get(tag, (None, None))
if start is None:
self.elements[tag] = getattr(self, key), end
elif key[:4] == 'end_':
tag = key[4:]
start, end = self.elements.get(tag, (None, None))
if end is None:
self.elements[tag] = start, getattr(self, key)
# Interface -- reset this instance. Loses all unprocessed data
def reset(self):
self.rawdata = ''
self.stack = []
self.nomoretags = 0
self.literal = 0
self.lineno = 1
self.__at_start = 1
self.__seen_doctype = None
self.__seen_starttag = 0
self.__use_namespaces = 0
self.__namespaces = {'xml':None} # xml is implicitly declared
# backward compatibility hack: if elements not overridden,
# fill it in ourselves
if self.elements is XMLParser.elements:
self.__fixelements()
# For derived classes only -- enter literal mode (CDATA) till EOF
def setnomoretags(self):
self.nomoretags = self.literal = 1
# For derived classes only -- enter literal mode (CDATA)
def setliteral(self, *args):
self.literal = 1
# Interface -- 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().)
def feed(self, data):
self.rawdata = self.rawdata + data
self.goahead(0)
# Interface -- handle the remaining data
def close(self):
self.goahead(1)
if self.__fixed:
self.__fixed = 0
# remove self.elements so that we don't leak
del self.elements
# Interface -- translate references
def translate_references(self, data, all = 1):
if not self.__translate_attribute_references:
return data
i = 0
while 1:
res = amp.search(data, i)
if res is None:
return data
s = res.start(0)
res = ref.match(data, s)
if res is None:
self.syntax_error("bogus `&'")
i = s+1
continue
i = res.end(0)
str = res.group(1)
rescan = 0
if str[0] == '#':
if str[1] == 'x':
str = chr(int(str[2:], 16))
else:
str = chr(int(str[1:]))
if data[i - 1] != ';':
self.syntax_error("`;' missing after char reference")
i = i-1
elif all:
if str in self.entitydefs:
str = self.entitydefs[str]
rescan = 1
elif data[i - 1] != ';':
self.syntax_error("bogus `&'")
i = s + 1 # just past the &
continue
else:
self.syntax_error("reference to unknown entity `&%s;'" % str)
str = '&' + str + ';'
elif data[i - 1] != ';':
self.syntax_error("bogus `&'")
i = s + 1 # just past the &
continue
# when we get here, str contains the translated text and i points
# to the end of the string that is to be replaced
data = data[:s] + str + data[i:]
if rescan:
i = s
else:
i = s + len(str)
# Interface - return a dictionary of all namespaces currently valid
def getnamespace(self):
nsdict = {}
for t, d, nst in self.stack:
nsdict.update(d)
return nsdict
# 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 i > 0:
self.__at_start = 0
if self.nomoretags:
data = rawdata[i:n]
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
i = n
break
res = interesting.search(rawdata, i)
if res:
j = res.start(0)
else:
j = n
if i < j:
data = rawdata[i:j]
if self.__at_start and space.match(data) is None:
self.syntax_error('illegal data at start of file')
self.__at_start = 0
if not self.stack and space.match(data) is None:
self.syntax_error('data not in content')
if not self.__accept_utf8 and illegal.search(data):
self.syntax_error('illegal character in content')
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
i = j
if i == n: break
if rawdata[i] == '<':
if starttagopen.match(rawdata, i):
if self.literal:
data = rawdata[i]
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
i = i+1
continue
k = self.parse_starttag(i)
if k < 0: break
self.__seen_starttag = 1
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
if endtagopen.match(rawdata, i):
k = self.parse_endtag(i)
if k < 0: break
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
if commentopen.match(rawdata, i):
if self.literal:
data = rawdata[i]
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
i = i+1
continue
k = self.parse_comment(i)
if k < 0: break
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
if cdataopen.match(rawdata, i):
k = self.parse_cdata(i)
if k < 0: break
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
res = xmldecl.match(rawdata, i)
if res:
if not self.__at_start:
self.syntax_error("<?xml?> declaration not at start of document")
version, encoding, standalone = res.group('version',
'encoding',
'standalone')
if version[1:-1] != '1.0':
raise Error('only XML version 1.0 supported')
if encoding: encoding = encoding[1:-1]
if standalone: standalone = standalone[1:-1]
self.handle_xml(encoding, standalone)
i = res.end(0)
continue
res = procopen.match(rawdata, i)
if res:
k = self.parse_proc(i)
if k < 0: break
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
res = doctype.match(rawdata, i)
if res:
if self.literal:
data = rawdata[i]
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
i = i+1
continue
if self.__seen_doctype:
self.syntax_error('multiple DOCTYPE elements')
if self.__seen_starttag:
self.syntax_error('DOCTYPE not at beginning of document')
k = self.parse_doctype(res)
if k < 0: break
self.__seen_doctype = res.group('name')
if self.__map_case:
self.__seen_doctype = self.__seen_doctype.lower()
self.lineno = self.lineno + rawdata[i:k].count('\n')
i = k
continue
elif rawdata[i] == '&':
if self.literal:
data = rawdata[i]
self.handle_data(data)
i = i+1
continue
res = charref.match(rawdata, i)
if res is not None:
i = res.end(0)
if rawdata[i-1] != ';':
self.syntax_error("`;' missing in charref")
i = i-1
if not self.stack:
self.syntax_error('data not in content')
self.handle_charref(res.group('char')[:-1])
self.lineno = self.lineno + res.group(0).count('\n')
continue
res = entityref.match(rawdata, i)
if res is not None:
i = res.end(0)
if rawdata[i-1] != ';':
self.syntax_error("`;' missing in entityref")
i = i-1
name = res.group('name')
if self.__map_case:
name = name.lower()
if name in self.entitydefs:
self.rawdata = rawdata = rawdata[:res.start(0)] + self.entitydefs[name] + rawdata[i:]
n = len(rawdata)
i = res.start(0)
else:
self.unknown_entityref(name)
self.lineno = self.lineno + res.group(0).count('\n')
continue
elif rawdata[i] == ']':
if self.literal:
data = rawdata[i]
self.handle_data(data)
i = i+1
continue
if n-i < 3:
break
if cdataclose.match(rawdata, i):
self.syntax_error("bogus `]]>'")
self.handle_data(rawdata[i])
i = i+1
continue
else:
raise Error('neither < nor & ??')
# We get here only if incomplete matches but
# nothing else
break
# end while
if i > 0:
self.__at_start = 0
if end and i < n:
data = rawdata[i]
self.syntax_error("bogus `%s'" % data)
if not self.__accept_utf8 and illegal.search(data):
self.syntax_error('illegal character in content')
self.handle_data(data)
self.lineno = self.lineno + data.count('\n')
self.rawdata = rawdata[i+1:]
return self.goahead(end)
self.rawdata = rawdata[i:]
if end:
if not self.__seen_starttag:
self.syntax_error('no elements in file')
if self.stack:
self.syntax_error('missing end tags')
while self.stack:
self.finish_endtag(self.stack[-1][0])
# Internal -- parse comment, return length or -1 if not terminated
def parse_comment(self, i):
rawdata = self.rawdata
if rawdata[i:i+4] != '<!--':
raise Error('unexpected call to handle_comment')
res = commentclose.search(rawdata, i+4)
if res is None:
return -1
if doubledash.search(rawdata, i+4, res.start(0)):
self.syntax_error("`--' inside comment")
if rawdata[res.start(0)-1] == '-':
self.syntax_error('comment cannot end in three dashes')
if not self.__accept_utf8 and \
illegal.search(rawdata, i+4, res.start(0)):
self.syntax_error('illegal character in comment')
self.handle_comment(rawdata[i+4: res.start(0)])
return res.end(0)
# Internal -- handle DOCTYPE tag, return length or -1 if not terminated
def parse_doctype(self, res):
rawdata = self.rawdata
n = len(rawdata)
name = res.group('name')
if self.__map_case:
name = name.lower()
pubid, syslit = res.group('pubid', 'syslit')
if pubid is not None:
pubid = pubid[1:-1] # remove quotes
pubid = ' '.join(pubid.split()) # normalize
if syslit is not None: syslit = syslit[1:-1] # remove quotes
j = k = res.end(0)
if k >= n:
return -1
if rawdata[k] == '[':
level = 0
k = k+1
dq = sq = 0
while k < n:
c = rawdata[k]
if not sq and c == '"':
dq = not dq
elif not dq and c == "'":
sq = not sq
elif sq or dq:
pass
elif level <= 0 and c == ']':
res = endbracket.match(rawdata, k+1)
if res is None:
return -1
self.handle_doctype(name, pubid, syslit, rawdata[j+1:k])
return res.end(0)
elif c == '<':
level = level + 1
elif c == '>':
level = level - 1
if level < 0:
self.syntax_error("bogus `>' in DOCTYPE")
k = k+1
res = endbracketfind.match(rawdata, k)
if res is None:
return -1
if endbracket.match(rawdata, k) is None:
self.syntax_error('garbage in DOCTYPE')
self.handle_doctype(name, pubid, syslit, None)
return res.end(0)
# Internal -- handle CDATA tag, return length or -1 if not terminated
def parse_cdata(self, i):
rawdata = self.rawdata
if rawdata[i:i+9] != '<![CDATA[':
raise Error('unexpected call to parse_cdata')
res = cdataclose.search(rawdata, i+9)
if res is None:
return -1
if not self.__accept_utf8 and \
illegal.search(rawdata, i+9, res.start(0)):
self.syntax_error('illegal character in CDATA')
if not self.stack:
self.syntax_error('CDATA not in content')
self.handle_cdata(rawdata[i+9:res.start(0)])
return res.end(0)
__xml_namespace_attributes = {'ns':None, 'src':None, 'prefix':None}
# Internal -- handle a processing instruction tag
def parse_proc(self, i):
rawdata = self.rawdata
end = procclose.search(rawdata, i)
if end is None:
return -1
j = end.start(0)
if not self.__accept_utf8 and illegal.search(rawdata, i+2, j):
self.syntax_error('illegal character in processing instruction')
res = tagfind.match(rawdata, i+2)
if res is None:
raise Error('unexpected call to parse_proc')
k = res.end(0)
name = res.group(0)
if self.__map_case:
name = name.lower()
if name == 'xml:namespace':
self.syntax_error('old-fashioned namespace declaration')
self.__use_namespaces = -1
# namespace declaration
# this must come after the <?xml?> declaration (if any)
# and before the <!DOCTYPE> (if any).
if self.__seen_doctype or self.__seen_starttag:
self.syntax_error('xml:namespace declaration too late in document')
attrdict, namespace, k = self.parse_attributes(name, k, j)
if namespace:
self.syntax_error('namespace declaration inside namespace declaration')
for attrname in attrdict.keys():
if not attrname in self.__xml_namespace_attributes:
self.syntax_error("unknown attribute `%s' in xml:namespace tag" % attrname)
if not 'ns' in attrdict or not 'prefix' in attrdict:
self.syntax_error('xml:namespace without required attributes')
prefix = attrdict.get('prefix')
if ncname.match(prefix) is None:
self.syntax_error('xml:namespace illegal prefix value')
return end.end(0)
if prefix in self.__namespaces:
self.syntax_error('xml:namespace prefix not unique')
self.__namespaces[prefix] = attrdict['ns']
else:
if name.lower() == 'xml':
self.syntax_error('illegal processing instruction target name')
self.handle_proc(name, rawdata[k:j])
return end.end(0)
# Internal -- parse attributes between i and j
def parse_attributes(self, tag, i, j):
rawdata = self.rawdata
attrdict = {}
namespace = {}
while i < j:
res = attrfind.match(rawdata, i)
if res is None:
break
attrname, attrvalue = res.group('name', 'value')
if self.__map_case:
attrname = attrname.lower()
i = res.end(0)
if attrvalue is None:
self.syntax_error("no value specified for attribute `%s'" % attrname)
attrvalue = attrname
elif attrvalue[:1] == "'" == attrvalue[-1:] or \
attrvalue[:1] == '"' == attrvalue[-1:]:
attrvalue = attrvalue[1:-1]
elif not self.__accept_unquoted_attributes:
self.syntax_error("attribute `%s' value not quoted" % attrname)
res = xmlns.match(attrname)
if res is not None:
# namespace declaration
ncname = res.group('ncname')
namespace[ncname or ''] = attrvalue or None
if not self.__use_namespaces:
self.__use_namespaces = len(self.stack)+1
continue
if '<' in attrvalue:
self.syntax_error("`<' illegal in attribute value")
if attrname in attrdict:
self.syntax_error("attribute `%s' specified twice" % attrname)
attrvalue = attrvalue.translate(attrtrans)
attrdict[attrname] = self.translate_references(attrvalue)
return attrdict, namespace, i
# Internal -- handle starttag, return length or -1 if not terminated
def parse_starttag(self, i):
rawdata = self.rawdata
# i points to start of tag
end = endbracketfind.match(rawdata, i+1)
if end is None:
return -1
tag = starttagmatch.match(rawdata, i)
if tag is None or tag.end(0) != end.end(0):
self.syntax_error('garbage in starttag')
return end.end(0)
nstag = tagname = tag.group('tagname')
if self.__map_case:
nstag = tagname = nstag.lower()
if not self.__seen_starttag and self.__seen_doctype and \
tagname != self.__seen_doctype:
self.syntax_error('starttag does not match DOCTYPE')
if self.__seen_starttag and not self.stack:
self.syntax_error('multiple elements on top level')
k, j = tag.span('attrs')
attrdict, nsdict, k = self.parse_attributes(tagname, k, j)
self.stack.append((tagname, nsdict, nstag))
if self.__use_namespaces:
res = qname.match(tagname)
else:
res = None
if res is not None:
prefix, nstag = res.group('prefix', 'local')
if prefix is None:
prefix = ''
ns = None
for t, d, nst in self.stack:
if prefix in d:
ns = d[prefix]
if ns is None and prefix != '':
ns = self.__namespaces.get(prefix)
if ns is not None:
nstag = ns + ' ' + nstag
elif prefix != '':
nstag = prefix + ':' + nstag # undo split
self.stack[-1] = tagname, nsdict, nstag
# translate namespace of attributes
attrnamemap = {} # map from new name to old name (used for error reporting)
for key in attrdict.keys():
attrnamemap[key] = key
if self.__use_namespaces:
nattrdict = {}
for key, val in attrdict.items():
okey = key
res = qname.match(key)
if res is not None:
aprefix, key = res.group('prefix', 'local')
if self.__map_case:
key = key.lower()
if aprefix is not None:
ans = None
for t, d, nst in self.stack:
if aprefix in d:
ans = d[aprefix]
if ans is None:
ans = self.__namespaces.get(aprefix)
if ans is not None:
key = ans + ' ' + key
else:
key = aprefix + ':' + key
nattrdict[key] = val
attrnamemap[key] = okey
attrdict = nattrdict
attributes = self.attributes.get(nstag)
if attributes is not None:
for key in attrdict.keys():
if not key in attributes:
self.syntax_error("unknown attribute `%s' in tag `%s'" % (attrnamemap[key], tagname))
for key, val in attributes.items():
if val is not None and not key in attrdict:
attrdict[key] = val
method = self.elements.get(nstag, (None, None))[0]
self.finish_starttag(nstag, attrdict, method)
if tag.group('slash') == '/':
self.finish_endtag(tagname)
return tag.end(0)
# Internal -- parse endtag
def parse_endtag(self, i):
rawdata = self.rawdata
end = endbracketfind.match(rawdata, i+1)
if end is None:
return -1
res = tagfind.match(rawdata, i+2)
if res is None:
if self.literal:
self.handle_data(rawdata[i])
return i+1
if not self.__accept_missing_endtag_name:
self.syntax_error('no name specified in end tag')
tag = self.stack[-1][0]
k = i+2
else:
tag = res.group(0)
if self.__map_case:
tag = tag.lower()
if self.literal:
if not self.stack or tag != self.stack[-1][0]:
self.handle_data(rawdata[i])
return i+1
k = res.end(0)
if endbracket.match(rawdata, k) is None:
self.syntax_error('garbage in end tag')
self.finish_endtag(tag)
return end.end(0)
# Internal -- finish processing of start tag
def finish_starttag(self, tagname, attrdict, method):
if method is not None:
self.handle_starttag(tagname, method, attrdict)
else:
self.unknown_starttag(tagname, attrdict)
# Internal -- finish processing of end tag
def finish_endtag(self, tag):
self.literal = 0
if not tag:
self.syntax_error('name-less end tag')
found = len(self.stack) - 1
if found < 0:
self.unknown_endtag(tag)
return
else:
found = -1
for i in range(len(self.stack)):
if tag == self.stack[i][0]:
found = i
if found == -1:
self.syntax_error('unopened end tag')
return
while len(self.stack) > found:
if found < len(self.stack) - 1:
self.syntax_error('missing close tag for %s' % self.stack[-1][2])
nstag = self.stack[-1][2]
method = self.elements.get(nstag, (None, None))[1]
if method is not None:
self.handle_endtag(nstag, method)
else:
self.unknown_endtag(nstag)
if self.__use_namespaces == len(self.stack):
self.__use_namespaces = 0
del self.stack[-1]
# Overridable -- handle xml processing instruction
def handle_xml(self, encoding, standalone):
pass
# Overridable -- handle DOCTYPE
def handle_doctype(self, tag, pubid, syslit, data):
pass
# 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 -- handle character reference, no need to override
def handle_charref(self, name):
try:
if name[0] == 'x':
n = int(name[1:], 16)
else:
n = int(name)
except ValueError:
self.unknown_charref(name)
return
if not 0 <= n <= 255:
self.unknown_charref(name)
return
self.handle_data(chr(n))
# Definition of entities -- derived classes may override
entitydefs = {'lt': '<', # must use charref
'gt': '>',
'amp': '&', # must use charref
'quot': '"',
'apos': ''',
}
# Example -- handle data, should be overridden
def handle_data(self, data):
pass
# Example -- handle cdata, could be overridden
def handle_cdata(self, data):
pass
# Example -- handle comment, could be overridden
def handle_comment(self, data):
pass
# Example -- handle processing instructions, could be overridden
def handle_proc(self, name, data):
pass
# Example -- handle relatively harmless syntax errors, could be overridden
def syntax_error(self, message):
raise Error('Syntax error at line %d: %s' % (self.lineno, message))
# 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, name):
self.syntax_error("reference to unknown entity `&%s;'" % name)
class TestXMLParser(XMLParser):
def __init__(self, **kw):
self.testdata = ""
XMLParser.__init__(self, **kw)
def handle_xml(self, encoding, standalone):
self.flush()
print 'xml: encoding =',encoding,'standalone =',standalone
def handle_doctype(self, tag, pubid, syslit, data):
self.flush()
print 'DOCTYPE:',tag, repr(data)
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_cdata(self, data):
self.flush()
print 'cdata:', repr(data)
def handle_proc(self, name, data):
self.flush()
print 'processing:',name,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 syntax_error(self, message):
print 'error at line %d:' % self.lineno, message
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.items():
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 close(self):
XMLParser.close(self)
self.flush()
def test(args = None):
import sys, getopt
from time import time
if not args:
args = sys.argv[1:]
opts, args = getopt.getopt(args, 'st')
klass = TestXMLParser
do_time = 0
for o, a in opts:
if o == '-s':
klass = XMLParser
elif o == '-t':
do_time = 1
if args:
file = args[0]
else:
file = 'test.xml'
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()
t0 = time()
try:
if do_time:
x.feed(data)
x.close()
else:
for c in data:
x.feed(c)
x.close()
except Error, msg:
t1 = time()
print msg
if do_time:
print 'total time: %g' % (t1-t0)
sys.exit(1)
t1 = time()
if do_time:
print 'total time: %g' % (t1-t0)
if __name__ == '__main__':
test()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| Demo | Folder | 0755 |
|
|
| Doc | Folder | 0755 |
|
|
| Tools | Folder | 0755 |
|
|
| bsddb | Folder | 0755 |
|
|
| compiler | Folder | 0755 |
|
|
| config | Folder | 0755 |
|
|
| ctypes | Folder | 0755 |
|
|
| curses | Folder | 0755 |
|
|
| distutils | Folder | 0755 |
|
|
| Folder | 0755 |
|
||
| encodings | Folder | 0755 |
|
|
| hotshot | Folder | 0755 |
|
|
| idlelib | Folder | 0755 |
|
|
| importlib | Folder | 0755 |
|
|
| json | Folder | 0755 |
|
|
| lib-dynload | Folder | 0755 |
|
|
| lib-tk | Folder | 0755 |
|
|
| lib2to3 | Folder | 0755 |
|
|
| logging | Folder | 0755 |
|
|
| multiprocessing | Folder | 0755 |
|
|
| plat-linux2 | Folder | 0755 |
|
|
| pydoc_data | Folder | 0755 |
|
|
| site-packages | Folder | 0755 |
|
|
| sqlite3 | Folder | 0755 |
|
|
| test | Folder | 0755 |
|
|
| unittest | Folder | 0755 |
|
|
| wsgiref | Folder | 0755 |
|
|
| xml | Folder | 0755 |
|
|
| BaseHTTPServer.py | File | 21.93 KB | 0644 |
|
| BaseHTTPServer.pyc | File | 21.18 KB | 0644 |
|
| BaseHTTPServer.pyo | File | 21.18 KB | 0644 |
|
| Bastion.py | File | 5.61 KB | 0644 |
|
| Bastion.pyc | File | 6.5 KB | 0644 |
|
| Bastion.pyo | File | 6.5 KB | 0644 |
|
| CGIHTTPServer.py | File | 12.84 KB | 0644 |
|
| CGIHTTPServer.pyc | File | 10.84 KB | 0644 |
|
| CGIHTTPServer.pyo | File | 10.84 KB | 0644 |
|
| ConfigParser.py | File | 27.1 KB | 0644 |
|
| ConfigParser.pyc | File | 24.62 KB | 0644 |
|
| ConfigParser.pyo | File | 24.62 KB | 0644 |
|
| Cookie.py | File | 25.24 KB | 0644 |
|
| Cookie.pyc | File | 21.89 KB | 0644 |
|
| Cookie.pyo | File | 21.89 KB | 0644 |
|
| DocXMLRPCServer.py | File | 10.25 KB | 0644 |
|
| DocXMLRPCServer.pyc | File | 9.6 KB | 0644 |
|
| DocXMLRPCServer.pyo | File | 9.5 KB | 0644 |
|
| HTMLParser.py | File | 16.58 KB | 0644 |
|
| HTMLParser.pyc | File | 13.39 KB | 0644 |
|
| HTMLParser.pyo | File | 13.1 KB | 0644 |
|
| MimeWriter.py | File | 6.33 KB | 0644 |
|
| MimeWriter.pyc | File | 7.19 KB | 0644 |
|
| MimeWriter.pyo | File | 7.19 KB | 0644 |
|
| Queue.py | File | 8.36 KB | 0644 |
|
| Queue.pyc | File | 9.19 KB | 0644 |
|
| Queue.pyo | File | 9.19 KB | 0644 |
|
| SimpleHTTPServer.py | File | 7.25 KB | 0644 |
|
| SimpleHTTPServer.pyc | File | 7.55 KB | 0644 |
|
| SimpleHTTPServer.pyo | File | 7.55 KB | 0644 |
|
| SimpleXMLRPCServer.py | File | 25.17 KB | 0644 |
|
| SimpleXMLRPCServer.pyc | File | 22.31 KB | 0644 |
|
| SimpleXMLRPCServer.pyo | File | 22.31 KB | 0644 |
|
| SocketServer.py | File | 23.29 KB | 0644 |
|
| SocketServer.pyc | File | 23.49 KB | 0644 |
|
| SocketServer.pyo | File | 23.49 KB | 0644 |
|
| StringIO.py | File | 10.41 KB | 0644 |
|
| StringIO.pyc | File | 11.21 KB | 0644 |
|
| StringIO.pyo | File | 11.21 KB | 0644 |
|
| UserDict.py | File | 5.67 KB | 0644 |
|
| UserDict.pyc | File | 8.61 KB | 0644 |
|
| UserDict.pyo | File | 8.61 KB | 0644 |
|
| UserList.py | File | 3.56 KB | 0644 |
|
| UserList.pyc | File | 6.42 KB | 0644 |
|
| UserList.pyo | File | 6.42 KB | 0644 |
|
| UserString.py | File | 9.46 KB | 0755 |
|
| UserString.pyc | File | 14.52 KB | 0644 |
|
| UserString.pyo | File | 14.52 KB | 0644 |
|
| _LWPCookieJar.py | File | 6.4 KB | 0644 |
|
| _LWPCookieJar.pyc | File | 5.4 KB | 0644 |
|
| _LWPCookieJar.pyo | File | 5.4 KB | 0644 |
|
| _MozillaCookieJar.py | File | 5.67 KB | 0644 |
|
| _MozillaCookieJar.pyc | File | 4.37 KB | 0644 |
|
| _MozillaCookieJar.pyo | File | 4.33 KB | 0644 |
|
| __future__.py | File | 4.28 KB | 0644 |
|
| __future__.pyc | File | 4.13 KB | 0644 |
|
| __future__.pyo | File | 4.13 KB | 0644 |
|
| __phello__.foo.py | File | 64 B | 0644 |
|
| __phello__.foo.pyc | File | 125 B | 0644 |
|
| __phello__.foo.pyo | File | 125 B | 0644 |
|
| _abcoll.py | File | 17.45 KB | 0644 |
|
| _abcoll.pyc | File | 24.4 KB | 0644 |
|
| _abcoll.pyo | File | 24.4 KB | 0644 |
|
| _osx_support.py | File | 18.03 KB | 0644 |
|
| _osx_support.pyc | File | 11.28 KB | 0644 |
|
| _osx_support.pyo | File | 11.28 KB | 0644 |
|
| _pyio.py | File | 67.24 KB | 0644 |
|
| _pyio.pyc | File | 62.71 KB | 0644 |
|
| _pyio.pyo | File | 62.71 KB | 0644 |
|
| _strptime.py | File | 19.75 KB | 0644 |
|
| _strptime.pyc | File | 14.53 KB | 0644 |
|
| _strptime.pyo | File | 14.53 KB | 0644 |
|
| _sysconfigdata.py | File | 17.56 KB | 0644 |
|
| _sysconfigdata.pyc | File | 20.72 KB | 0644 |
|
| _sysconfigdata.pyo | File | 20.72 KB | 0644 |
|
| _threading_local.py | File | 7.28 KB | 0644 |
|
| _threading_local.pyc | File | 6.45 KB | 0644 |
|
| _threading_local.pyo | File | 6.45 KB | 0644 |
|
| _weakrefset.py | File | 5.48 KB | 0644 |
|
| _weakrefset.pyc | File | 9.25 KB | 0644 |
|
| _weakrefset.pyo | File | 9.25 KB | 0644 |
|
| abc.py | File | 6.98 KB | 0644 |
|
| abc.pyc | File | 6 KB | 0644 |
|
| abc.pyo | File | 5.94 KB | 0644 |
|
| aifc.py | File | 32.94 KB | 0644 |
|
| aifc.pyc | File | 29.31 KB | 0644 |
|
| aifc.pyo | File | 29.31 KB | 0644 |
|
| antigravity.py | File | 60 B | 0644 |
|
| antigravity.pyc | File | 203 B | 0644 |
|
| antigravity.pyo | File | 203 B | 0644 |
|
| anydbm.py | File | 2.6 KB | 0644 |
|
| anydbm.pyc | File | 2.73 KB | 0644 |
|
| anydbm.pyo | File | 2.73 KB | 0644 |
|
| argparse.py | File | 86.46 KB | 0644 |
|
| argparse.pyc | File | 62.57 KB | 0644 |
|
| argparse.pyo | File | 62.41 KB | 0644 |
|
| ast.py | File | 11.53 KB | 0644 |
|
| ast.pyc | File | 12.65 KB | 0644 |
|
| ast.pyo | File | 12.65 KB | 0644 |
|
| asynchat.py | File | 11.13 KB | 0644 |
|
| asynchat.pyc | File | 8.44 KB | 0644 |
|
| asynchat.pyo | File | 8.44 KB | 0644 |
|
| asyncore.py | File | 20.36 KB | 0644 |
|
| asyncore.pyc | File | 18.4 KB | 0644 |
|
| asyncore.pyo | File | 18.4 KB | 0644 |
|
| atexit.py | File | 1.67 KB | 0644 |
|
| atexit.pyc | File | 2.15 KB | 0644 |
|
| atexit.pyo | File | 2.15 KB | 0644 |
|
| audiodev.py | File | 7.42 KB | 0644 |
|
| audiodev.pyc | File | 8.27 KB | 0644 |
|
| audiodev.pyo | File | 8.27 KB | 0644 |
|
| base64.py | File | 11.09 KB | 0755 |
|
| base64.pyc | File | 10.63 KB | 0644 |
|
| base64.pyo | File | 10.63 KB | 0644 |
|
| bdb.py | File | 21.21 KB | 0644 |
|
| bdb.pyc | File | 18.65 KB | 0644 |
|
| bdb.pyo | File | 18.65 KB | 0644 |
|
| binhex.py | File | 14.14 KB | 0644 |
|
| binhex.pyc | File | 15.04 KB | 0644 |
|
| binhex.pyo | File | 15.04 KB | 0644 |
|
| bisect.py | File | 2.53 KB | 0644 |
|
| bisect.pyc | File | 3 KB | 0644 |
|
| bisect.pyo | File | 3 KB | 0644 |
|
| cProfile.py | File | 6.43 KB | 0755 |
|
| cProfile.pyc | File | 6.25 KB | 0644 |
|
| cProfile.pyo | File | 6.25 KB | 0644 |
|
| calendar.py | File | 22.76 KB | 0644 |
|
| calendar.pyc | File | 27.13 KB | 0644 |
|
| calendar.pyo | File | 27.13 KB | 0644 |
|
| cgi.py | File | 33.68 KB | 0755 |
|
| cgi.pyc | File | 31.71 KB | 0644 |
|
| cgi.pyo | File | 31.71 KB | 0644 |
|
| cgitb.py | File | 11.89 KB | 0644 |
|
| cgitb.pyc | File | 11.9 KB | 0644 |
|
| cgitb.pyo | File | 11.9 KB | 0644 |
|
| chunk.py | File | 5.25 KB | 0644 |
|
| chunk.pyc | File | 5.46 KB | 0644 |
|
| chunk.pyo | File | 5.46 KB | 0644 |
|
| cmd.py | File | 14.67 KB | 0644 |
|
| cmd.pyc | File | 13.71 KB | 0644 |
|
| cmd.pyo | File | 13.71 KB | 0644 |
|
| code.py | File | 9.95 KB | 0644 |
|
| code.pyc | File | 10.09 KB | 0644 |
|
| code.pyo | File | 10.09 KB | 0644 |
|
| codecs.py | File | 34.44 KB | 0644 |
|
| codecs.pyc | File | 35.74 KB | 0644 |
|
| codecs.pyo | File | 35.74 KB | 0644 |
|
| codeop.py | File | 5.86 KB | 0644 |
|
| codeop.pyc | File | 6.44 KB | 0644 |
|
| codeop.pyo | File | 6.44 KB | 0644 |
|
| collections.py | File | 25.28 KB | 0644 |
|
| collections.pyc | File | 23.99 KB | 0644 |
|
| collections.pyo | File | 23.94 KB | 0644 |
|
| colorsys.py | File | 3.6 KB | 0644 |
|
| colorsys.pyc | File | 3.9 KB | 0644 |
|
| colorsys.pyo | File | 3.9 KB | 0644 |
|
| commands.py | File | 2.49 KB | 0644 |
|
| commands.pyc | File | 2.41 KB | 0644 |
|
| commands.pyo | File | 2.41 KB | 0644 |
|
| compileall.py | File | 7.58 KB | 0644 |
|
| compileall.pyc | File | 6.85 KB | 0644 |
|
| compileall.pyo | File | 6.85 KB | 0644 |
|
| contextlib.py | File | 4.32 KB | 0644 |
|
| contextlib.pyc | File | 4.35 KB | 0644 |
|
| contextlib.pyo | File | 4.35 KB | 0644 |
|
| cookielib.py | File | 63.21 KB | 0644 |
|
| cookielib.pyc | File | 53.55 KB | 0644 |
|
| cookielib.pyo | File | 53.37 KB | 0644 |
|
| copy.py | File | 11.25 KB | 0644 |
|
| copy.pyc | File | 11.91 KB | 0644 |
|
| copy.pyo | File | 11.82 KB | 0644 |
|
| copy_reg.py | File | 6.64 KB | 0644 |
|
| copy_reg.pyc | File | 4.99 KB | 0644 |
|
| copy_reg.pyo | File | 4.95 KB | 0644 |
|
| crypt.py | File | 2.24 KB | 0644 |
|
| crypt.pyc | File | 2.89 KB | 0644 |
|
| crypt.pyo | File | 2.89 KB | 0644 |
|
| csv.py | File | 15.96 KB | 0644 |
|
| csv.pyc | File | 13.14 KB | 0644 |
|
| csv.pyo | File | 13.14 KB | 0644 |
|
| dbhash.py | File | 498 B | 0644 |
|
| dbhash.pyc | File | 718 B | 0644 |
|
| dbhash.pyo | File | 718 B | 0644 |
|
| decimal.py | File | 215.84 KB | 0644 |
|
| decimal.pyc | File | 167.33 KB | 0644 |
|
| decimal.pyo | File | 167.33 KB | 0644 |
|
| difflib.py | File | 80.42 KB | 0644 |
|
| difflib.pyc | File | 60.5 KB | 0644 |
|
| difflib.pyo | File | 60.45 KB | 0644 |
|
| dircache.py | File | 1.1 KB | 0644 |
|
| dircache.pyc | File | 1.54 KB | 0644 |
|
| dircache.pyo | File | 1.54 KB | 0644 |
|
| dis.py | File | 6.35 KB | 0644 |
|
| dis.pyc | File | 6.08 KB | 0644 |
|
| dis.pyo | File | 6.08 KB | 0644 |
|
| doctest.py | File | 102.01 KB | 0644 |
|
| doctest.pyc | File | 81.45 KB | 0644 |
|
| doctest.pyo | File | 81.17 KB | 0644 |
|
| dumbdbm.py | File | 8.61 KB | 0644 |
|
| dumbdbm.pyc | File | 6.41 KB | 0644 |
|
| dumbdbm.pyo | File | 6.41 KB | 0644 |
|
| dummy_thread.py | File | 4.31 KB | 0644 |
|
| dummy_thread.pyc | File | 5.27 KB | 0644 |
|
| dummy_thread.pyo | File | 5.27 KB | 0644 |
|
| dummy_threading.py | File | 2.74 KB | 0644 |
|
| dummy_threading.pyc | File | 1.25 KB | 0644 |
|
| dummy_threading.pyo | File | 1.25 KB | 0644 |
|
| filecmp.py | File | 9.36 KB | 0644 |
|
| filecmp.pyc | File | 9.4 KB | 0644 |
|
| filecmp.pyo | File | 9.4 KB | 0644 |
|
| fileinput.py | File | 13.81 KB | 0644 |
|
| fileinput.pyc | File | 14.48 KB | 0644 |
|
| fileinput.pyo | File | 14.48 KB | 0644 |
|
| fnmatch.py | File | 3.16 KB | 0644 |
|
| fnmatch.pyc | File | 3.45 KB | 0644 |
|
| fnmatch.pyo | File | 3.45 KB | 0644 |
|
| formatter.py | File | 14.56 KB | 0644 |
|
| formatter.pyc | File | 18.73 KB | 0644 |
|
| formatter.pyo | File | 18.73 KB | 0644 |
|
| fpformat.py | File | 4.59 KB | 0644 |
|
| fpformat.pyc | File | 4.56 KB | 0644 |
|
| fpformat.pyo | File | 4.56 KB | 0644 |
|
| fractions.py | File | 21.87 KB | 0644 |
|
| fractions.pyc | File | 19.27 KB | 0644 |
|
| fractions.pyo | File | 19.27 KB | 0644 |
|
| ftplib.py | File | 36.1 KB | 0644 |
|
| ftplib.pyc | File | 33.38 KB | 0644 |
|
| ftplib.pyo | File | 33.38 KB | 0644 |
|
| functools.py | File | 4.37 KB | 0644 |
|
| functools.pyc | File | 5.95 KB | 0644 |
|
| functools.pyo | File | 5.95 KB | 0644 |
|
| genericpath.py | File | 2.94 KB | 0644 |
|
| genericpath.pyc | File | 3.19 KB | 0644 |
|
| genericpath.pyo | File | 3.19 KB | 0644 |
|
| getopt.py | File | 7.15 KB | 0644 |
|
| getopt.pyc | File | 6.5 KB | 0644 |
|
| getopt.pyo | File | 6.45 KB | 0644 |
|
| getpass.py | File | 5.43 KB | 0644 |
|
| getpass.pyc | File | 4.63 KB | 0644 |
|
| getpass.pyo | File | 4.63 KB | 0644 |
|
| gettext.py | File | 19.47 KB | 0644 |
|
| gettext.pyc | File | 15.19 KB | 0644 |
|
| gettext.pyo | File | 15.19 KB | 0644 |
|
| glob.py | File | 2.86 KB | 0644 |
|
| glob.pyc | File | 2.83 KB | 0644 |
|
| glob.pyo | File | 2.83 KB | 0644 |
|
| gzip.py | File | 18.26 KB | 0644 |
|
| gzip.pyc | File | 14.72 KB | 0644 |
|
| gzip.pyo | File | 14.72 KB | 0644 |
|
| hashlib.py | File | 7.48 KB | 0644 |
|
| hashlib.pyc | File | 6.74 KB | 0644 |
|
| hashlib.pyo | File | 6.74 KB | 0644 |
|
| heapq.py | File | 17.76 KB | 0644 |
|
| heapq.pyc | File | 14.13 KB | 0644 |
|
| heapq.pyo | File | 14.13 KB | 0644 |
|
| hmac.py | File | 4.48 KB | 0644 |
|
| hmac.pyc | File | 4.44 KB | 0644 |
|
| hmac.pyo | File | 4.44 KB | 0644 |
|
| htmlentitydefs.py | File | 17.63 KB | 0644 |
|
| htmlentitydefs.pyc | File | 6.22 KB | 0644 |
|
| htmlentitydefs.pyo | File | 6.22 KB | 0644 |
|
| htmllib.py | File | 12.57 KB | 0644 |
|
| htmllib.pyc | File | 19.83 KB | 0644 |
|
| htmllib.pyo | File | 19.83 KB | 0644 |
|
| httplib.py | File | 50.32 KB | 0644 |
|
| httplib.pyc | File | 36.61 KB | 0644 |
|
| httplib.pyo | File | 36.43 KB | 0644 |
|
| ihooks.py | File | 18.54 KB | 0644 |
|
| ihooks.pyc | File | 20.87 KB | 0644 |
|
| ihooks.pyo | File | 20.87 KB | 0644 |
|
| imaplib.py | File | 47.14 KB | 0644 |
|
| imaplib.pyc | File | 44.28 KB | 0644 |
|
| imaplib.pyo | File | 41.63 KB | 0644 |
|
| imghdr.py | File | 3.46 KB | 0644 |
|
| imghdr.pyc | File | 4.73 KB | 0644 |
|
| imghdr.pyo | File | 4.73 KB | 0644 |
|
| imputil.py | File | 25.16 KB | 0644 |
|
| imputil.pyc | File | 15.26 KB | 0644 |
|
| imputil.pyo | File | 15.08 KB | 0644 |
|
| inspect.py | File | 41.47 KB | 0644 |
|
| inspect.pyc | File | 39.04 KB | 0644 |
|
| inspect.pyo | File | 39.04 KB | 0644 |
|
| io.py | File | 3.12 KB | 0644 |
|
| io.pyc | File | 3.4 KB | 0644 |
|
| io.pyo | File | 3.4 KB | 0644 |
|
| keyword.py | File | 1.95 KB | 0755 |
|
| keyword.pyc | File | 2.06 KB | 0644 |
|
| keyword.pyo | File | 2.06 KB | 0644 |
|
| linecache.py | File | 3.87 KB | 0644 |
|
| linecache.pyc | File | 3.14 KB | 0644 |
|
| linecache.pyo | File | 3.14 KB | 0644 |
|
| locale.py | File | 87.33 KB | 0644 |
|
| locale.pyc | File | 48.77 KB | 0644 |
|
| locale.pyo | File | 48.77 KB | 0644 |
|
| macpath.py | File | 6.11 KB | 0644 |
|
| macpath.pyc | File | 7.47 KB | 0644 |
|
| macpath.pyo | File | 7.47 KB | 0644 |
|
| macurl2path.py | File | 3.2 KB | 0644 |
|
| macurl2path.pyc | File | 2.71 KB | 0644 |
|
| macurl2path.pyo | File | 2.71 KB | 0644 |
|
| mailbox.py | File | 78.86 KB | 0644 |
|
| mailbox.pyc | File | 74.87 KB | 0644 |
|
| mailbox.pyo | File | 74.82 KB | 0644 |
|
| mailcap.py | File | 7.25 KB | 0644 |
|
| mailcap.pyc | File | 6.92 KB | 0644 |
|
| mailcap.pyo | File | 6.92 KB | 0644 |
|
| markupbase.py | File | 14.3 KB | 0644 |
|
| markupbase.pyc | File | 9.08 KB | 0644 |
|
| markupbase.pyo | File | 8.89 KB | 0644 |
|
| md5.py | File | 358 B | 0644 |
|
| md5.pyc | File | 378 B | 0644 |
|
| md5.pyo | File | 378 B | 0644 |
|
| mhlib.py | File | 32.65 KB | 0644 |
|
| mhlib.pyc | File | 33.01 KB | 0644 |
|
| mhlib.pyo | File | 33.01 KB | 0644 |
|
| mimetools.py | File | 7 KB | 0644 |
|
| mimetools.pyc | File | 8.03 KB | 0644 |
|
| mimetools.pyo | File | 8.03 KB | 0644 |
|
| mimetypes.py | File | 20.22 KB | 0644 |
|
| mimetypes.pyc | File | 17.86 KB | 0644 |
|
| mimetypes.pyo | File | 17.86 KB | 0644 |
|
| mimify.py | File | 14.67 KB | 0755 |
|
| mimify.pyc | File | 11.71 KB | 0644 |
|
| mimify.pyo | File | 11.71 KB | 0644 |
|
| modulefinder.py | File | 23.71 KB | 0644 |
|
| modulefinder.pyc | File | 18.27 KB | 0644 |
|
| modulefinder.pyo | File | 18.19 KB | 0644 |
|
| multifile.py | File | 4.71 KB | 0644 |
|
| multifile.pyc | File | 5.29 KB | 0644 |
|
| multifile.pyo | File | 5.25 KB | 0644 |
|
| mutex.py | File | 1.83 KB | 0644 |
|
| mutex.pyc | File | 2.46 KB | 0644 |
|
| mutex.pyo | File | 2.46 KB | 0644 |
|
| netrc.py | File | 4.47 KB | 0644 |
|
| netrc.pyc | File | 3.83 KB | 0644 |
|
| netrc.pyo | File | 3.83 KB | 0644 |
|
| new.py | File | 610 B | 0644 |
|
| new.pyc | File | 862 B | 0644 |
|
| new.pyo | File | 862 B | 0644 |
|
| nntplib.py | File | 20.97 KB | 0644 |
|
| nntplib.pyc | File | 20.55 KB | 0644 |
|
| nntplib.pyo | File | 20.55 KB | 0644 |
|
| ntpath.py | File | 18.02 KB | 0644 |
|
| ntpath.pyc | File | 11.6 KB | 0644 |
|
| ntpath.pyo | File | 11.56 KB | 0644 |
|
| nturl2path.py | File | 2.32 KB | 0644 |
|
| nturl2path.pyc | File | 1.77 KB | 0644 |
|
| nturl2path.pyo | File | 1.77 KB | 0644 |
|
| numbers.py | File | 10.08 KB | 0644 |
|
| numbers.pyc | File | 13.68 KB | 0644 |
|
| numbers.pyo | File | 13.68 KB | 0644 |
|
| opcode.py | File | 5.35 KB | 0644 |
|
| opcode.pyc | File | 6 KB | 0644 |
|
| opcode.pyo | File | 6 KB | 0644 |
|
| optparse.py | File | 59.69 KB | 0644 |
|
| optparse.pyc | File | 52.78 KB | 0644 |
|
| optparse.pyo | File | 52.7 KB | 0644 |
|
| os.py | File | 25.17 KB | 0644 |
|
| os.pyc | File | 24.96 KB | 0644 |
|
| os.pyo | File | 24.96 KB | 0644 |
|
| os2emxpath.py | File | 4.5 KB | 0644 |
|
| os2emxpath.pyc | File | 4.39 KB | 0644 |
|
| os2emxpath.pyo | File | 4.39 KB | 0644 |
|
| pdb.doc | File | 7.73 KB | 0644 |
|
| pdb.py | File | 44.94 KB | 0755 |
|
| pdb.pyc | File | 42.59 KB | 0644 |
|
| pdb.pyo | File | 42.59 KB | 0644 |
|
| pickle.py | File | 44.09 KB | 0644 |
|
| pickle.pyc | File | 37.56 KB | 0644 |
|
| pickle.pyo | File | 37.37 KB | 0644 |
|
| pickletools.py | File | 72.79 KB | 0644 |
|
| pickletools.pyc | File | 55.77 KB | 0644 |
|
| pickletools.pyo | File | 54.95 KB | 0644 |
|
| pipes.py | File | 9.36 KB | 0644 |
|
| pipes.pyc | File | 9.09 KB | 0644 |
|
| pipes.pyo | File | 9.09 KB | 0644 |
|
| pkgutil.py | File | 19.87 KB | 0644 |
|
| pkgutil.pyc | File | 18.49 KB | 0644 |
|
| pkgutil.pyo | File | 18.49 KB | 0644 |
|
| platform.py | File | 51.97 KB | 0755 |
|
| platform.pyc | File | 36.04 KB | 0644 |
|
| platform.pyo | File | 36.04 KB | 0644 |
|
| plistlib.py | File | 14.83 KB | 0644 |
|
| plistlib.pyc | File | 18.82 KB | 0644 |
|
| plistlib.pyo | File | 18.73 KB | 0644 |
|
| popen2.py | File | 8.22 KB | 0644 |
|
| popen2.pyc | File | 8.81 KB | 0644 |
|
| popen2.pyo | File | 8.77 KB | 0644 |
|
| poplib.py | File | 12.52 KB | 0644 |
|
| poplib.pyc | File | 13.03 KB | 0644 |
|
| poplib.pyo | File | 13.03 KB | 0644 |
|
| posixfile.py | File | 7.82 KB | 0644 |
|
| posixfile.pyc | File | 7.47 KB | 0644 |
|
| posixfile.pyo | File | 7.47 KB | 0644 |
|
| posixpath.py | File | 13.27 KB | 0644 |
|
| posixpath.pyc | File | 11.03 KB | 0644 |
|
| posixpath.pyo | File | 11.03 KB | 0644 |
|
| pprint.py | File | 11.73 KB | 0644 |
|
| pprint.pyc | File | 10.06 KB | 0644 |
|
| pprint.pyo | File | 9.89 KB | 0644 |
|
| profile.py | File | 22.25 KB | 0755 |
|
| profile.pyc | File | 16.07 KB | 0644 |
|
| profile.pyo | File | 15.83 KB | 0644 |
|
| pstats.py | File | 26.08 KB | 0644 |
|
| pstats.pyc | File | 24.43 KB | 0644 |
|
| pstats.pyo | File | 24.43 KB | 0644 |
|
| pty.py | File | 4.94 KB | 0644 |
|
| pty.pyc | File | 4.85 KB | 0644 |
|
| pty.pyo | File | 4.85 KB | 0644 |
|
| py_compile.py | File | 5.79 KB | 0644 |
|
| py_compile.pyc | File | 6.27 KB | 0644 |
|
| py_compile.pyo | File | 6.27 KB | 0644 |
|
| pyclbr.py | File | 13.07 KB | 0644 |
|
| pyclbr.pyc | File | 9.42 KB | 0644 |
|
| pyclbr.pyo | File | 9.42 KB | 0644 |
|
| pydoc.py | File | 91.12 KB | 0755 |
|
| pydoc.pyc | File | 88.35 KB | 0644 |
|
| pydoc.pyo | File | 88.29 KB | 0644 |
|
| quopri.py | File | 6.81 KB | 0755 |
|
| quopri.pyc | File | 6.42 KB | 0644 |
|
| quopri.pyo | File | 6.42 KB | 0644 |
|
| random.py | File | 31.45 KB | 0644 |
|
| random.pyc | File | 24.99 KB | 0644 |
|
| random.pyo | File | 24.99 KB | 0644 |
|
| re.py | File | 12.66 KB | 0644 |
|
| re.pyc | File | 12.79 KB | 0644 |
|
| re.pyo | File | 12.79 KB | 0644 |
|
| repr.py | File | 4.2 KB | 0644 |
|
| repr.pyc | File | 5.26 KB | 0644 |
|
| repr.pyo | File | 5.26 KB | 0644 |
|
| rexec.py | File | 19.68 KB | 0644 |
|
| rexec.pyc | File | 23.58 KB | 0644 |
|
| rexec.pyo | File | 23.58 KB | 0644 |
|
| rfc822.py | File | 32.51 KB | 0644 |
|
| rfc822.pyc | File | 31.05 KB | 0644 |
|
| rfc822.pyo | File | 31.05 KB | 0644 |
|
| rlcompleter.py | File | 5.68 KB | 0644 |
|
| rlcompleter.pyc | File | 5.84 KB | 0644 |
|
| rlcompleter.pyo | File | 5.84 KB | 0644 |
|
| robotparser.py | File | 7.03 KB | 0644 |
|
| robotparser.pyc | File | 7.7 KB | 0644 |
|
| robotparser.pyo | File | 7.7 KB | 0644 |
|
| runpy.py | File | 10.45 KB | 0644 |
|
| runpy.pyc | File | 8.21 KB | 0644 |
|
| runpy.pyo | File | 8.21 KB | 0644 |
|
| sched.py | File | 4.97 KB | 0644 |
|
| sched.pyc | File | 4.88 KB | 0644 |
|
| sched.pyo | File | 4.88 KB | 0644 |
|
| sets.py | File | 18.6 KB | 0644 |
|
| sets.pyc | File | 16.5 KB | 0644 |
|
| sets.pyo | File | 16.5 KB | 0644 |
|
| sgmllib.py | File | 17.46 KB | 0644 |
|
| sgmllib.pyc | File | 15.07 KB | 0644 |
|
| sgmllib.pyo | File | 15.07 KB | 0644 |
|
| sha.py | File | 393 B | 0644 |
|
| sha.pyc | File | 421 B | 0644 |
|
| sha.pyo | File | 421 B | 0644 |
|
| shelve.py | File | 7.89 KB | 0644 |
|
| shelve.pyc | File | 10.03 KB | 0644 |
|
| shelve.pyo | File | 10.03 KB | 0644 |
|
| shlex.py | File | 10.88 KB | 0644 |
|
| shlex.pyc | File | 7.37 KB | 0644 |
|
| shlex.pyo | File | 7.37 KB | 0644 |
|
| shutil.py | File | 18.46 KB | 0644 |
|
| shutil.pyc | File | 18.1 KB | 0644 |
|
| shutil.pyo | File | 18.1 KB | 0644 |
|
| site.py | File | 19.61 KB | 0644 |
|
| site.pyc | File | 19.11 KB | 0644 |
|
| site.pyo | File | 19.11 KB | 0644 |
|
| smtpd.py | File | 18.11 KB | 0755 |
|
| smtpd.pyc | File | 15.52 KB | 0644 |
|
| smtpd.pyo | File | 15.52 KB | 0644 |
|
| smtplib.py | File | 30.9 KB | 0755 |
|
| smtplib.pyc | File | 29.29 KB | 0644 |
|
| smtplib.pyo | File | 29.29 KB | 0644 |
|
| sndhdr.py | File | 5.83 KB | 0644 |
|
| sndhdr.pyc | File | 7.18 KB | 0644 |
|
| sndhdr.pyo | File | 7.18 KB | 0644 |
|
| socket.py | File | 20.03 KB | 0644 |
|
| socket.pyc | File | 15.73 KB | 0644 |
|
| socket.pyo | File | 15.64 KB | 0644 |
|
| sre.py | File | 384 B | 0644 |
|
| sre.pyc | File | 519 B | 0644 |
|
| sre.pyo | File | 519 B | 0644 |
|
| sre_compile.py | File | 15.99 KB | 0644 |
|
| sre_compile.pyc | File | 10.76 KB | 0644 |
|
| sre_compile.pyo | File | 10.65 KB | 0644 |
|
| sre_constants.py | File | 6.95 KB | 0644 |
|
| sre_constants.pyc | File | 5.97 KB | 0644 |
|
| sre_constants.pyo | File | 5.97 KB | 0644 |
|
| sre_parse.py | File | 26.84 KB | 0644 |
|
| sre_parse.pyc | File | 18.98 KB | 0644 |
|
| sre_parse.pyo | File | 18.98 KB | 0644 |
|
| ssl.py | File | 36.89 KB | 0644 |
|
| ssl.pyc | File | 31.51 KB | 0644 |
|
| ssl.pyo | File | 31.51 KB | 0644 |
|
| stat.py | File | 1.8 KB | 0644 |
|
| stat.pyc | File | 2.69 KB | 0644 |
|
| stat.pyo | File | 2.69 KB | 0644 |
|
| statvfs.py | File | 898 B | 0644 |
|
| statvfs.pyc | File | 620 B | 0644 |
|
| statvfs.pyo | File | 620 B | 0644 |
|
| string.py | File | 20.27 KB | 0644 |
|
| string.pyc | File | 19.54 KB | 0644 |
|
| string.pyo | File | 19.54 KB | 0644 |
|
| stringold.py | File | 12.16 KB | 0644 |
|
| stringold.pyc | File | 12.25 KB | 0644 |
|
| stringold.pyo | File | 12.25 KB | 0644 |
|
| stringprep.py | File | 13.21 KB | 0644 |
|
| stringprep.pyc | File | 14.15 KB | 0644 |
|
| stringprep.pyo | File | 14.08 KB | 0644 |
|
| struct.py | File | 82 B | 0644 |
|
| struct.pyc | File | 239 B | 0644 |
|
| struct.pyo | File | 239 B | 0644 |
|
| subprocess.py | File | 57.68 KB | 0644 |
|
| subprocess.pyc | File | 40.93 KB | 0644 |
|
| subprocess.pyo | File | 40.93 KB | 0644 |
|
| sunau.py | File | 16.15 KB | 0644 |
|
| sunau.pyc | File | 17.53 KB | 0644 |
|
| sunau.pyo | File | 17.53 KB | 0644 |
|
| sunaudio.py | File | 1.37 KB | 0644 |
|
| sunaudio.pyc | File | 1.94 KB | 0644 |
|
| sunaudio.pyo | File | 1.94 KB | 0644 |
|
| symbol.py | File | 2.01 KB | 0755 |
|
| symbol.pyc | File | 2.96 KB | 0644 |
|
| symbol.pyo | File | 2.96 KB | 0644 |
|
| symtable.py | File | 7.34 KB | 0644 |
|
| symtable.pyc | File | 11.59 KB | 0644 |
|
| symtable.pyo | File | 11.46 KB | 0644 |
|
| sysconfig.py | File | 21.88 KB | 0644 |
|
| sysconfig.pyc | File | 17.23 KB | 0644 |
|
| sysconfig.pyo | File | 17.23 KB | 0644 |
|
| tabnanny.py | File | 11.07 KB | 0755 |
|
| tabnanny.pyc | File | 8.05 KB | 0644 |
|
| tabnanny.pyo | File | 8.05 KB | 0644 |
|
| tarfile.py | File | 87.05 KB | 0644 |
|
| tarfile.pyc | File | 73.39 KB | 0644 |
|
| tarfile.pyo | File | 73.39 KB | 0644 |
|
| telnetlib.py | File | 26.18 KB | 0644 |
|
| telnetlib.pyc | File | 22.53 KB | 0644 |
|
| telnetlib.pyo | File | 22.53 KB | 0644 |
|
| tempfile.py | File | 17.91 KB | 0644 |
|
| tempfile.pyc | File | 19.35 KB | 0644 |
|
| tempfile.pyo | File | 19.35 KB | 0644 |
|
| textwrap.py | File | 16.64 KB | 0644 |
|
| textwrap.pyc | File | 11.62 KB | 0644 |
|
| textwrap.pyo | File | 11.53 KB | 0644 |
|
| this.py | File | 1002 B | 0644 |
|
| this.pyc | File | 1.19 KB | 0644 |
|
| this.pyo | File | 1.19 KB | 0644 |
|
| threading.py | File | 46.28 KB | 0644 |
|
| threading.pyc | File | 41.7 KB | 0644 |
|
| threading.pyo | File | 39.58 KB | 0644 |
|
| timeit.py | File | 11.82 KB | 0644 |
|
| timeit.pyc | File | 11.5 KB | 0644 |
|
| timeit.pyo | File | 11.5 KB | 0644 |
|
| toaiff.py | File | 3.07 KB | 0644 |
|
| toaiff.pyc | File | 3.03 KB | 0644 |
|
| toaiff.pyo | File | 3.03 KB | 0644 |
|
| token.py | File | 2.88 KB | 0755 |
|
| token.pyc | File | 3.73 KB | 0644 |
|
| token.pyo | File | 3.73 KB | 0644 |
|
| tokenize.py | File | 16.15 KB | 0644 |
|
| tokenize.pyc | File | 13.61 KB | 0644 |
|
| tokenize.pyo | File | 13.52 KB | 0644 |
|
| trace.py | File | 29.19 KB | 0644 |
|
| trace.pyc | File | 22.26 KB | 0644 |
|
| trace.pyo | File | 22.2 KB | 0644 |
|
| traceback.py | File | 10.99 KB | 0644 |
|
| traceback.pyc | File | 11.35 KB | 0644 |
|
| traceback.pyo | File | 11.35 KB | 0644 |
|
| tty.py | File | 879 B | 0644 |
|
| tty.pyc | File | 1.29 KB | 0644 |
|
| tty.pyo | File | 1.29 KB | 0644 |
|
| types.py | File | 1.99 KB | 0644 |
|
| types.pyc | File | 2.45 KB | 0644 |
|
| types.pyo | File | 2.45 KB | 0644 |
|
| urllib.py | File | 57.14 KB | 0644 |
|
| urllib.pyc | File | 49.1 KB | 0644 |
|
| urllib.pyo | File | 49 KB | 0644 |
|
| urllib2.py | File | 51.87 KB | 0644 |
|
| urllib2.pyc | File | 46.61 KB | 0644 |
|
| urllib2.pyo | File | 46.52 KB | 0644 |
|
| urlparse.py | File | 15.54 KB | 0644 |
|
| urlparse.pyc | File | 14.73 KB | 0644 |
|
| urlparse.pyo | File | 14.73 KB | 0644 |
|
| user.py | File | 1.59 KB | 0644 |
|
| user.pyc | File | 1.68 KB | 0644 |
|
| user.pyo | File | 1.68 KB | 0644 |
|
| uu.py | File | 6.4 KB | 0755 |
|
| uu.pyc | File | 4.21 KB | 0644 |
|
| uu.pyo | File | 4.21 KB | 0644 |
|
| uuid.py | File | 20.6 KB | 0644 |
|
| uuid.pyc | File | 20.68 KB | 0644 |
|
| uuid.pyo | File | 20.68 KB | 0644 |
|
| warnings.py | File | 13.71 KB | 0644 |
|
| warnings.pyc | File | 12.84 KB | 0644 |
|
| warnings.pyo | File | 12.02 KB | 0644 |
|
| wave.py | File | 17.67 KB | 0644 |
|
| wave.pyc | File | 19 KB | 0644 |
|
| wave.pyo | File | 18.94 KB | 0644 |
|
| weakref.py | File | 10.44 KB | 0644 |
|
| weakref.pyc | File | 13.72 KB | 0644 |
|
| weakref.pyo | File | 13.72 KB | 0644 |
|
| webbrowser.py | File | 22.19 KB | 0644 |
|
| webbrowser.pyc | File | 19.32 KB | 0644 |
|
| webbrowser.pyo | File | 19.27 KB | 0644 |
|
| whichdb.py | File | 3.3 KB | 0644 |
|
| whichdb.pyc | File | 2.19 KB | 0644 |
|
| whichdb.pyo | File | 2.19 KB | 0644 |
|
| wsgiref.egg-info | File | 187 B | 0644 |
|
| xdrlib.py | File | 5.43 KB | 0644 |
|
| xdrlib.pyc | File | 9.07 KB | 0644 |
|
| xdrlib.pyo | File | 9.07 KB | 0644 |
|
| xmllib.py | File | 34.05 KB | 0644 |
|
| xmllib.pyc | File | 26.22 KB | 0644 |
|
| xmllib.pyo | File | 26.22 KB | 0644 |
|
| xmlrpclib.py | File | 50.78 KB | 0644 |
|
| xmlrpclib.pyc | File | 42.89 KB | 0644 |
|
| xmlrpclib.pyo | File | 42.71 KB | 0644 |
|
| zipfile.py | File | 56.45 KB | 0644 |
|
| zipfile.pyc | File | 40.33 KB | 0644 |
|
| zipfile.pyo | File | 40.33 KB | 0644 |
|