[F] views: fix 2 unicode errors
1. You can now use valid unicode strings in ValidationError exception.
Previously, if 'err' contains unicode, UnicodeDecodeError was raised by format_errors()
>>> templstr = '<li>%s</li>\n'
>>> e = ValidationError(None, {None: u'oué, une exception en unicode!'})
>>> templstr % e
'<li>None (None): ou\xc3\xa9, une exception en unicode!</li>\n'
>>> templstr = u'<li>%s</li>\n'
>>> templstr % e
u'<li>None (None): ou\xe9, une exception en unicode!</li>\n'
2. The message of an Exception can contains unicode. But it now properly managed by “informal” string representation.
We can easily fix the problem by using the Exception.message attribute that still contains the original message.
>>> a = AssertionError(u'séfdsdf')
>>> a.message
u's\xe9fdsdf'
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
>>> a = ValueError(u'fsdfsdéfsdfs')
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a
ValueError(u'fsdfsd\xe9fsdfs',)
>>> unicode(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a.message
u'fsdfsd\xe9fsdfs'
# -*- shell-script -*-_ec_commands(){ local commands commands="$("$ec" listcommands 2>/dev/null)" || commands="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))}_ec(){ local cur prev cmd cmd_index opts i local ec="$1" COMPREPLY=() cur="$2" prev="$3" # searching for the command # (first non-option argument that doesn't follow a global option that # receives an argument) for ((i=1; $i<=$COMP_CWORD; i++)); do if [[ ${COMP_WORDS[i]} != -* ]]; then cmd="${COMP_WORDS[i]}" cmd_index=$i break fi done if [[ "$cur" == -* ]]; then if [ -z "$cmd" ]; then COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '--help' -- "$cur")) else options="$("$ec" listcommands "$cmd" 2>/dev/null)" || commands="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options' -- "$cur")) fi return fi if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then _ec_commands return fi # try to generate completion candidates for whatever command the user typed if _ec_command_specific; then return fi}_ec_command_specific(){ if [ "$(type -t "_ec_cmd_$cmd")" = function ]; then "_ec_cmd_$cmd" return 0 fi case "$cmd" in client) if [ "$prev" == "-b" ] || [ "$prev" == "--batch" ]; then COMPREPLY=( $( compgen -o filenames -G "$cur*" ) ) return fi options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options="" instances="$("$ec" listinstances 2>/dev/null)" || instances="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; db-dump) if [ "$prev" == "-o" ] || [ "$prev" == "--output" ]; then COMPREPLY=( $( compgen -o filenames -G "$cur*" ) ) return fi options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options="" instances="$("$ec" listinstances 2>/dev/null)" || instances="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; # commands with template as argument i18ncube) cubes="$("$ec" listcubes 2>/dev/null)" || cubes="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $cubes' -- "$cur")) ;; # generic commands with instance as argument start|stop|reload|restart|upgrade|start-repository|db-create|db-init|db-check|db-grant-user) options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options="" instances="$("$ec" listinstances 2>/dev/null)" || instances="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; # generic commands without argument list|newtemplate|i18ncubicweb|live-server) options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; # generic commands without option shell|i18ninstance|delete|status|schema-sync) instances="$("$ec" listinstances 2>/dev/null)" || instances="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; # XXX should do better create) options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; db-copy,db-restore,mboximport) instances="$("$ec" listinstances 2>/dev/null)" || instances="" COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur")) ;; *) return 1 ;; esac return 0}complete -o bashdefault -o default -F _ec cubicweb-ctl 2>/dev/null \ || complete -o default -F _ec cubicweb-ctl