if self.verbose:
self.logfile.write('[' + time.strftime("%Y-%m-%d %H:%M:%S") + ']: HTTPError\n')
if 'message' in fr.json()['errors'][0] and fr.json()['errors'][0]['message'] == u'Unable to get ordinances.':
- self.logfile.write('Unable to get ordinances. Try without option -c.\n')
+ self.logfile.write('Unable to get ordinances. Try with an LDS account or without option -c.\n')
exit()
time.sleep(self.timeout)
continue
else:
Source.counter += 1
self.num = Source.counter
- if tree:
- tree.sources.add(self)
+ if tree and data:
+ tree.sources[data['id']] = self
self.url = self.citation = self.title = self.fid = None
self.notes = set()
def print(self, file=sys.stdout):
file.write('0 @S' + str(self.num) + '@ SOUR \n')
if self.title:
- file.write('1 TITL ' + self.title + '\n')
+ file.write('1 TITL ' + self.title.replace('\n', '\n2 CONT ') + '\n')
if self.citation:
- file.write('1 AUTH ' + self.citation + '\n')
+ file.write('1 AUTH ' + self.citation.replace('\n', '\n2 CONT ') + '\n')
if self.url:
- file.write('1 PUBL ' + self.url + '\n')
+ file.write('1 PUBL ' + self.url.replace('\n', '\n2 CONT ') + '\n')
for n in self.notes:
n.link(file, 1)
file.write('1 REFN ' + self.fid + '\n')
if 'changeMessage' in data['attribution']:
self.note = Note(data['attribution']['changeMessage'], tree)
+ def print(self, file=sys.stdout, key=None):
+ if key:
+ file.write('1 ' + key)
+ if self.value:
+ file.write(' ' + self.value)
+ file.write('\n')
+ if self.date:
+ file.write('2 DATE ' + self.date + '\n')
+ if self.place:
+ file.write('2 PLAC ' + self.place + '\n')
+ if self.note:
+ self.note.link(file, 2)
+
class Name:
if self.buriplac:
file.write('2 PLAC ' + self.buriplac + '\n')
for o in self.physical_descriptions:
- file.write('1 DSCR ' + o.value + '\n')
- if o.date:
- file.write('2 DATE ' + o.date + '\n')
- if o.place:
- file.write('2 PLAC ' + o.place + '\n')
- if o.note:
- o.note.link(file, 2)
+ o.print(file, 'DSCR')
if self.baptism:
file.write('1 BAPL\n')
self.baptism.print(file)
for num in self.famc_num:
file.write('1 FAMC @F' + str(num) + '@\n')
for o in self.occupations:
- file.write('1 OCCU ' + o.value + '\n')
- if o.date:
- file.write('2 DATE ' + o.date + '\n')
- if o.place:
- file.write('2 PLAC ' + o.place + '\n')
- if o.note:
- o.note.link(file, 2)
+ o.print(file, 'OCCU')
for o in self.military:
- file.write('1 _MILT ' + o.value + '\n')
- if o.date:
- file.write('2 DATE ' + o.date + '\n')
- if o.place:
- file.write('2 PLAC ' + o.place + '\n')
- if o.note:
- o.note.link(file, 2)
+ o.print(file, '_MILT')
file.write('1 _FSFTID ' + self.fid + '\n')
for o in self.notes:
o.link(file)
for num in self.chil_num:
file.write('1 CHIL @I' + str(num) + '@\n')
for o in self.marriage_facts:
+ key = ''
if o.type == u'http://gedcomx.org/Marriage':
- file.write('1 MARR\n')
+ key = 'MARR'
if o.type == u'http://gedcomx.org/Divorce':
- file.write('1 DIV\n')
+ key = 'DIV'
if o.type == u'http://gedcomx.org/Annulment':
- file.write('1 ANUL\n')
+ key = 'ANUL'
if o.type == u'http://gedcomx.org/CommonLawMarriage':
- file.write('1 _COML\n')
- if o.date:
- file.write('2 DATE ' + o.date + '\n')
- if o.place:
- file.write('2 PLAC ' + o.place + '\n')
- if o.note:
- file.write('2 NOTE @N' + str(o.note.num) + '@\n')
+ key = 'COML'
+ if key:
+ o.print(file, key)
if self.sealing_spouse:
file.write('1 SLGS\n')
self.sealing_spouse.print(file)
self.indi = dict()
self.fam = dict()
self.notes = set()
- self.sources = set()
+ self.sources = dict()
# add individual to the family tree
def add_indi(self, fid):
# Find source by fid
def add_source(self, data=None):
if data:
- for s in self.sources:
- if s.fid == data['id']:
- return s
+ if data['id'] in self.sources:
+ return self.sources[data['id']]
return Source(data, self)
return False
self.indi[fid].print(file)
for husb, wife in sorted(self.fam, key=lambda x: self.fam.__getitem__(x).num):
self.fam[(husb, wife)].print(file)
- sources = sorted(self.sources, key=lambda x: x.num)
- for i, s in enumerate(sources):
- if i > 0:
- if s.num == sources[i - 1].num:
- continue
+ sources = sorted(self.sources.values(), key=lambda x: x.num)
+ for s in sources:
s.print(file)
notes = sorted(self.notes, key=lambda x: x.num)
for i, n in enumerate(notes):
elif self.tag == 'SOUR':
self.num = int(self.pointer[2:len(self.pointer) - 1])
if self.num not in self.sour:
- self.sour[self.num] = Source(tree=self.tree, num=self.num)
+ self.sour[self.num] = Source(num=self.num)
self.__get_source()
else:
continue
self.sour[self.num].url = self.data
elif self.tag == 'REFN':
self.sour[self.num].fid = self.data
+ if self.data in self.tree.sources:
+ self.sour[self.num] = self.tree.sources[self.data]
+ else:
+ self.tree.sources[self.data] = self.sour[self.num]
elif self.tag == 'NOTE':
num = int(self.data[2:len(self.data) - 1])
if num not in self.note:
def __get_link_source(self):
num = int(self.data[2:len(self.data) - 1])
if num not in self.sour:
- self.sour[num] = Source(tree=self.tree, num=num)
+ self.sour[num] = Source(num=num)
page = None
while self.__get_line() and self.level > 1:
if self.tag == 'PAGE':
else:
n.num = tree.notes[i - 1].num + 1
- # merge sources by fid
- tree.sources = sorted(tree.sources, key=lambda x: x.fid)
- for i, n in enumerate(tree.sources):
- if i == 0:
- n.num = 1
- continue
- if n.fid == tree.sources[i - 1].fid:
- n.num = tree.sources[i - 1].num
- else:
- n.num = tree.sources[i - 1].num + 1
-
# compute number for family relationships and print GEDCOM file
tree.reset_num()
tree.print(args.o)