def parse_binary(string=None, fname=None, suffix=None, okext=OKEXT, tryagain=True, **xargs): """ Parse a binary file or string. """ stringbool = bool(string) if (not stringbool) and bool(fname) and (get_file_suffixes(fname) in okext): return parse_binary_from_file(fname) elif fname and (not suffix) and stringbool: suffix = auto_unicode_dang_it('.' + fname.split('.')[-1]).encode('ascii') elif (not suffix) and stringbool: suffix = guess_ext_from_mime(string) else: if (suffix not in okext) or (fname and (get_file_suffixes(fname) not in okext)): return None else: raise ValueError('Did not provide string or fname') if suffix.lower() not in okext: if not fname: fname = '' return None prsd = parse_binary_from_string(string=string, suffix=suffix) if tryagain and not (len(prsd) > 0): try: extbymime = guess_ext_from_mime(string) except KeyError: extbymime = None if extbymime and (extbymime.lower() in okext): try: return parse_binary_from_string(string, suffix=extbymime) except ValueError: LOG.debug('body len=0, and mime ' + 'derived ext resulted in ValueError, giving up.\t' + 'Supplied ext:\t' + suffix + '\t' + 'Mime derived ext:\t' + str(extbymime) + '\t' + 'Filename:\t' + str(fname)) else: pass else: pass return prsd
def parse_binary_from_string(string, suffix=None, **xargs): """ suffix = extension """ if not suffix: LOG.debug('Extension not provided, trying guess based on mime time.') suffix = guess_ext_from_mime(string) return write_and_op_on_tmp(data=string, function=parse_binary_from_file, suffix=suffix)