]> Nutra Git (v2) - gamesguru/getmyancestors.git/commitdiff
Added distance argument to download all people up until a distance.
authorBarnabas Sudy <barnabas.sudy@gmail.com>
Sun, 7 Jul 2024 09:01:59 +0000 (11:01 +0200)
committerBarnabas Sudy <barnabas.sudy@gmail.com>
Sun, 7 Jul 2024 09:01:59 +0000 (11:01 +0200)
getmyancestors/getmyancestors.py

index 68baaa8dd31f3765564b43d179fd7b6d44f699bb..6583fe9775a01352d4bd4acec03242b321054c3d 100644 (file)
@@ -59,6 +59,19 @@ def main():
         default=0,
         help="Number of generations to descend [0]",
     )
+    parser.add_argument(
+        '--distance',
+        metavar="<INT>",
+        type=int,
+        default=0,
+        help="The maxium distance from the starting individuals [0]. If distance is set, ascend and descend will be ignored.",
+    )
+    # parser.add_argument(
+    #     '--only-blood-relatives',
+    #     action="store_true",
+    #     default=False,
+    #     help="Only include blood relatives in the tree [False]",
+    # )
     parser.add_argument(
         "-m",
         "--marriage",
@@ -205,37 +218,59 @@ def main():
         print(_("Downloading starting individuals..."), file=sys.stderr)
         tree.add_indis(todo)
 
+
+
         # download ancestors
-        todo = set(tree.indi.keys())
-        done = set()
-        for i in range(args.ascend):
-            if not todo:
-                break
-            done |= todo
-            print(
-                _("Downloading %s. of generations of ancestors...") % (i + 1),
-                file=sys.stderr,
-            )
-            todo = tree.add_parents(todo) - done
+        if args.distance == 0:
+            todo = set(tree.indi.keys())
+            done = set()
+            for i in range(args.ascend):
+                if not todo:
+                    break
+                done |= todo
+                print(
+                    _("Downloading %s. of generations of ancestors...") % (i + 1),
+                    file=sys.stderr,
+                )
+                todo = tree.add_parents(todo) - done
 
-        # download descendants
-        todo = set(tree.indi.keys())
-        done = set()
-        for i in range(args.descend):
-            if not todo:
-                break
-            done |= todo
-            print(
-                _("Downloading %s. of generations of descendants...") % (i + 1),
-                file=sys.stderr,
-            )
-            todo = tree.add_children(todo) - done
+            # download descendants
+            todo = set(tree.indi.keys())
+            done = set()
+            for i in range(args.descend):
+                if not todo:
+                    break
+                done |= todo
+                print(
+                    _("Downloading %s. of generations of descendants...") % (i + 1),
+                    file=sys.stderr,
+                )
+                todo = tree.add_children(todo) - done
+
+            # download spouses
+            if args.marriage:
+                print(_("Downloading spouses and marriage information..."), file=sys.stderr)
+                todo = set(tree.indi.keys())
+                tree.add_spouses(todo)
 
-        # download spouses
-        if args.marriage:
-            print(_("Downloading spouses and marriage information..."), file=sys.stderr)
+        else:
             todo = set(tree.indi.keys())
-            tree.add_spouses(todo)
+            done = set()
+            for distance in range(args.distance):
+
+                if not todo:
+                    break
+                done |= todo
+                print(
+                    _("Downloading individuals at distance %s...") % (distance + 1),
+                    file=sys.stderr,
+                )
+                todo = set(tree.indi.keys())
+                done = set()
+                parents = tree.add_parents(todo) - done
+                children = tree.add_children(todo) - done
+                spouses = tree.add_children(todo) - done
+                todo = parents | children | spouses
 
         # download ordinances, notes and contributors
         async def download_stuff(loop):