Fix mergemyancestors with new Gedcom header
authorBenoît Fontaine <benoit.fontaine@acft.fr>
Thu, 16 May 2019 09:41:21 +0000 (11:41 +0200)
committerBenoît Fontaine <benoit.fontaine@acft.fr>
Thu, 16 May 2019 09:41:21 +0000 (11:41 +0200)
getmyancestors.py
mergemyancestors.py

index 7e54b73167f59d1c45717475a0d5c7ca03ce8592..209ff31130929699b80b3a2b94d5c47527f0fa0c 100755 (executable)
@@ -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)
 
index 99809d4752180151199cc1f971e22d1da67471b0..235dd0d46bbdcd44737d6ceb6e937fb543119ae0 100755 (executable)
@@ -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)