summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing/pickleable.py
blob: 9a41034bfff8a5e0949ce4f84414f872d93b9492 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# testing/pickleable.py
# Copyright (C) 2005-2014 the SQLAlchemy authors and contributors <see AUTHORS file>
#
# This module is part of SQLAlchemy and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

"""Classes used in pickling tests, need to be at the module level for
unpickling.
"""

from . import fixtures


class User(fixtures.ComparableEntity):
    pass


class Order(fixtures.ComparableEntity):
    pass


class Dingaling(fixtures.ComparableEntity):
    pass


class EmailUser(User):
    pass


class Address(fixtures.ComparableEntity):
    pass


# TODO: these are kind of arbitrary....
class Child1(fixtures.ComparableEntity):
    pass


class Child2(fixtures.ComparableEntity):
    pass


class Parent(fixtures.ComparableEntity):
    pass


class Screen(object):

    def __init__(self, obj, parent=None):
        self.obj = obj
        self.parent = parent


class Foo(object):

    def __init__(self, moredata):
        self.data = 'im data'
        self.stuff = 'im stuff'
        self.moredata = moredata

    __hash__ = object.__hash__

    def __eq__(self, other):
        return other.data == self.data and \
                other.stuff == self.stuff and \
                other.moredata == self.moredata


class Bar(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    __hash__ = object.__hash__

    def __eq__(self, other):
        return other.__class__ is self.__class__ and \
            other.x == self.x and \
            other.y == self.y

    def __str__(self):
        return "Bar(%d, %d)" % (self.x, self.y)


class OldSchool:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __eq__(self, other):
        return other.__class__ is self.__class__ and \
            other.x == self.x and \
            other.y == self.y


class OldSchoolWithoutCompare:

    def __init__(self, x, y):
        self.x = x
        self.y = y


class BarWithoutCompare(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return "Bar(%d, %d)" % (self.x, self.y)


class NotComparable(object):

    def __init__(self, data):
        self.data = data

    def __hash__(self):
        return id(self)

    def __eq__(self, other):
        return NotImplemented

    def __ne__(self, other):
        return NotImplemented


class BrokenComparable(object):

    def __init__(self, data):
        self.data = data

    def __hash__(self):
        return id(self)

    def __eq__(self, other):
        raise NotImplementedError

    def __ne__(self, other):
        raise NotImplementedError