Пример #1
0
 def open(self, filename=None, textmode=False, encoding='utf-8-sig'):
     if filename is None:
         filename = self._base_uri
     else:
         if self._file_type == 's3':
             filename = urljoin(self._base_uri.replace('s3://', 'http://'),
                                filename.replace('\\', '/')).replace(
                                    'http://', 's3://')
         elif self._file_type == 'http':
             filename = urljoin(self._base_uri, filename.replace('\\', '/'))
         else:
             filename = os.path.abspath(
                 os.path.join(
                     os.path.dirname(self._base_uri.replace('\\', '/')),
                     filename.replace('\\', '/')))
     f = None
     if self._file_type == 's3':
         uri_header, uri_body = filename.split('://', 1)
         us = uri_body.split('/')
         bucketname = us.pop(0)
         key = '/'.join(us)
         logger.info('Opening {}'.format(key))
         if textmode:
             f = StringIO(self.read_s3_object(key).decode(encoding))
         else:
             f = BytesIO(self.read_s3_object(key))
     elif self._file_type == 'http':
         f = request.urlopen(filename)
     else:
         if textmode:
             f = open(filename, 'rt', encoding=encoding)
         else:
             f = open(filename, 'rb')
     f.ext = os.path.splitext(filename)[1].lower()
     yield f
     f.close()