def FileInputStream(filename, real_filename=None, **args): """ Create an input stream of a file. filename must be unicode. real_filename is an optional argument used to specify the real filename, its type can be 'str' or 'unicode'. Use real_filename when you are not able to convert filename to real unicode string (ie. you have to use unicode(name, 'replace') or unicode(name, 'ignore')). """ assert isinstance(filename, unicode) if not real_filename: real_filename = filename try: inputio = FileOpener(real_filename, 'rb') except IOError as err: charset = getTerminalCharset() errmsg = unicode(str(err), charset) raise InputStreamError( _("Unable to open file %s: %s") % (filename, errmsg)) source = "file:" + filename offset = args.pop("offset", 0) size = args.pop("size", None) if offset or size: if size: size = 8 * size stream = InputIOStream(inputio, source=source, **args) return InputSubStream(stream, 8 * offset, size, **args) else: args.setdefault("tags", []).append(("filename", filename)) return InputIOStream(inputio, source=source, **args)
def get_creation_date_from_metadata(media_file): with open(media_file) as f: f.seek(0) parser = guessParser(InputIOStream(f, None, tags=[])) metadata = extractMetadata(parser) return time.mktime(metadata.get('creation_date').timetuple())
def createInputStream(cis, source=None, **args): if field._parent: stream = cis(source=source) args.setdefault("tags", []).extend(stream.tags) else: stream = field.stream input = CompressedStream(stream, decompressor) if source is None: source = "Compressed source: '%s' (offset=%s)" % ( stream.source, field.absolute_address) return InputIOStream(input, source=source, **args)
def metadata_for_filelike(filelike): try: filelike.seek(0) except (AttributeError, IOError): return None stream = InputIOStream(filelike, None, tags=[]) parser = guessParser(stream) if not parser: return None try: metadata = extractMetadata(parser) except HachoirError: return None return metadata._Metadata__data
def extract_metadata(self, file): config.MAX_STR_LENGTH = float("inf") try: filename = file.name if not isinstance(filename, unicode): filename = unicodeFilename(filename) stream = InputIOStream(file, source="file:%s" % filename, tags=[], filename=filename) parser = guessParser(stream) return extractMetadata(parser) except (HachoirError, TypeError) as e: raise MetadataException(e)
def META_OLECF(s, buff): META_DICT = { } try: stream = InputIOStream(StringIO(buff)) parser = guessParser(stream) meta = extractMetadata(parser) except: return META_DICT for data in sorted(meta): if data.values: if len(data.values) == 1: META_DICT['%s' % data.key] = data.values[0].text else: values = [] for value in data.values: values.append(value.text) META_DICT['%s' % data.key] = values return META_DICT
not able to convert filename to real unicode string (ie. you have to use unicode(name, 'replace') or unicode(name, 'ignore')). """ assert isinstance(filename, unicode) if not real_filename: real_filename = filename try: inputio = FileOpener(real_filename, 'rb') except IOError, err: charset = getTerminalCharset() errmsg = unicode(str(err), charset) raise InputStreamError( _("Unable to open file %s: %s") % (filename, errmsg)) source = "file:" + filename offset = args.pop("offset", 0) size = args.pop("size", None) if offset or size: if size: size = 8 * size stream = InputIOStream(inputio, source=source, **args) return InputSubStream(stream, 8 * offset, size, **args) else: args.setdefault("tags", []).append(("filename", filename)) return InputIOStream(inputio, source=source, **args) def guessStreamCharset(stream, address, size, default=None): size = min(size, 1024 * 8) bytes = stream.readBytes(address, size // 8) return guessBytesCharset(bytes, default)
def parse_raw(raw): stream = InputIOStream(raw) parser = guessParser(stream) return extract_metadata(parser)