From: Shane <30691680+gamesguru@users.noreply.github.com> Date: Tue, 9 Sep 2025 15:54:17 +0000 (-0400) Subject: Merge branch 'master' into gramps X-Git-Url: https://git.nutra.tk/v2?a=commitdiff_plain;h=568f203fd6babdc58394e0384dcfefdddb58cf93;p=gamesguru%2Fgetmyancestors.git Merge branch 'master' into gramps --- 568f203fd6babdc58394e0384dcfefdddb58cf93 diff --cc getmyancestors/classes/session.py index 9f9aeca,183d305..9a4e5fc --- a/getmyancestors/classes/session.py +++ b/getmyancestors/classes/session.py @@@ -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 @@@ -149,11 -160,7 +162,11 @@@ 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 diff --cc getmyancestors/getmyancestors.py index 3e13e4c,fc9e7e5..4e9b43e --- a/getmyancestors/getmyancestors.py +++ b/getmyancestors/getmyancestors.py @@@ -135,34 -100,28 +135,35 @@@ def main() default=False, help="Save settings into file [False]", ) + parser.add_argument( + "-o", + "--outfile", + metavar="", + type=argparse.FileType("w", encoding="UTF-8"), + default=sys.stdout, + help="output GEDCOM file [stdout]", + ) + parser.add_argument( + "-l", + "--logfile", + metavar="", + type=argparse.FileType("w", encoding="UTF-8"), + default=False, + help="output log file [stderr]", + ) + parser.add_argument( + "--client_id", metavar="", type=str, help="Use Specific Client ID" + ) + parser.add_argument( + "--redirect_uri", metavar="", type=str, help="Use Specific Redirect Uri" + ) + parser.add_argument( + "-g", + "--geonames", + metavar="", + type=str, + help="Geonames.org username in order to download place data", + ) - try: - parser.add_argument( - "-o", - "--outfile", - metavar="", - # type=argparse.FileType("w", encoding="UTF-8"), - # default=sys.stdout, - help="output GEDCOM file [stdout]", - ) - parser.add_argument( - "-l", - "--logfile", - metavar="", - 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) # extract arguments from the command line try: @@@ -220,19 -175,19 +221,28 @@@ # 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: @@@ -248,74 -204,37 +259,72 @@@ 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):