123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """Misc utilities to work with python <2.6.
- These utilities can all be deleted when dulwich decides it wants to stop
- support for python <2.6.
- """
- try:
- import hashlib
- except ImportError:
- import sha
- try:
- from urlparse import parse_qs
- except ImportError:
- from cgi import parse_qs
- try:
- from os import SEEK_END
- except ImportError:
- SEEK_END = 2
- import struct
- class defaultdict(dict):
- """A python 2.4 equivalent of collections.defaultdict."""
- def __init__(self, default_factory=None, *a, **kw):
- if (default_factory is not None and
- not hasattr(default_factory, '__call__')):
- raise TypeError('first argument must be callable')
- dict.__init__(self, *a, **kw)
- self.default_factory = default_factory
- def __getitem__(self, key):
- try:
- return dict.__getitem__(self, key)
- except KeyError:
- return self.__missing__(key)
- def __missing__(self, key):
- if self.default_factory is None:
- raise KeyError(key)
- self[key] = value = self.default_factory()
- return value
- def __reduce__(self):
- if self.default_factory is None:
- args = tuple()
- else:
- args = self.default_factory,
- return type(self), args, None, None, self.items()
- def copy(self):
- return self.__copy__()
- def __copy__(self):
- return type(self)(self.default_factory, self)
- def __deepcopy__(self, memo):
- import copy
- return type(self)(self.default_factory,
- copy.deepcopy(self.items()))
- def __repr__(self):
- return 'defaultdict(%s, %s)' % (self.default_factory,
- dict.__repr__(self))
- def make_sha(source=''):
- """A python2.4 workaround for the sha/hashlib module fiasco."""
- try:
- return hashlib.sha1(source)
- except NameError:
- sha1 = sha.sha(source)
- return sha1
- def unpack_from(fmt, buf, offset=0):
- """A python2.4 workaround for struct missing unpack_from."""
- try:
- return struct.unpack_from(fmt, buf, offset)
- except AttributeError:
- b = buf[offset:offset+struct.calcsize(fmt)]
- return struct.unpack(fmt, b)
|