Menu

[r14]: / python_webdav / parse.py  Maximize  Restore  History

Download this file

73 lines (59 with data), 2.3 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import xml.parsers.expat
import httplib2
# Just to get some example data
#con = httplib2.Http()
#con.add_credentials('wibble', 'fish')
#a, b = con.request("http://localhost/myWebDAV/", method="PROPFIND", headers={'Depth':'1'})
class Response(object):
def __init__(self):
self.href = None
self.resourcetype = None
self.creationdate = None
self.getcontentlength = None
self.getlastmodified = None
self.getetag = None
self.executable = None
self.locks = []
self.getcontenttype = None
class Lock(object):
def __init__(self):
pass
class Parser(object):
def __init__(self):
self.element_list = []
self.closed_elements = []
self.response_objects = []
self.current_element = None
self.p = xml.parsers.expat.ParserCreate()
self.p.StartElementHandler = self.start_element
self.p.EndElementHandler = self.end_element
self.p.CharacterDataHandler = self.char_data
#self.p.StartNamespaceDeclHandler = self.ns_data
def start_element(self, name, attrs):
#print 'Start element:', name, attrs
namespace, element_name = name.split(':')
if element_name == 'response':
## Make a new response object
new_response = Response()
## Put it into the list
self.response_objects.append(new_response)
else:
self.current_element = element_name
def end_element(self, name):
print 'End element:', name
#self.element = element_list.pop()
#self.element.end_tag = name
#self.closed_elements.append(element)
if self.current_element == 'resourcetype':
self.response_objects[-1].resourcetype = 'resource'
elif self.current_element == 'collection':
self.response_objects[-1].resourcetype = 'collection'
def char_data(self, data):
if data.strip():
print 'Character data:', data #repr(data)
#self.element_list[-1].text = data
setattr(self.response_objects[-1], self.current_element, data)
def ns_data(self, prefix, uri):
print "Namespace data:", prefix, uri
def parse(self, data):
self.p.Parse(data, 1)