Mercurial > repos > fubar > jbrowse2
comparison jb2_GFF/_utils.py @ 17:4c201a3d4755 draft
planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
author | fubar |
---|---|
date | Sun, 28 Jan 2024 06:48:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:1fe91657bfd6 | 17:4c201a3d4755 |
---|---|
1 class defaultdict(dict): | |
2 """Back compatible defaultdict: | |
3 http://code.activestate.com/recipes/523034/""" | |
4 | |
5 def __init__(self, default_factory=None, *a, **kw): | |
6 if default_factory is not None and not hasattr( | |
7 default_factory, "__call__" | |
8 ): | |
9 raise TypeError("first argument must be callable") | |
10 dict.__init__(self, *a, **kw) | |
11 self.default_factory = default_factory | |
12 | |
13 def __getitem__(self, key): | |
14 try: | |
15 return dict.__getitem__(self, key) | |
16 except KeyError: | |
17 return self.__missing__(key) | |
18 | |
19 def __missing__(self, key): | |
20 if self.default_factory is None: | |
21 raise KeyError(key) | |
22 self[key] = value = self.default_factory() | |
23 return value | |
24 | |
25 def __reduce__(self): | |
26 if self.default_factory is None: | |
27 args = tuple() | |
28 else: | |
29 args = (self.default_factory,) | |
30 return type(self), args, None, None, self.items() | |
31 | |
32 def copy(self): | |
33 return self.__copy__() | |
34 | |
35 def __copy__(self): | |
36 return type(self)(self.default_factory, self) | |
37 | |
38 def __deepcopy__(self, memo): | |
39 import copy | |
40 | |
41 return type(self)( | |
42 self.default_factory, copy.deepcopy(self.items()) | |
43 ) | |
44 | |
45 def __repr__(self): | |
46 return "defaultdict(%s, %s)" % ( | |
47 self.default_factory, | |
48 dict.__repr__(self), | |
49 ) |