Mercurial > repos > shellac > guppy_basecaller
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/planemo/conda_verify/utils.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,71 @@ +import collections +import sys + +from planemo.conda_verify.const import ( + DLL_TYPES, + MAGIC_HEADERS, +) + + +def get_object_type(data): + head = data[:4] + if head not in MAGIC_HEADERS: + return None + lookup = MAGIC_HEADERS.get(head) + if lookup == 'DLL': + pos = data.find('PE\0\0') + if pos < 0: + return "<no PE header found>" + i = ord(data[pos + 4]) + 256 * ord(data[pos + 5]) + return "DLL " + DLL_TYPES.get(i) + elif lookup.startswith('MachO'): + return lookup + elif lookup == 'ELF': + return "ELF" + {'\x01': '32', '\x02': '64'}.get(data[4]) + + +def get_bad_seq(s): + for seq in ('--', '-.', '-_', + '.-', '..', '._', + '_-', '_.'): # but '__' is fine + if seq in s: + return seq + return None + + +def all_ascii(data, allow_CR=False): + newline = [10] # LF + if allow_CR: + newline.append(13) # CF + for c in data: + n = ord(c) if sys.version_info[0] == 2 else c + if not (n in newline or 32 <= n < 127): + return False + return True + + +class memoized(object): + """Decorator. Caches a function's return value each time it is called. + If called later with the same arguments, the cached value is returned + (not reevaluated). + """ + def __init__(self, func): + self.func = func + self.cache = {} + + def __call__(self, *args): + if not isinstance(args, collections.Hashable): + # uncacheable. a list, for instance. + # better to not cache than blow up. + return self.func(*args) + if args in self.cache: + return self.cache[args] + else: + value = self.func(*args) + self.cache[args] = value + return value + + +if __name__ == '__main__': + print(sys.version) + print(all_ascii(b'Hello\x00'), all_ascii(b"Hello World!"))