Resolve #222 (Use of ordered dicts in gui bumped python requirement to 2.7)

This commit is contained in:
DarkPhoenix
2010-10-29 09:34:45 +04:00
parent b5a6fb5e13
commit 0f7678aaab
3 changed files with 116 additions and 6 deletions

102
compat.py Normal file
View File

@@ -0,0 +1,102 @@
## {{{ http://code.activestate.com/recipes/576693/ (r6)
from UserDict import DictMixin
class OrderedDict(dict, DictMixin):
def __init__(self, *args, **kwds):
if len(args) > 1:
raise TypeError('expected at most 1 arguments, got %d' % len(args))
try:
self.__end
except AttributeError:
self.clear()
self.update(*args, **kwds)
def clear(self):
self.__end = end = []
end += [None, end, end] # sentinel node for doubly linked list
self.__map = {} # key --> [key, prev, next]
dict.clear(self)
def __setitem__(self, key, value):
if key not in self:
end = self.__end
curr = end[1]
curr[2] = end[1] = self.__map[key] = [key, curr, end]
dict.__setitem__(self, key, value)
def __delitem__(self, key):
dict.__delitem__(self, key)
key, prev, next = self.__map.pop(key)
prev[2] = next
next[1] = prev
def __iter__(self):
end = self.__end
curr = end[2]
while curr is not end:
yield curr[0]
curr = curr[2]
def __reversed__(self):
end = self.__end
curr = end[1]
while curr is not end:
yield curr[0]
curr = curr[1]
def popitem(self, last=True):
if not self:
raise KeyError('dictionary is empty')
if last:
key = reversed(self).next()
else:
key = iter(self).next()
value = self.pop(key)
return key, value
def __reduce__(self):
items = [[k, self[k]] for k in self]
tmp = self.__map, self.__end
del self.__map, self.__end
inst_dict = vars(self).copy()
self.__map, self.__end = tmp
if inst_dict:
return (self.__class__, (items,), inst_dict)
return self.__class__, (items,)
def keys(self):
return list(self)
setdefault = DictMixin.setdefault
update = DictMixin.update
pop = DictMixin.pop
values = DictMixin.values
items = DictMixin.items
iterkeys = DictMixin.iterkeys
itervalues = DictMixin.itervalues
iteritems = DictMixin.iteritems
def __repr__(self):
if not self:
return '%s()' % (self.__class__.__name__,)
return '%s(%r)' % (self.__class__.__name__, self.items())
def copy(self):
return self.__class__(self)
@classmethod
def fromkeys(cls, iterable, value=None):
d = cls()
for key in iterable:
d[key] = value
return d
def __eq__(self, other):
if isinstance(other, OrderedDict):
return len(self)==len(other) and self.items() == other.items()
return dict.__eq__(self, other)
def __ne__(self, other):
return not self == other
## end of http://code.activestate.com/recipes/576693/ }}}

View File

@@ -20,11 +20,15 @@
import os.path
import config
import wx
import collections
import time
try:
from collections import OrderedDict
except ImportError:
from compat import OrderedDict
cachedBitmapsCount = 0
cachedBitmaps = collections.OrderedDict()
cachedBitmaps = OrderedDict()
dontUseCachedBitmaps = False
def getStaticBitmap(name, parent, location):

View File

@@ -3,11 +3,15 @@ import copy
from gui import bitmapLoader
import gui.mainFrame
import service
import collections
from wx.lib.buttons import GenBitmapButton
from pickle import TRUE
try:
from collections import OrderedDict
except ImportError:
from compat import OrderedDict
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent()
FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent()
@@ -26,9 +30,9 @@ class ShipBrowser(wx.Panel):
self.browseHist = []
self.lastStage = (0,0)
self.stage1Cache = collections.OrderedDict()
self.stage2Cache = collections.OrderedDict()
self.stage3Cache = collections.OrderedDict()
self.stage1Cache = OrderedDict()
self.stage2Cache = OrderedDict()
self.stage3Cache = OrderedDict()
self._stage1Data = -1
self._stage2Data = -1