Esempio n. 1
0
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
Esempio n. 2
0
        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
Esempio n. 3
0
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()
Esempio n. 4
0
    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 ''
Esempio n. 5
0
    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 ''
Esempio n. 6
0
        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