Source code for openpyxl.writer.tests.test_template

# Copyright (c) 2010-2017 openpyxl


from io import BytesIO
from zipfile import ZipFile

import pytest

from openpyxl.packaging.manifest import Manifest
from openpyxl.writer.excel import save_virtual_workbook
from openpyxl.reader.excel import load_workbook
from openpyxl.xml.constants import ARC_CONTENT_TYPES, XLTM, XLTX, XLSM, XLSX
from openpyxl.xml.functions import fromstring


[docs]def check_content_type(workbook_type, archive): src = archive.read(ARC_CONTENT_TYPES) node = fromstring(src) package = Manifest.from_tree(node) assert workbook_type in package
@pytest.mark.parametrize('tmpl, is_template', [ ('empty.xlsx', False), ('empty.xlsm', False), ('empty.xltx', True), ('empty.xltm', True) ])
[docs]def test_workbook_is_template(datadir, tmpl, is_template): datadir.chdir() wb = load_workbook(tmpl) assert wb.template is is_template
@pytest.mark.parametrize('tmpl, wb_type', [ ('empty.xlsx', XLSX), ('empty.xlsm', XLSM), ('empty.xltx', XLTX), ('empty.xltm', XLTM) ])
[docs]def test_xl_content_type(datadir, tmpl, wb_type): datadir.chdir() check_content_type(wb_type, ZipFile(tmpl))
@pytest.mark.parametrize('tmpl, keep_vba, wb_type', [ ('empty.xlsx', False, XLSX), ('empty.xlsm', True, XLSM), ('empty.xltx', False, XLSX), ('empty.xltm', True, XLSM) ])
[docs]def test_save_xl_as_no_template(datadir, tmpl, keep_vba, wb_type): datadir.chdir() wb = load_workbook(tmpl, keep_vba=keep_vba) wb.template = False archive = save_virtual_workbook(wb) check_content_type(wb_type, ZipFile(BytesIO(archive)))
@pytest.mark.parametrize('tmpl, keep_vba, wb_type', [ ('empty.xlsx', False, XLTX), ('empty.xlsm', True, XLTM), ('empty.xltx', False, XLTX), ('empty.xltm', True, XLTM) ])
[docs]def test_save_xl_as_template(datadir, tmpl, keep_vba, wb_type): datadir.chdir() wb = load_workbook(tmpl, keep_vba=keep_vba) wb.template = True archive = save_virtual_workbook(wb) check_content_type(wb_type, ZipFile(BytesIO(archive)))