]> Nutra Git (v1) - gamesguru/getmyancestors.git/commitdiff
Merge branch 'master' into gramps
authorShane <30691680+gamesguru@users.noreply.github.com>
Tue, 9 Sep 2025 15:54:17 +0000 (11:54 -0400)
committerShane <30691680+gamesguru@users.noreply.github.com>
Tue, 9 Sep 2025 15:54:17 +0000 (11:54 -0400)
1  2 
getmyancestors/classes/session.py
getmyancestors/classes/tree.py
getmyancestors/getmyancestors.py

index 9f9aeca1037a37cb362e4d0611f7991ba7b89a22,183d3050e21ab1b1e565a887a9f4bf8c8600f507..9a4e5fc6f33d77536002da3dee4d48fe0059ddc7
@@@ -2,17 -2,19 +2,21 @@@
  import sys
  import time
  from urllib.parse import urlparse, parse_qs
+ import webbrowser
  
  import requests
 +from requests_cache import CachedSession as CSession
  from fake_useragent import UserAgent
  
  # local imports
  from getmyancestors.classes.translation import translations
  
+ DEFAULT_CLIENT_ID = "a02j000000KTRjpAAH"
+ DEFAULT_REDIRECT_URI = "https://misbach.github.io/fs-auth/index_raw.html"
  
 -class Session(requests.Session):
 +# class Session(requests.Session):
 +class GMASession:
      """Create a FamilySearch session
      :param username and password: valid FamilySearch credentials
      :param verbose: True to active verbose mode
          while True:
              try:
                  self.write_log("Downloading: " + url)
 -                r = self.get(base + url, timeout=self.timeout, headers=headers)
 +                r = self.get(
-                     "https://api.familysearch.org" + url,
++                    base + url,
 +                    timeout=self.timeout,
 +                    headers=headers,
 +                )
              except requests.exceptions.ReadTimeout:
                  self.write_log("Read timed out")
                  continue
Simple merge
index 3e13e4c62948bf937e525cf28fc1e5209c816579,fc9e7e5e3ba301663bb67c93382e2861165f51a1..4e9b43e4ddccdd1bfb6e334ab55a703528f94bfe
@@@ -135,34 -100,28 +135,35 @@@ def main()
          default=False,
          help="Save settings into file [False]",
      )
-     try:
-         parser.add_argument(
-             "-o",
-             "--outfile",
-             metavar="<FILE>",
-             # type=argparse.FileType("w", encoding="UTF-8"),
-             # default=sys.stdout,
-             help="output GEDCOM file [stdout]",
-         )
-         parser.add_argument(
-             "-l",
-             "--logfile",
-             metavar="<FILE>",
-             type=argparse.FileType("w", encoding="UTF-8"),
-             default=False,
-             help="output log file [stderr]",
-         )
-     except TypeError:
-         sys.stderr.write("Python >= 3.4 is required to run this script\n")
-         sys.stderr.write("(see https://docs.python.org/3/whatsnew/3.4.html#argparse)\n")
-         sys.exit(2)
+     parser.add_argument(
+         "-o",
+         "--outfile",
+         metavar="<FILE>",
+         type=argparse.FileType("w", encoding="UTF-8"),
+         default=sys.stdout,
+         help="output GEDCOM file [stdout]",
+     )
+     parser.add_argument(
+         "-l",
+         "--logfile",
+         metavar="<FILE>",
+         type=argparse.FileType("w", encoding="UTF-8"),
+         default=False,
+         help="output log file [stderr]",
+     )
+     parser.add_argument(
+         "--client_id", metavar="<STR>", type=str, help="Use Specific Client ID"
+     )
+     parser.add_argument(
+         "--redirect_uri", metavar="<STR>", type=str, help="Use Specific Redirect Uri"
+     )
 +    parser.add_argument(
 +        "-g",
 +        "--geonames",
 +        metavar="<STR>",
 +        type=str,
 +        help="Geonames.org username in order to download place data",
 +    )
  
      # extract arguments from the command line
      try:
  
      # initialize a FamilySearch session and a family tree object
      print("Login to FamilySearch...", file=sys.stderr)
+     fs = Session(
+         args.username,
+         args.password,
+         args.client_id,
+         args.redirect_uri,
+         args.verbose,
+         args.logfile,
+         args.timeout,
+     )
 +    if args.cache:
 +        print("Using cache...", file=sys.stderr)
 +        fs = CachedSession(args.username, args.password, args.verbose, args.logfile, args.timeout)
 +    else:
 +        fs = Session(args.username, args.password, args.verbose, args.logfile, args.timeout)
      if not fs.logged:
          sys.exit(2)
      _ = fs._
 -    tree = Tree(fs)
 +    tree = Tree(
-         fs, 
++        fs,
 +        exclude=args.exclude,
 +        geonames_key=args.geonames,
 +    )
  
      # check LDS account
      if args.get_ordinances:
          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
 -
 -        # 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
 +        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 spouses
 -        if args.marriage:
 -            print(_("Downloading spouses and marriage information..."), file=sys.stderr)
 +            # download descendants
              todo = set(tree.indi.keys())
 -            tree.add_spouses(todo)
 +            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)
 +
 +        else:
 +            todo_bloodline = set(tree.indi.keys())
 +            todo_others = set()
 +            done = set()
 +            for distance in range(args.distance):
 +
 +                if not todo_bloodline and not todo_others:
 +                    break
 +                done |= todo_bloodline
 +                print(
 +                    _("Downloading individuals at distance %s...") % (distance + 1),
 +                    file=sys.stderr,
 +                )
 +                parents = tree.add_parents(todo_bloodline) - done
 +                children = tree.add_children(todo_bloodline) - done
 +
 +                # download spouses
 +                if args.marriage:
 +                    print(_("Downloading spouses and marriage information..."), file=sys.stderr)
 +                    todo = set(tree.indi.keys())
 +                    tree.add_spouses(todo)
 +
 +                # spouses = tree.add_spouses(todo_bloodline) - done
 +
 +                todo_bloodline = parents | children
 +                # if args.only_blood_relatives:
 +                #     # Downloading non bloodline parents
 +                #     tree.add_parents(todo_others)
 +
 +                #     # TODO what is a non bloodline person becomes bloodline on another branch?
 +                #     todo_others = spouses
 +                # else:
 +                    # todo_bloodline |= spouses
  
          # download ordinances, notes and contributors
          async def download_stuff(loop):