Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/planemo/conda_verify/utils.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 import collections | |
2 import sys | |
3 | |
4 from planemo.conda_verify.const import ( | |
5 DLL_TYPES, | |
6 MAGIC_HEADERS, | |
7 ) | |
8 | |
9 | |
10 def get_object_type(data): | |
11 head = data[:4] | |
12 if head not in MAGIC_HEADERS: | |
13 return None | |
14 lookup = MAGIC_HEADERS.get(head) | |
15 if lookup == 'DLL': | |
16 pos = data.find('PE\0\0') | |
17 if pos < 0: | |
18 return "<no PE header found>" | |
19 i = ord(data[pos + 4]) + 256 * ord(data[pos + 5]) | |
20 return "DLL " + DLL_TYPES.get(i) | |
21 elif lookup.startswith('MachO'): | |
22 return lookup | |
23 elif lookup == 'ELF': | |
24 return "ELF" + {'\x01': '32', '\x02': '64'}.get(data[4]) | |
25 | |
26 | |
27 def get_bad_seq(s): | |
28 for seq in ('--', '-.', '-_', | |
29 '.-', '..', '._', | |
30 '_-', '_.'): # but '__' is fine | |
31 if seq in s: | |
32 return seq | |
33 return None | |
34 | |
35 | |
36 def all_ascii(data, allow_CR=False): | |
37 newline = [10] # LF | |
38 if allow_CR: | |
39 newline.append(13) # CF | |
40 for c in data: | |
41 n = ord(c) if sys.version_info[0] == 2 else c | |
42 if not (n in newline or 32 <= n < 127): | |
43 return False | |
44 return True | |
45 | |
46 | |
47 class memoized(object): | |
48 """Decorator. Caches a function's return value each time it is called. | |
49 If called later with the same arguments, the cached value is returned | |
50 (not reevaluated). | |
51 """ | |
52 def __init__(self, func): | |
53 self.func = func | |
54 self.cache = {} | |
55 | |
56 def __call__(self, *args): | |
57 if not isinstance(args, collections.Hashable): | |
58 # uncacheable. a list, for instance. | |
59 # better to not cache than blow up. | |
60 return self.func(*args) | |
61 if args in self.cache: | |
62 return self.cache[args] | |
63 else: | |
64 value = self.func(*args) | |
65 self.cache[args] = value | |
66 return value | |
67 | |
68 | |
69 if __name__ == '__main__': | |
70 print(sys.version) | |
71 print(all_ascii(b'Hello\x00'), all_ascii(b"Hello World!")) |