X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fovs%2Fovsuuid.py;h=56fdad05ee55ade305cc026167557a62ffaa053c;hb=cfc50ae514f805dcd9c14589f21158185424daf6;hp=8a76d3a7f6386fbf272c97fc79033385c908c487;hpb=fdba672899fe192cb8c646d5b6d6d9260f42904d;p=sliver-openvswitch.git diff --git a/python/ovs/ovsuuid.py b/python/ovs/ovsuuid.py index 8a76d3a7f..56fdad05e 100644 --- a/python/ovs/ovsuuid.py +++ b/python/ovs/ovsuuid.py @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2010, 2011 Nicira Networks +# Copyright (c) 2009, 2010, 2011 Nicira, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,57 +18,53 @@ import uuid from ovs.db import error import ovs.db.parser -class UUID(uuid.UUID): - x = "[0-9a-fA-f]" - uuidRE = re.compile("^(%s{8})-(%s{4})-(%s{4})-(%s{4})-(%s{4})(%s{8})$" - % (x, x, x, x, x, x)) +uuidRE = re.compile("^xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx$" + .replace('x', '[0-9a-fA-F]')) - def __init__(self, s): - uuid.UUID.__init__(self, hex=s) - @staticmethod - def zero(): - return UUID('00000000-0000-0000-0000-000000000000') +def zero(): + return uuid.UUID(int=0) - def is_zero(self): - return self.int == 0 - @staticmethod - def is_valid_string(s): - return UUID.uuidRE.match(s) != None +def is_valid_string(s): + return uuidRE.match(s) is not None - @staticmethod - def from_string(s): - if not UUID.is_valid_string(s): - raise error.Error("%s is not a valid UUID" % s) - return UUID(s) - @staticmethod - def from_json(json, symtab=None): +def from_string(s): + if not is_valid_string(s): + raise error.Error("%s is not a valid UUID" % s) + return uuid.UUID(s) + + +def from_json(json, symtab=None): + try: + 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) + except error.Error, e: + if not symtab: + raise e try: - s = ovs.db.parser.unwrap_json(json, "uuid", unicode) - if not UUID.uuidRE.match(s): - raise error.Error("\"%s\" is not a valid UUID" % s, json) - return UUID(s) - except error.Error, e: - if not symtab: - raise e - try: - name = ovs.db.parser.unwrap_json(json, "named-uuid", unicode) - except error.Error: - raise e - - if name not in symtab: - symtab[name] = uuid4() - return symtab[name] - - def to_json(self): - return ["uuid", str(self)] - - def cInitUUID(self, var): - m = re.match(str(self)) - return ["%s.parts[0] = 0x%s;" % (var, m.group(1)), - "%s.parts[1] = 0x%s%s;" % (var, m.group(2), m.group(3)), - "%s.parts[2] = 0x%s%s;" % (var, m.group(4), m.group(5)), - "%s.parts[3] = 0x%s;" % (var, m.group(6))] + name = ovs.db.parser.unwrap_json(json, "named-uuid", + [str, unicode], "string") + except error.Error: + raise e + + if name not in symtab: + symtab[name] = uuid.uuid4() + return symtab[name] + + +def to_json(uuid_): + return ["uuid", str(uuid_)] + + +def to_c_assignment(uuid_, var): + """Returns an array of strings, each of which contain a C statement. The + statements assign 'uuid_' to a "struct uuid" as defined in Open vSwitch + lib/uuid.h.""" + hex_string = uuid_.hex + return ["%s.parts[%d] = 0x%s;" % (var, x, hex_string[x * 8:(x + 1) * 8]) + for x in range(4)]