Skip to main content

A workaround for UnicodeDecodeError when using mako template

Consider following code to rendering data with mako:

from mako.template import Template
tmpl = Template(filename=some_template_flle,
                module_directory=some_template_module_path)
print tmpl.render(**some_data) 

The code may have following error, if the some_data contains non-ascii characters, because the implementation use directly use unicode method to convert some_data:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

The error can be fixed by decode the some_data. Or there is another workaround, which is injecting a partial unicode function into the module generated:

from mako.template import Template
import functools
tmpl = Template(filename=some_template_flle,
                module_directory=some_template_module_path)
tmpl.module.unicode = functools.partial(unicode, encoding='utf-8')
print tmpl.render(**some_data) 

Comments

Popular posts from this blog

A simple implementation of DTW(Dynamic Time Warping) in C#/python

DTW(Dynamic Time Warping) is a very useful tools for time series analysis. This is a very simple (but not very efficient) c# implementation of DTW, the source code is available at  https://gist.github.com/1966342  . Use the program as below: double[] x = {9,3,1,5,1,2,0,1,0,2,2,8,1,7,0,6,4,4,5}; double[] y = {1,0,5,5,0,1,0,1,0,3,3,2,8,1,0,6,4,4,5}; SimpleDTW dtw = new SimpleDTW(x,y); dtw.calculateDTW(); The python implementation is available at  https://gist.github.com/3265694  . from python-dtw import Dtw import math dtw = Dtw([1, 2, 3, 4, 6], [1, 2, 3, 5],           distance_func=lambda x, y: math.fabs(x - y)) print dtw.calculate() #calculate the distance print dtw.get_path() #calculate the mapping path

Install mysql-python with mariadb

mysql-python requires libmysqlclient-dev in ubuntu, but the installation of mariadb will have the lib with unmet dependenccies, so the error of "mysql_config not found" may occurred if you install mysql-python via pip. The case is that mariadb has a compatible package, if you have the ppa setup as in  http://downloads.mariadb.org/ . Just "sudo apt-get install libmariadbclient-dev".

Config the size of shared memory(/dev/shm) for docker containers

Due to the issue from github , the size of shared memory is fixed at 64M. If you want larger size /dev/shm, please upgrade your docker to version newer than 1.10, and specify --shm-size when you run a docker image. Below is the help message of --shm-size. --shm-size="" Size of /dev/shm. The format is . number must be greater than 0. Unit is optional and can be b (bytes), k (kilobytes), m (megabytes), or g (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses 64m.