bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
4679.3.5
by John Arbash Meinel
 Have a pure-python implementation that works as tuples of tuples of strings,  | 
1  | 
# Copyright (C) 2009 Canonical Ltd
 | 
2  | 
#
 | 
|
3  | 
# This program is free software; you can redistribute it and/or modify
 | 
|
4  | 
# it under the terms of the GNU General Public License as published by
 | 
|
5  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
6  | 
# (at your option) any later version.
 | 
|
7  | 
#
 | 
|
8  | 
# This program is distributed in the hope that it will be useful,
 | 
|
9  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
10  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
11  | 
# GNU General Public License for more details.
 | 
|
12  | 
#
 | 
|
13  | 
# You should have received a copy of the GNU General Public License
 | 
|
14  | 
# along with this program; if not, write to the Free Software
 | 
|
15  | 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
|
16  | 
||
| 
4679.3.41
by John Arbash Meinel
 Finish switching the naming to StaticTuple.  | 
17  | 
"""The pure-python implementation of the StaticTuple type.
 | 
| 
4679.3.5
by John Arbash Meinel
 Have a pure-python implementation that works as tuples of tuples of strings,  | 
18  | 
|
19  | 
Note that it is generally just implemented as using tuples of tuples of
 | 
|
20  | 
strings.
 | 
|
21  | 
"""
 | 
|
22  | 
||
23  | 
||
| 
4679.3.78
by John Arbash Meinel
 Change the pure-python version of StaticTuple  | 
24  | 
class StaticTuple(tuple):  | 
| 
4679.3.41
by John Arbash Meinel
 Finish switching the naming to StaticTuple.  | 
25  | 
"""A static type, similar to a tuple of strings."""  | 
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
26  | 
|
| 
4679.3.44
by John Arbash Meinel
 Special case the empty tuple as a singleton.  | 
27  | 
def __new__(cls, *args):  | 
| 
4679.3.78
by John Arbash Meinel
 Change the pure-python version of StaticTuple  | 
28  | 
        # Make the empty StaticTuple a singleton
 | 
| 
4679.3.44
by John Arbash Meinel
 Special case the empty tuple as a singleton.  | 
29  | 
if not args and _empty_tuple is not None:  | 
30  | 
return _empty_tuple  | 
|
| 
4679.3.78
by John Arbash Meinel
 Change the pure-python version of StaticTuple  | 
31  | 
return tuple.__new__(cls, args)  | 
| 
4679.3.44
by John Arbash Meinel
 Special case the empty tuple as a singleton.  | 
32  | 
|
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
33  | 
def __init__(self, *args):  | 
| 
4679.3.41
by John Arbash Meinel
 Finish switching the naming to StaticTuple.  | 
34  | 
"""Create a new 'StaticTuple'"""  | 
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
35  | 
for bit in args:  | 
| 
4759.2.9
by John Arbash Meinel
 Implement support for lots of types.  | 
36  | 
if type(bit) not in (str, StaticTuple, unicode, int, long, float,  | 
| 
4759.2.8
by John Arbash Meinel
 Set up a test suite for hash() and richcompare against lots of acceptable types.  | 
37  | 
None.__class__, bool):  | 
38  | 
raise TypeError('StaticTuple can only point to'  | 
|
| 
4759.2.9
by John Arbash Meinel
 Implement support for lots of types.  | 
39  | 
                    ' StaticTuple, str, unicode, int, long, float, bool, or'
 | 
40  | 
' None not %s' % (type(bit),))  | 
|
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
41  | 
num_keys = len(args)  | 
| 
4679.3.42
by John Arbash Meinel
 Implement comparison support when using nested StaticTuple objects.  | 
42  | 
if num_keys < 0 or num_keys > 255:  | 
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
43  | 
raise ValueError('must have 1 => 256 key bits')  | 
| 
4679.3.78
by John Arbash Meinel
 Change the pure-python version of StaticTuple  | 
44  | 
        # We don't need to pass args to tuple.__init__, because that was
 | 
45  | 
        # already handled in __new__.
 | 
|
46  | 
tuple.__init__(self)  | 
|
47  | 
||
| 
4679.3.79
by John Arbash Meinel
 Change the repr to print out 'StaticTuple'  | 
48  | 
def __repr__(self):  | 
49  | 
return '%s%s' % (self.__class__.__name__, tuple.__repr__(self))  | 
|
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
50  | 
|
| 
4759.2.2
by John Arbash Meinel
 Update _static_tuple_py.py with the same concatenation behavior  | 
51  | 
def __add__(self, other):  | 
52  | 
"""Concatenate self with other"""  | 
|
53  | 
return StaticTuple.from_sequence(tuple.__add__(self,other))  | 
|
54  | 
||
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
55  | 
def as_tuple(self):  | 
| 
4679.3.78
by John Arbash Meinel
 Change the pure-python version of StaticTuple  | 
56  | 
return self  | 
| 
4679.3.29
by John Arbash Meinel
 Start work on implementing a Key.intern() function.  | 
57  | 
|
| 
4679.3.30
by John Arbash Meinel
 Interning with a regular 'dict' is a tradeoff for bzr.dev of:  | 
58  | 
def intern(self):  | 
| 
4679.3.51
by John Arbash Meinel
 Add a _static_tuple_c.pxd file to define the C api to pyrex code.  | 
59  | 
return _interned_tuples.setdefault(self, self)  | 
| 
4679.3.30
by John Arbash Meinel
 Interning with a regular 'dict' is a tradeoff for bzr.dev of:  | 
60  | 
|
| 
4739.4.1
by John Arbash Meinel
 Implement StaticTuple.from_sequence()  | 
61  | 
    @staticmethod
 | 
62  | 
def from_sequence(seq):  | 
|
63  | 
"""Convert a sequence object into a StaticTuple instance."""  | 
|
64  | 
if isinstance(seq, StaticTuple):  | 
|
65  | 
            # it already is
 | 
|
66  | 
return seq  | 
|
67  | 
return StaticTuple(*seq)  | 
|
68  | 
||
69  | 
||
| 
4679.3.16
by John Arbash Meinel
 Initial work for a Key class.  | 
70  | 
|
| 
4679.5.4
by John Arbash Meinel
 Add a comment to help Matthew Nordhoff understand why we have:  | 
71  | 
# Have to set it to None first, so that __new__ can determine whether
 | 
72  | 
# the _empty_tuple singleton has been created yet or not.
 | 
|
| 
4679.3.44
by John Arbash Meinel
 Special case the empty tuple as a singleton.  | 
73  | 
_empty_tuple = None  | 
74  | 
_empty_tuple = StaticTuple()  | 
|
| 
4679.3.51
by John Arbash Meinel
 Add a _static_tuple_c.pxd file to define the C api to pyrex code.  | 
75  | 
_interned_tuples = {}  |