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)