In a previous article I sketched the road map for implementing a small web application to present data from a small weather station with the help of PyWWS and the Flot plugin. In this article we tackle the conversion of the pywww/DataStore
module to Python 3.
Converting the pywws/DataStore module to Python 3
Because pywws
is written for Python 2.x we need to convert it to Python 3 because I don't want to continue developing for Python 2.x now that many frameworks and libraries are converted to version 3. In principle the 2to3 tool should be able to do the bulk of the work but we cannot be sure before we try and test.
For our web application we will only need to use the pywws/DataStore
module to get access to stored weather data and fortunately it has no dependencies on other pywws
modules. Converting this module with the 2to3
tool and comparing the differences shows only 3 changes:
- the
ConfigParser
module is now calledconfigparser
map()
returns amap
object instead of alist
open()
takes an 'r'mode
argument instead of 'rb' in those cases where the result of theopen()
function is expected to return unicode strings instead of bytes.
map
object is a generator and not a plain list
. This means is has to be explicitly converted to a list if an operation expects a plain list. For an expansion from a list to a number of arguments this is correctly done by the 2to3
utility. For example, the following line
return datetime(*map(int, (date_string[0:4], date_string[17:19])))is translated to
return datetime(*list(map(int, (date_string[0:4], date_string[17:19])))All in all this is a fairly painless conversion process (but remember that I converted just the
Datastore
module, although with 455 lines this is pretty big). The next article will show how we implement server side component of the weather application based on PyWWS and CherryPy.