From c06fc5fb9bc4455d74cd26ab6d856287769ef68b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Fontaine?= Date: Thu, 16 May 2019 11:41:21 +0200 Subject: [PATCH] Fix mergemyancestors with new Gedcom header --- getmyancestors.py | 26 ++++++++++---------------- mergemyancestors.py | 18 ++++++++++++++---- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/getmyancestors.py b/getmyancestors.py index 7e54b73..209ff31 100755 --- a/getmyancestors.py +++ b/getmyancestors.py @@ -193,6 +193,7 @@ class Session: time.sleep(self.timeout) continue self.write_log("FamilySearch session id: " + self.fssessionid) + self.set_current() return True def get_url(self, url): @@ -258,18 +259,10 @@ class Session: self.lang = data["users"][0]["preferredLanguage"] self.display_name = data["users"][0]["displayName"] - def get_userid(self): - """ get FamilySearch current user ID """ - if not self.fid: - self.set_current() - return self.fid - def _(self, string): """ translate a string into user's language TODO replace translation file for gettext format """ - if not self.lang: - self.set_current() if string in translations and self.lang in translations[string]: return translations[string][self.lang] return string @@ -619,7 +612,7 @@ class Indi: notes = self.tree.fs.get_url("/platform/tree/persons/%s/notes.json" % self.fid) if notes: for n in notes["persons"][0]["notes"]: - text_note = "=== %s ===\n" % n["subject"] if 'subject' in n else "" + text_note = "=== %s ===\n" % n["subject"] if "subject" in n else "" text_note += n["text"] + "\n" if "text" in n else "" self.notes.add(Note(text_note, self.tree)) @@ -841,6 +834,10 @@ class Tree: self.notes = list() self.sources = dict() self.places = dict() + self.display_name = self.lang = None + if fs: + self.display_name = fs.display_name + self.lang = babelfish.Language.fromalpha2(fs.lang).name def add_indis(self, fids): """ add individuals to the family tree @@ -1035,8 +1032,8 @@ class Tree: file.write("2 TIME %s\n" % time.strftime("%H:%M:%S")) file.write("1 SUBM @SUBM@\n") file.write("0 @SUBM@ SUBM\n") - file.write("1 NAME %s\n" % self.fs.display_name) - file.write("1 LANG %s\n" % babelfish.Language.fromalpha2(self.fs.lang).name) + file.write("1 NAME %s\n" % self.display_name) + file.write("1 LANG %s\n" % self.lang) for fid in sorted(self.indi, key=lambda x: self.indi.__getitem__(x).num): self.indi[fid].print(file) @@ -1175,14 +1172,11 @@ if __name__ == "__main__": tree = Tree(fs) # check LDS account - if ( - args.c - and fs.get_url("/platform/tree/persons/%s/ordinances.json" % fs.get_userid()) == "error" - ): + if args.c and fs.get_url("/platform/tree/persons/%s/ordinances.json" % fs.fid) == "error": exit(2) # add list of starting individuals to the family tree - todo = args.i if args.i else [fs.get_userid()] + todo = args.i if args.i else [fs.fid] print(_("Downloading starting individuals...")) tree.add_indis(todo) diff --git a/mergemyancestors.py b/mergemyancestors.py index 99809d4..235dd0d 100755 --- a/mergemyancestors.py +++ b/mergemyancestors.py @@ -78,13 +78,22 @@ class Gedcom: if self.num not in self.note: self.note[self.num] = gt.Note(tree=self.tree, num=self.num) self.__get_note() - elif self.tag == "SOUR": + elif self.tag == "SOUR" and self.pointer: self.num = int(self.pointer[2 : len(self.pointer) - 1]) if self.num not in self.sour: self.sour[self.num] = gt.Source(num=self.num) self.__get_source() - else: - continue + elif self.tag == "SUBM" and self.pointer: + self.__get_subm() + + def __get_subm(self): + while self.__get_line() and self.level > 0: + if not self.tree.display_name or not self.tree.lang: + if self.tag == "NAME": + self.tree.display_name = self.data + elif self.tag == "LANG": + self.tree.lang = self.data + self.flag = True def __get_line(self): """ Parse a new line @@ -372,7 +381,8 @@ if __name__ == "__main__": try: parser.error = parser.exit args = parser.parse_args() - except SystemExit: + except SystemExit as e: + print(e.code) parser.print_help() exit(2) -- 2.52.0