def test_get_mime_type_for_blob( entry, filename, expected_category, expected_mimetype): root = os.path.join( settings.ROOT, 'src/olympia/files/fixtures/files/file_viewer_filetypes/') if entry.type == 'tree': mime, category = get_mime_type_for_blob(entry.type, filename, None) else: with open(os.path.join(root, filename), 'rb') as fobj: mime, category = get_mime_type_for_blob( entry.type, filename, force_bytes(fobj.read())) assert mime == expected_mimetype assert category == expected_category
def _fetch_entries(): tree = self.repo.get_root_tree(commit) for entry_wrapper in self.repo.iter_tree(tree): entry = entry_wrapper.tree_entry path = force_text(entry_wrapper.path) blob = entry_wrapper.blob commit_tzinfo = FixedOffset(commit.commit_time_offset) commit_time = datetime.fromtimestamp( float(commit.commit_time), commit_tzinfo) mimetype, entry_mime_category = get_mime_type_for_blob( tree_or_blob=entry.type, name=entry.name, blob=blob) result[path] = { 'depth': path.count(os.sep), 'filename': force_text(entry.name), 'sha256': None, 'mime_category': entry_mime_category, 'mimetype': mimetype, 'path': path, 'size': blob.size if blob is not None else None, 'modified': commit_time, } return result
def test_get_mime_type_for_blob_simplified_detection( entry, filename, expected_mimetype, simplified_detection): root = os.path.join( settings.ROOT, 'src/olympia/files/fixtures/files/file_viewer_filetypes/') with mock.patch('olympia.lib.git.magic.from_buffer') as mocked_from_buffer: with open(os.path.join(root, filename), 'rb') as fobj: mime, category = get_mime_type_for_blob( entry.type, filename, force_bytes(fobj.read())) if simplified_detection: mocked_from_buffer.assert_not_called() else: mocked_from_buffer.assert_called_once()
def get_content(self, obj): blob, name = self._get_blob_for_selected_file(obj) if blob is not None: mimetype, mime_category = get_mime_type_for_blob( tree_or_blob='blob', name=name, blob=blob) # Only return the raw data if we detect a file that contains text # data that actually can be rendered. if mime_category == 'text': # Remove any BOM data if preset. return unicodehelper.decode(blob.read_raw()) # By default return an empty string. # See https://github.com/mozilla/addons-server/issues/11782 for # more explanation. return ''
def get_content(self, obj): commit = self._get_commit(obj) tree = self.repo.get_root_tree(commit) selected_file = self.get_selected_file(obj) blob_or_tree = tree[selected_file] if blob_or_tree.type == pygit2.GIT_OBJ_BLOB: blob = self.git_repo[blob_or_tree.oid] mimetype, mime_category = get_mime_type_for_blob( tree_or_blob='blob', name=blob_or_tree.name, blob=blob) # Only return the raw data if we detect a file that contains text # data that actually can be rendered. if mime_category == 'text': # Remove any BOM data if preset. return unicodehelper.decode(blob.read_raw()) # By default return an empty string. # See https://github.com/mozilla/addons-server/issues/11782 for # more explanation. return ''
def _fetch_entries(): tree = self.tree for entry_wrapper in self.repo.iter_tree(tree): entry = entry_wrapper.tree_entry path = force_text(entry_wrapper.path) blob = entry_wrapper.blob mimetype, entry_mime_category = get_mime_type_for_blob( tree_or_blob=entry.type, name=entry.name, blob=blob) result[path] = { 'depth': path.count(os.sep), 'filename': force_text(entry.name), 'sha256': None, 'mime_category': entry_mime_category, 'mimetype': mimetype, 'path': path, 'size': blob.size if blob is not None else None, } return result