From 8591558b8b557d5aa1ae3db3df527416e3baadde Mon Sep 17 00:00:00 2001
From: jvoisin <julien.voisin@dustri.org>
Date: Sat, 27 Apr 2019 13:03:33 +0200
Subject: [PATCH] Minor code cleanup

---
 libmat2/archive.py | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/libmat2/archive.py b/libmat2/archive.py
index 1f02114..2936f39 100644
--- a/libmat2/archive.py
+++ b/libmat2/archive.py
@@ -16,6 +16,9 @@ assert Pattern
 
 # pylint: disable=not-callable,assignment-from-no-return
 
+# An ArchiveClass is a class representing an archive,
+# while an ArchiveMember is a class representing an element
+# (usually a file) of an archive.
 ArchiveClass = Union[zipfile.ZipFile, tarfile.TarFile]
 ArchiveMember = Union[zipfile.ZipInfo, tarfile.TarInfo]
 
@@ -57,7 +60,7 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
         self.is_archive_valid()
 
     def is_archive_valid(self):
-        """Raise a ValueError is the current file isn't valid."""
+        """Raise a ValueError is the current archive isn't a valid one."""
 
     def _specific_cleanup(self, full_path: str) -> bool:
         """ This method can be used to apply specific treatment
@@ -104,10 +107,7 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
             temp_folder = tempfile.mkdtemp()
 
             for item in self._get_all_members(zin):
-                local_meta = dict()  # type: Dict[str, Union[str, Dict]]
-                for k, v in self._get_member_meta(item).items():
-                    local_meta[k] = v
-
+                local_meta = self._get_member_meta(item)
                 member_name = self._get_member_name(item)
 
                 if member_name[-1] == '/':  # pragma: no cover
@@ -118,13 +118,11 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
                 full_path = os.path.join(temp_folder, member_name)
 
                 specific_meta = self._specific_get_meta(full_path, member_name)
-                for (k, v) in specific_meta.items():
-                    local_meta[k] = v
+                local_meta = {**local_meta, **specific_meta}
 
-                tmp_parser, _ = parser_factory.get_parser(full_path)  # type: ignore
-                if tmp_parser:
-                    for k, v in tmp_parser.get_meta().items():
-                        local_meta[k] = v
+                member_parser, _ = parser_factory.get_parser(full_path)  # type: ignore
+                if member_parser:
+                    local_meta = {**local_meta, **member_parser.get_meta()}
 
                 if local_meta:
                     meta[member_name] = local_meta
@@ -144,7 +142,6 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
             # Sort the items to process, to reduce fingerprinting,
             # and keep them in the `items` variable.
             items = list()  # type: List[ArchiveMember]
-
             for item in sorted(self._get_all_members(zin), key=self._get_member_name):
                 # Some fileformats do require to have the `mimetype` file
                 # as the first file in the archive.
@@ -175,8 +172,8 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
                 elif any(map(lambda r: r.search(member_name), self.files_to_omit)):
                     continue
                 else:  # supported files that we want to first clean, then add
-                    tmp_parser, mtype = parser_factory.get_parser(full_path)  # type: ignore
-                    if not tmp_parser:
+                    member_parser, mtype = parser_factory.get_parser(full_path)  # type: ignore
+                    if not member_parser:
                         if self.unknown_member_policy == UnknownMemberPolicy.OMIT:
                             logging.warning("In file %s, omitting unknown element %s (format: %s)",
                                             self.filename, member_name, mtype)
@@ -190,15 +187,15 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
                                           self.filename, member_name, mtype)
                             abort = True
                             continue
-                    if tmp_parser:
-                        if tmp_parser.remove_all() is False:
+                    else:
+                        if member_parser.remove_all() is False:
                             logging.warning("In file %s, something went wrong \
                                              with the cleaning of %s \
                                              (format: %s)",
                                             self.filename, member_name, mtype)
                             abort = True
                             continue
-                        os.rename(tmp_parser.output_filename, full_path)
+                        os.rename(member_parser.output_filename, full_path)
 
                 zinfo = self.member_class(member_name)  # type: ignore
                 clean_zinfo = self._clean_member(zinfo)
-- 
GitLab