예제 #1
0
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())
예제 #3
0
 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)
예제 #4
0
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
예제 #5
0
 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)
예제 #6
0
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
예제 #7
0
    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)
예제 #8
0
def parse_raw(raw):
    stream = InputIOStream(raw)
    parser = guessParser(stream)
    return extract_metadata(parser)