unify file extension handling
authorPhilipp Gesang <philipp.gesang@intra2net.com>
Tue, 4 Apr 2017 15:35:04 +0000 (17:35 +0200)
committerPhilipp Gesang <philipp.gesang@intra2net.com>
Fri, 28 Apr 2017 12:40:14 +0000 (14:40 +0200)
The required extension no longer depends on the “[index]mode”
parameter since the encryption context is handled independently.
Add a function pick_extension() that reflects this circumstance
and appends the required suffixed depending on three inputs.

deltatar/deltatar.py

index a33b56e..0fa8e48 100644 (file)
@@ -57,6 +57,8 @@ PARENT_MATCH    = 2
 # for encoding encryption parameters in the file extensions (“.aes128” and
 # suchlike).
 PDTCRYPT_EXTENSION = "pdtcrypt"
+PDT_TYPE_ARCHIVE   = 0
+PDT_TYPE_AUX       = 1
 
 AUXILIARY_FILE_INDEX = 0
 AUXILIARY_FILE_INFO  = 1
@@ -122,8 +124,8 @@ class DeltaTar(object):
         '|gz': '.gz',
         '|bz2': '.bz2',
         '#gz': '.gz',
-        '#gz.aes128': '.gz.%s' % PDTCRYPT_EXTENSION,
-        '#aes128': '.%s' % PDTCRYPT_EXTENSION,
+        '#gz.aes128': '.gz',
+        '#aes128': '',
     }
 
     # valid index modes and their corresponding default file extension
@@ -131,8 +133,8 @@ class DeltaTar(object):
         '': '',
         'gz': '.gz',
         'bz2': '.bz2',
-        'gz.aes128': '.gz.%s' % PDTCRYPT_EXTENSION,
-        'aes128': '.%s' % PDTCRYPT_EXTENSION,
+        'gz.aes128': '.gz',
+        'aes128': '',
     }
 
     # valid path prefixes
@@ -246,6 +248,19 @@ class DeltaTar(object):
         if volume_name_func is not None:
             self.volume_name_func = volume_name_func
 
+    def pick_extension(self, kind, mode):
+        """
+        Choose the extension depending on a) the kind of file given, b) the
+        processing mode, and c) the current encryption settings.
+        """
+        ret = ""
+        if kind == PDT_TYPE_ARCHIVE:
+            ret += ".tar"
+        ret += mode
+        if self.crypto_ctx is not None:
+            ret += "." + PDTCRYPT_EXTENSION
+        return ret
+
     def index_name_func(self, is_full):         # pylint: disable=method-hidden
         '''
         function that sets a custom name for the index file. This function
@@ -255,16 +270,12 @@ class DeltaTar(object):
         '''
         prefix = "bfull" if is_full else "bdiff"
         date_str = self.current_time.strftime("%Y-%m-%d-%H%M")
-        extension = self.__index_extensions_dict[self.index_mode]
+        extension = self.pick_extension \
+                        (PDT_TYPE_AUX,
+                         self.__index_extensions_dict [self.index_mode])
 
         return "%s-%s.index%s" % (prefix, date_str, extension)
 
-    def get_index_extension(self):
-        '''
-        returns the extension used for index files
-        '''
-        return self.__index_extensions_dict[self.index_mode]
-
     def volume_name_func(self, backup_path,     # pylint: disable=method-hidden
                          is_full, volume_number,
                          guess_name=False):
@@ -278,11 +289,13 @@ class DeltaTar(object):
         to be found, and thus the date will be guessed.
         '''
         prefix = "bfull" if is_full else "bdiff"
-        extension = self.__file_extensions_dict[self.mode]
+        extension = self.pick_extension \
+                        (PDT_TYPE_ARCHIVE,
+                         self.__file_extensions_dict [self.mode])
 
         if not guess_name:
             date_str = self.current_time.strftime("%Y-%m-%d-%H%M")
-            return "%s-%s-%03d.tar%s" % (prefix, date_str, volume_number + 1, extension)
+            return "%s-%s-%03d%s" % (prefix, date_str, volume_number + 1, extension)
         else:
             prefix = prefix + "-"
             postfix = "-%03d.tar%s" % (volume_number + 1, extension)