1
0
mirror of synced 2024-11-22 09:14:23 +01:00

Improve the previous commit

This commit is contained in:
jvoisin 2018-09-05 17:22:17 +02:00
parent 1d7e374e5b
commit 46bb1b83ea
4 changed files with 40 additions and 7 deletions

View File

@ -84,6 +84,11 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
def remove_all(self) -> bool: def remove_all(self) -> bool:
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
if self.unknown_member_policy not in ['omit', 'keep', 'abort']:
logging.error("The policy %s is invalid.", self.unknown_member_policy)
raise ValueError
with zipfile.ZipFile(self.filename) as zin,\ with zipfile.ZipFile(self.filename) as zin,\
zipfile.ZipFile(self.output_filename, 'w') as zout: zipfile.ZipFile(self.output_filename, 'w') as zout:
@ -120,9 +125,6 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
logging.warning("In file %s, keeping unknown element %s (format: %s)", logging.warning("In file %s, keeping unknown element %s (format: %s)",
self.filename, item.filename, mtype) self.filename, item.filename, mtype)
else: else:
if self.unknown_member_policy != 'abort':
logging.warning("Invalid unknown_member_policy %s, " +
"treating as 'abort'", self.unknown_member_policy)
logging.error("In file %s, element %s's format (%s) " + logging.error("In file %s, element %s's format (%s) " +
"isn't supported", "isn't supported",
self.filename, item.filename, mtype) self.filename, item.filename, mtype)

4
mat2
View File

@ -41,9 +41,9 @@ def create_arg_parser():
help='check if MAT2 has all the dependencies it needs') help='check if MAT2 has all the dependencies it needs')
parser.add_argument('-V', '--verbose', action='store_true', parser.add_argument('-V', '--verbose', action='store_true',
help='show more verbose status information') help='show more verbose status information')
parser.add_argument('-u', '--unknown-members', metavar='POLICY', default='abort', parser.add_argument('-u', '--unknown-members', metavar='policy', default='abort',
help='how to handle unknown members of archive-style files ' + help='how to handle unknown members of archive-style files ' +
'(POLICY should be abort, omit, or keep)') '(policy should be abort, omit, or keep)')
info = parser.add_mutually_exclusive_group() info = parser.add_mutually_exclusive_group()

View File

@ -8,13 +8,13 @@ class TestHelp(unittest.TestCase):
def test_help(self): def test_help(self):
proc = subprocess.Popen(['./mat2', '--help'], stdout=subprocess.PIPE) proc = subprocess.Popen(['./mat2', '--help'], stdout=subprocess.PIPE)
stdout, _ = proc.communicate() stdout, _ = proc.communicate()
self.assertIn(b'usage: mat2 [-h] [-v] [-l] [-c] [-V] [-u POLICY] [-s | -L] [files [files ...]]', self.assertIn(b'usage: mat2 [-h] [-v] [-l] [-c] [-V] [-u policy] [-s | -L] [files [files ...]]',
stdout) stdout)
def test_no_arg(self): def test_no_arg(self):
proc = subprocess.Popen(['./mat2'], stdout=subprocess.PIPE) proc = subprocess.Popen(['./mat2'], stdout=subprocess.PIPE)
stdout, _ = proc.communicate() stdout, _ = proc.communicate()
self.assertIn(b'usage: mat2 [-h] [-v] [-l] [-c] [-V] [-u POLICY] [-s | -L] [files [files ...]]', self.assertIn(b'usage: mat2 [-h] [-v] [-l] [-c] [-V] [-u policy] [-s | -L] [files [files ...]]',
stdout) stdout)

31
tests/test_policy.py Normal file
View File

@ -0,0 +1,31 @@
#!/usr/bin/python3
import unittest
import shutil
import os
from libmat2 import office
class TestPolicy(unittest.TestCase):
def test_policy_omit(self):
shutil.copy('./tests/data/embedded.docx', './tests/data/clean.docx')
p = office.MSOfficeParser('./tests/data/clean.docx')
p.unknown_member_policy = 'omit'
self.assertTrue(p.remove_all())
os.remove('./tests/data/clean.docx')
def test_policy_keep(self):
shutil.copy('./tests/data/embedded.docx', './tests/data/clean.docx')
p = office.MSOfficeParser('./tests/data/clean.docx')
p.unknown_member_policy = 'keep'
self.assertTrue(p.remove_all())
os.remove('./tests/data/clean.docx')
def test_policy_unknown(self):
shutil.copy('./tests/data/embedded.docx', './tests/data/clean.docx')
p = office.MSOfficeParser('./tests/data/clean.docx')
p.unknown_member_policy = 'unknown_policy_name_totally_invalid'
with self.assertRaises(ValueError):
p.remove_all()
os.remove('./tests/data/clean.docx')