Browse Source

Collection.request_status(): support targets without active backup set

Fabian Peter Hammerle 7 years ago
parent
commit
aa34500414

+ 14 - 10
duplitab/__init__.py

@@ -47,17 +47,21 @@ class _CollectionStatus(_Status):
 
     @classmethod
     def _parse(cls, text):
-        primary_chain_match = re.search(
-            '^Found primary backup chain.*\s{sep}([\w\W]*?)\s{sep}'.format(
-                sep=_CollectionStatus.chain_separator_regex,
-            ),
-            text,
-            re.MULTILINE,
-        )
-        return cls(
-            primary_chain=_ChainStatus._parse(
+        if 'No backup chains with active signatures found' in text:
+            primary_chain = None
+        else:
+            primary_chain_match = re.search(
+                '^Found primary backup chain.*\s{sep}([\w\W]*?)\s{sep}'.format(
+                    sep=_CollectionStatus.chain_separator_regex,
+                ),
+                text,
+                re.MULTILINE,
+            )
+            primary_chain = _ChainStatus._parse(
                 text=primary_chain_match.group(1),
-            ),
+            )
+        return cls(
+            primary_chain=primary_chain,
         )
 
 

+ 2 - 1
scripts/duplitab

@@ -238,9 +238,10 @@ def run(command, config_path, quiet, duplicity_verbosity,
         for backup_attr in filtered_config:
             collection = duplitab.Collection(url = backup_attr['target_url'])
             status = collection.request_status()
+            primary_chain = status.primary_chain
             table.append([
                 collection.url,
-                status.primary_chain.sets[-1].backup_time,
+                primary_chain.sets[-1].backup_time if 'primary chain' else 'never',
                 ])
         print(tabulate.tabulate(
             table,

BIN
tests/data/collections/empty/only-full/duplicity-full-signatures.20161027T175733Z.sigtar.gz


BIN
tests/data/collections/empty/only-full/duplicity-full.20161027T175733Z.vol1.difftar.gz


+ 6 - 0
tests/test_collection.py

@@ -76,6 +76,12 @@ def test_collection_init_fail(init_kwargs, ex_class):
                 ]),
         ),
     ],
+    [
+        'file://{}'.format(os.path.join(test_collections_dir_path, 'none')),
+        duplitab._CollectionStatus(
+            primary_chain=None,
+        ),
+    ],
 ])
 def test_collection_request_status(url, expected_status):
     c = duplitab.Collection(url=url)