I needed to return all the members of an object as an XML document in Python. I used the ElementTree library to do this.

The class in question is pretty basic: It has a constructor, member variables, getters and setters for the member variables, and now this new function.

Every Python class has a built-in __dict__ member, which is a dictionary ({}) of key/value pairs for all of the member variables, so I use that to get all of the variables to add to the ElementTree.

This function returns an xml.etree.ElementTree.Element object, which can be turned into a string if needed by using ElementTree’s tostring() method.

def getXML(self):
    """ Returns an XML representation of the object """
    topElem = Element("item")
    for key in self.__dict__.keys():
        elem = SubElement(topElem, key)
        elem.text = str(self.__dict__[key])
    return topElem

Apparently, it’s necessary to use separate CSS properties for each browser.

.unselectable {
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-o-user-select: none;
	user-select: none;
}

The Duke URLGrabber package for Python makes it incredibly easy to retrieve files from remote servers, and it abstracts urllib2 for you in a protocol-independent way, so you can focus on your application instead of spending time working with Python’s built-in urllib2.

On Windows and Mac OSX, by default, urllib2 (and therefore URLGrabber) will use the built-in proxy settings of the system – but sometimes you don’t want that.  For example, let’s say you’re using a Windows box that’s on a domain, and proxy settings have been pushed down by group policy.  You want to access local network resources without needing to route through the proxy or authenticate to it.

With urllib2, you would simply add code like the following:

proxy_support = urllib2.ProxyHandler({})

Note the empty dictionary “{}” to specify no proxies.  Doing the same for URLGrabber was suggested on a mailing list post – and it apparently worked for the poster.  However, I wasn’t able to get it to work, so I came up with another way.  I just specified a dummy proxy for a dummy protocol, as follows:

kwargs["proxies"] = { 'nothing': 'http://nothing' }

Have fun!

© 2011 David AndrzejewskiSuffusion theme by Sayontan Sinha