Looks good, Ethan
On Mon, Sep 19, 2011 at 11:18, Ben Pfaff <[email protected]> wrote: > The JSON parser in OVS always yields unicode strings and lists, never > non-unicode strings or tuples, but it's easy to create them when building > JSON elsewhere, so accept both forms. > --- > python/ovs/db/data.py | 3 ++- > python/ovs/db/parser.py | 9 ++++----- > python/ovs/db/schema.py | 10 +++++----- > python/ovs/db/types.py | 6 +++--- > python/ovs/ovsuuid.py | 5 +++-- > 5 files changed, 17 insertions(+), 16 deletions(-) > > diff --git a/python/ovs/db/data.py b/python/ovs/db/data.py > index 334c261..f71def9 100644 > --- a/python/ovs/db/data.py > +++ b/python/ovs/db/data.py > @@ -288,7 +288,8 @@ class Datum(object): > else: > class_ = "set" > > - inner = ovs.db.parser.unwrap_json(json, class_, list) > + inner = ovs.db.parser.unwrap_json(json, class_, [list, tuple], > + "array") > n = len(inner) > if n < type_.n_min or n > type_.n_max: > raise error.Error("%s must have %d to %d members but %d are " > diff --git a/python/ovs/db/parser.py b/python/ovs/db/parser.py > index 173922b..7f0a6f0 100644 > --- a/python/ovs/db/parser.py > +++ b/python/ovs/db/parser.py > @@ -89,11 +89,10 @@ def json_type_to_string(type_): > else: > return "<invalid>" > > -def unwrap_json(json, name, need_type): > - if (type(json) != list or len(json) != 2 or json[0] != name or > - type(json[1]) != need_type): > - raise error.Error('expected ["%s", <%s>]' > - % (name, json_type_to_string(need_type)), json) > +def unwrap_json(json, name, types, desc): > + if (type(json) not in (list, tuple) or len(json) != 2 or json[0] != name > or > + type(json[1]) not in types): > + raise error.Error('expected ["%s", <%s>]' % (name, desc), json) > return json[1] > > def parse_json_pair(json): > diff --git a/python/ovs/db/schema.py b/python/ovs/db/schema.py > index 65ddca6..1c474a8 100644 > --- a/python/ovs/db/schema.py > +++ b/python/ovs/db/schema.py > @@ -64,8 +64,8 @@ class DbSchema(object): > def from_json(json): > parser = ovs.db.parser.Parser(json, "database schema") > name = parser.get("name", ['id']) > - version = parser.get_optional("version", [unicode]) > - parser.get_optional("cksum", [unicode]) > + version = parser.get_optional("version", [str, unicode]) > + parser.get_optional("cksum", [str, unicode]) > tablesJson = parser.get("tables", [dict]) > parser.finish() > > @@ -125,8 +125,8 @@ class IdlSchema(DbSchema): > @staticmethod > def from_json(json): > parser = ovs.db.parser.Parser(json, "IDL schema") > - idlPrefix = parser.get("idlPrefix", [unicode]) > - idlHeader = parser.get("idlHeader", [unicode]) > + idlPrefix = parser.get("idlPrefix", [str, unicode]) > + idlHeader = parser.get("idlHeader", [str, unicode]) > > subjson = dict(json) > del subjson["idlPrefix"] > @@ -249,7 +249,7 @@ class ColumnSchema(object): > parser = ovs.db.parser.Parser(json, "schema for column %s" % name) > mutable = parser.get_optional("mutable", [bool], True) > ephemeral = parser.get_optional("ephemeral", [bool], False) > - type_ = types.Type.from_json(parser.get("type", [dict, unicode])) > + type_ = types.Type.from_json(parser.get("type", [dict, str, > unicode])) > parser.finish() > > return ColumnSchema(name, mutable, not ephemeral, type_) > diff --git a/python/ovs/db/types.py b/python/ovs/db/types.py > index 08dfa0a..72ab410 100644 > --- a/python/ovs/db/types.py > +++ b/python/ovs/db/types.py > @@ -150,7 +150,7 @@ class BaseType(object): > > @staticmethod > def from_json(json): > - if type(json) == unicode: > + if type(json) in [str, unicode]: > return BaseType(AtomicType.from_json(json)) > > parser = ovs.db.parser.Parser(json, "ovsdb type") > @@ -437,8 +437,8 @@ class Type(object): > return Type(BaseType.from_json(json)) > > parser = ovs.db.parser.Parser(json, "ovsdb type") > - key_json = parser.get("key", [dict, unicode]) > - value_json = parser.get_optional("value", [dict, unicode]) > + key_json = parser.get("key", [dict, str, unicode]) > + value_json = parser.get_optional("value", [dict, str, unicode]) > min_json = parser.get_optional("min", [int]) > max_json = parser.get_optional("max", [int, str, unicode]) > parser.finish() > diff --git a/python/ovs/ovsuuid.py b/python/ovs/ovsuuid.py > index 0776dd5..9bd1392 100644 > --- a/python/ovs/ovsuuid.py > +++ b/python/ovs/ovsuuid.py > @@ -37,7 +37,7 @@ def from_string(s): > > def from_json(json, symtab=None): > try: > - s = ovs.db.parser.unwrap_json(json, "uuid", unicode) > + s = ovs.db.parser.unwrap_json(json, "uuid", [str, unicode], "string") > if not uuidRE.match(s): > raise error.Error("\"%s\" is not a valid UUID" % s, json) > return uuid.UUID(s) > @@ -45,7 +45,8 @@ def from_json(json, symtab=None): > if not symtab: > raise e > try: > - name = ovs.db.parser.unwrap_json(json, "named-uuid", unicode) > + name = ovs.db.parser.unwrap_json(json, "named-uuid", > + [str, unicode], "string") > except error.Error: > raise e > > -- > 1.7.4.4 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
