> I noticed that there's some code that insists on "string" objects in
> various places, which makes me a little nervous because "string" and
> "unicode" objects in Python seem almost interchangeable but they are
> not the same and a test for one will not accept the other.  There's a
> lot of "if type(json) in [str, unicode]" type code in the OVS python
> directory for that reason.

"string" in the unixctl python directory is defined as
types.StringTypes which is specified as follows:

"A sequence containing StringType and UnicodeType used to facilitate
easier checking for any string object. Using this is more portable
than using a sequence of the two string types constructed elsewhere
since it only contains UnicodeType if it has been built in the running
version of Python. For example: isinstance(s, types.StringTypes)."

> I keep hearing that string concatenation in Python is really slow.
> How about this (untested):

Yah it certainly is slower, but I think it's more readable.  This
feels like premature optimization to me.  I don't feel strongly about
it though.  If you think it's important I'll change it.

> ""[0] yields IndexError.  Would target.startswith("/") be safer?

Good Idea, I changed it.

>
> In UnixctlConnection._reply_impl(), I think that "if not
> body.endswith('\n')" would be more straightforward:
>> +        if len(body) and body[-1] != '\n':
>> +            body += "\n"

Changed

>
> I don't quite understand the code below, in
> UnixctlConnection._process_command().  First we check that all of the
> arguments are "string" objects, then we convert them to strings with
> "str"?

So in the first loop we're checking that they are either str or
unicode, and in the second loop, we convert them to str if they happen
to be unicode.  I struggled with whether or not this is the correct
thing to do as I wrote this.  Since unixctl commands are sort of
supposed to feel like a command line argc, argv main function, it
seems more correct to pass in strings than unicodes. But one could
argue that this isn't correct too I suppose.  Do you feel strongly
about it?  I'm not really sure what's correct.


> Is it OK to remove elements from a list you're iterating?  (I doubt
> it.)
>> +        for conn in self._conns:
>> +            error = conn.run()
>> +            if error and error != errno.EAGAIN:
>> +                conn._close()
>> +                self._conns.remove(conn)

I tried it out, and it looks like it doesn't work.  Good catch!

I'll send out an incremental after I receive feedback to the above comments.

Ethan
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to