[ovs-dev] filename encoding in Python--any Python programmers in the house?

Ben Pfaff blp at nicira.com
Tue Oct 22 21:04:07 UTC 2013


Thanks for all the information.  After some experimentation this
morning, I think I'm pretty close to a solution good enough to make
the tests pass.

In general string encoding in Python seems to be a big mess.

On Mon, Oct 21, 2013 at 07:37:12PM -0700, Reid Price wrote:
> Apologies for the long answer.  Skip to the last two paragraphs for
> suggestions.
> 
> > "%s: %s %s" % (self.name, title, msg)
> 
> I've narrowed this down a bit.  The minimal reproduction is:
> 
>  # python -c '"%s%s" % ("\xc2", u"")'
>  UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0:
> ordinal not in range(128)
> 
> Which is really the same as
> 
>  # python -c 'unicode("\xc2")'
> 
> This behavior results because there is a unicode string, which forces
> the entire string to be converted to unicode - it is actually 'msg' above
> causing the problem, which looks like
> 
>  u'request, method="exit", params=[], id=0'
> 
> via
> 
>  ['request', 'method="exit"', u'params=[]', u'id=0']
> 
> when I debugged 0369 (testing unixctl ovs-vswitchd exit).
> 
> I assume the "proper fix" involves converting everything everywhere to
> unicode.  Note that json decodes to unicode by default, so this will
> come up frequently.
> 
> If you converted the path name to utf-8 or the other portion to a string
> that would also allow the test to succeed, but I'm not sure how fragile
> that is.
> 
>    "\xc2\xab".decode('utf-8')
> 
> I tested a variety of fixes, but got lost at the ipsec tests, they seem
> to have their own version of interface-reconfigure hiding somewhere.
> If you want to fix these on a case-by-case basis, the easiest fix
> seems likely to be doing a string cast in all the places that unicode
> is used in combination with the path.
> 
> A slightly better fix might be doing the decode when the path is
> passed in or loaded (is a noop for normal strings), so that things
> are moving towards unicode.
> 
>   -Reid
> 
> 
> On Mon, Oct 21, 2013 at 10:26 AM, Ben Pfaff <blp at nicira.com> wrote:
> 
> > The Debian builds of Open vSwitch have suffered mysterious (to me)
> > errors for some time, e.g.:
> >
> > https://buildd.debian.org/status/fetch.php?pkg=openvswitch&arch=amd64&ver=1.9.3%2Bgit20131021-1&stamp=1382373784&file=log
> >
> > The root of these problems seems to be in filename encoding.  The Debian
> > buildds appear to build in directories named with gratuitous UTF-8, such
> > as:
> >         /???BUILDDIR???/openvswitch-1.9.3+git20131021/python/ovs/util.py
> >
> > When I try "make check" in a directory with a similar name on my own
> > system, I get pretty clear encoding-related failures in the same tests,
> > e.g.:
> >
> >     ../../tests/unixctl-py.at:10: $PYTHON $srcdir/appctl.py --timeout 20
> > -t ovs-vswitchd exit
> >     --- /dev/null   2013-07-07 19:52:44.697519595 -0700
> >     +++
> > /home/blp/nicira/???ovs???/_build/tests/testsuite.dir/at-groups/370/stderr
> >  2013-10-21 09:59:11.000000000 -0700
> >     @@ -0,0 +1,14 @@
> >     +Traceback (most recent call last):
> >     +  File "../../../../tests/appctl.py", line 75, in <module>
> >     +    main()
> >     +  File "../../../../tests/appctl.py", line 60, in main
> >     +    err_no, error, result = client.transact(args.command, args.argv)
> >     +  File "/home/blp/nicira/???ovs???/python/ovs/unixctl/client.py", line
> > 41, in transact
> >     +    error, reply = self._conn.transact_block(request)
> >     +  File "/home/blp/nicira/???ovs???/python/ovs/jsonrpc.py", line 306, in
> > transact_block
> >     +    error = self.send(request)
> >     +  File "/home/blp/nicira/???ovs???/python/ovs/jsonrpc.py", line 235, in
> > send
> >     +    self.__log_msg("send", msg)
> >     +  File "/home/blp/nicira/???ovs???/python/ovs/jsonrpc.py", line 229, in
> > __log_msg
> >     +    vlog.dbg("%s: %s %s" % (self.name, title, msg))
> >     +UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position
> > 22: ordinal not in range(128)
> >
> > However I can't figure out the root cause of these problems.  In simple
> > tests with Python I don't get similar errors (note that the tests set
> > LC_ALL=C):
> >
> >     blp at blp:~/nicira/???ovs???/_build(0)$ LC_ALL=C python
> >     Python 2.7.3 (default, Jan  2 2013, 16:53:07)
> >     [GCC 4.7.2] on linux2
> >     Type "help", "copyright", "credits" or "license" for more information.
> >     >>> import os
> >     >>> 'prefix %s postfix' % os.getcwd()
> >     'prefix /home/blp/nicira/\xc2\xabovs\xc2\xbb/_build postfix'
> >     >>> print 'prefix %s postfix' % os.getcwd()
> >     prefix /home/blp/nicira/???ovs???/_build postfix
> >     >>>
> >
> > So I'm pretty puzzled.  Can anyone help me out?
> >
> > Thanks,
> >
> > Ben.
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> >
> >



More information about the dev mailing list