Browse Source

added _CollectionStatus.last_full_backup_time()

Fabian Peter Hammerle 7 years ago
parent
commit
e4d3fb28b6
4 changed files with 46 additions and 6 deletions
  1. 4 4
      README.md
  2. 4 0
      duplitab/__init__.py
  3. 2 1
      scripts/duplitab
  4. 36 1
      tests/test_collection.py

+ 4 - 4
README.md

@@ -56,8 +56,8 @@ $ duplitab --filter-target-url '.*media/backup/[hs].*' backup
 
 ```bash
 $ duplitab --filter-target-url '.*media/backup/[hs].*' status --table-style tabular
-target url                               last_backup
----------------------------------------  -------------------
-file:///media/backup/home                2016-10-23 08:35:13
-sftp://user@server//media/backup/secret  2016-09-22 09:36:14
+target_url                               last full backup     last incremental backup
+---------------------------------------  -------------------  -----------------------
+file:///media/backup/home                2016-01-01 08:04:04  2016-10-23 08:35:13
+sftp://user@server//media/backup/secret  2016-09-22 09:36:14  2016-09-22 09:36:14
 ```

+ 4 - 0
duplitab/__init__.py

@@ -46,6 +46,10 @@ class _CollectionStatus(_Status):
         self.archive_dir_path = archive_dir_path
         self.primary_chain = primary_chain
 
+    @property
+    def last_full_backup_time(self):
+        return self.primary_chain.first_backup_time if self.primary_chain else None
+
     @property
     def last_incremental_backup_time(self):
         return self.primary_chain.last_backup_time if self.primary_chain else None

+ 2 - 1
scripts/duplitab

@@ -240,11 +240,12 @@ def run(command, config_path, quiet, duplicity_verbosity,
             status = collection.request_status()
             table.append([
                 collection.url,
+                status.last_full_backup_time or 'never',
                 status.last_incremental_backup_time or 'never',
                 ])
         print(tabulate.tabulate(
             table,
-            ['target_url', 'last backup'],
+            ['target_url', 'last full backup', 'last incremental backup'],
             tablefmt = table_style,
             ))
     elif command == 'backup':

+ 36 - 1
tests/test_collection.py

@@ -166,6 +166,41 @@ def test_chain_status_get_first_backup_time(chain_status, expected_time):
         None,
     ],
 ])
-def test_collection_status_get_incremental_backup_time(
+def test_collection_status_get_last_incremental_backup_time(
         collection_status, expected_time):
     assert expected_time == collection_status.last_incremental_backup_time
+
+@pytest.mark.parametrize(('collection_status', 'expected_time'), [
+    [
+        duplitab._CollectionStatus(
+            archive_dir_path='/tmp/none',
+            primary_chain=duplitab._ChainStatus(
+                sets=[
+                    duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
+                ]),
+        ),
+        datetime.datetime(2016, 10, 27, 19, 57, 33),
+    ],
+    [
+        duplitab._CollectionStatus(
+            archive_dir_path='/tmp/none',
+            primary_chain=duplitab._ChainStatus(
+                sets=[
+                    duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
+                    duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
+                    duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
+                ]),
+        ),
+        datetime.datetime(2016, 10, 27, 19, 57, 33),
+    ],
+    [
+        duplitab._CollectionStatus(
+            archive_dir_path='/tmp/none',
+            primary_chain=None,
+        ),
+        None,
+    ],
+])
+def test_collection_status_get_incremental_backup_time(
+        collection_status, expected_time):
+    assert expected_time == collection_status.last_full_backup_time