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
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:
ConfigParsermodule is now called
mapobject instead of a
open()takes an 'r'
modeargument instead of 'rb' in those cases where the result of the
open()function is expected to return unicode strings instead of bytes.
mapobject 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
2to3utility. 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
Datastoremodule, 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.