~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/canonical/database/enumcol.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-10-03 15:22:48 UTC
  • mfrom: (8758.4.18 garbo-lockfile)
  • Revision ID: launchpad@pqm.canonical.com-20111003152248-cv30fo2i8p0mu5mb
[r=lifeless][bug=553254] Regularly prune LoginToken rows

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
    ]
17
17
 
18
18
 
19
 
def check_enum_type(enum):
20
 
    if not issubclass(enum, DBEnumeratedType):
21
 
        raise TypeError(
22
 
            '%r must be a DBEnumeratedType: %r' % (enum, type(enum)))
23
 
 
24
 
 
25
 
def check_type(enum):
26
 
    if type(enum) in (list, tuple):
27
 
        map(check_enum_type, enum)
28
 
    else:
29
 
        check_enum_type(enum)
30
 
 
31
 
 
32
19
class DBEnumVariable(Variable):
33
20
    """A Storm variable class representing a DBEnumeratedType."""
34
21
    __slots__ = ("_enum",)
35
22
 
36
23
    def __init__(self, *args, **kwargs):
37
 
        enum = kwargs.pop("enum")
38
 
        if type(enum) not in (list, tuple):
39
 
            enum = (enum,)
40
 
        self._enum = enum
41
 
        check_type(self._enum)
 
24
        self._enum = kwargs.pop("enum")
 
25
        if not issubclass(self._enum, DBEnumeratedType):
 
26
            raise TypeError(
 
27
                '%r must be a DBEnumeratedType: %r'
 
28
                % (self._enum, type(self._enum)))
42
29
        super(DBEnumVariable, self).__init__(*args, **kwargs)
43
30
 
44
31
    def parse_set(self, value, from_db):
45
32
        if from_db:
46
 
            for enum in self._enum:
47
 
                try:
48
 
                    return enum.items[value]
49
 
                except KeyError:
50
 
                    pass
51
 
            raise KeyError('%r not in present in any of %r' % (
52
 
                value, self._enum))
 
33
            return self._enum.items[value]
53
34
        else:
54
35
            if not zope_isinstance(value, DBItem):
55
36
                raise TypeError("Not a DBItem: %r" % (value,))
56
 
            if value.enum not in self._enum:
57
 
                raise TypeError("DBItem from unknown enum, %r not in %r" % (
58
 
                        value.enum.name, self._enum))
 
37
            if self._enum != value.enum:
 
38
                raise TypeError("DBItem from wrong type, %r != %r" % (
 
39
                        self._enum.name, value.enum.name))
59
40
            return value
60
41
 
61
42
    def parse_get(self, value, to_db):
75
56
            enum = kw.pop('enum')
76
57
        except KeyError:
77
58
            enum = kw.pop('schema')
78
 
        check_type(enum)
 
59
        if not issubclass(enum, DBEnumeratedType):
 
60
            raise TypeError(
 
61
                '%r must be a DBEnumeratedType: %r' % (enum, type(enum)))
79
62
        self._kwargs = {
80
 
            'enum': enum,
 
63
            'enum': enum
81
64
            }
82
65
        super(DBSchemaEnumCol, self).__init__(**kw)
83
66
 
84
67
 
85
68
EnumCol = DBSchemaEnumCol
 
69
 
 
70
 
 
71