* src/ArgHandler.py: Command line support for geneweb import

and export; Fix command line exports for gedcom, XML, and package.
* src/Exporter.py (help): Point to correct manual section.
* src/const.py.in: Add a constant for geneweb mime type name.
* src/plugins/WriteFtree.py: Support wizard and fix command line mode.
* src/plugins/writeftree.glade: Support export wizard.
* src/plugins/WritePkg.py: Support wizard and fix command line mode.
* src/plugins/ImportGeneWeb.py: Comment out debugging messages.
* src/plugins/WriteGeneWeb.py: Support for command-line export.


svn: r4054
This commit is contained in:
Alex Roitman
2005-02-19 19:05:48 +00:00
parent c9f66dad82
commit 329e8b6f3d
9 changed files with 297 additions and 349 deletions

View File

@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Martin Hawlisch, Donald N. Allingham
# Copyright (C) 2000-2005 Martin Hawlisch, Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -29,9 +29,8 @@
#-------------------------------------------------------------------------
import os
import re
import string
import const
import time
from gettext import gettext as _
#-------------------------------------------------------------------------
#
@ -48,13 +47,11 @@ import gtk.glade
#-------------------------------------------------------------------------
import Errors
import RelLib
import Date
import DateHandler
import latin_utf8
import Utils
import const
from QuestionDialog import ErrorDialog
from gettext import gettext as _
from DateHandler import parser as _dp
#-------------------------------------------------------------------------
#
@ -98,7 +95,6 @@ class GeneWebParser:
self.db = dbase
self.f = open(file,"rU")
self.filename = file
self.dp = DateHandler.create_parser()
def get_next_line(self):
line = self.f.readline()
@ -133,7 +129,7 @@ class GeneWebParser:
fields = line.split(" ")
print "LINE: %s" %line
#print "LINE: %s" %line
if fields[0] == "fam":
self.read_family_line(line,fields)
elif fields[0] == "src":
@ -173,7 +169,7 @@ class GeneWebParser:
self.fkeys.append(self.current_family.get_handle())
idx = 1;
print "\nHusband:"
#print "\nHusband:"
(idx,husband) = self.parse_person(fields,idx,RelLib.Person.MALE,None)
if husband:
self.current_husband_handle = husband.get_handle()
@ -181,9 +177,9 @@ class GeneWebParser:
self.db.commit_family(self.current_family,self.trans)
husband.add_family_handle(self.current_family.get_handle())
self.db.commit_person(husband,self.trans)
print "Marriage:"
#print "Marriage:"
idx = self.parse_marriage(fields,idx)
print "Wife:"
#print "Wife:"
(idx,wife) = self.parse_person(fields,idx,RelLib.Person.FEMALE,None)
if wife:
self.current_family.set_mother_handle(wife.get_handle())
@ -194,15 +190,15 @@ class GeneWebParser:
def read_source_line(self,line,fields):
if not self.current_family:
print "Unknown family of child!"
return None
print "Unknown family of child!"
return None
source = self.get_or_create_source(self.decode(fields[1]))
self.current_family.add_source_reference(source)
self.db.commit_family(self.current_family,self.trans)
return None
def read_witness_line(self,line,fields):
print "Witness:"
#print "Witness:"
if fields[1] == "m:":
self.parse_person(fields,2,RelLib.Person.MALE,None)
elif fields[1] == "f:":
@ -219,8 +215,8 @@ class GeneWebParser:
husb = self.db.get_person_from_handle(self.current_husband_handle)
father_surname = husb.get_primary_name().get_surname()
if not self.current_family:
print "Unknown family of child!"
return None
print "Unknown family of child!"
return None
while 1:
line = self.get_next_line()
if line == None:
@ -230,7 +226,7 @@ class GeneWebParser:
fields = line.split(" ")
if fields[0] == "-":
print "Child:"
#print "Child:"
child = None
if fields[1] == "h":
(idx,child) = self.parse_person(fields,2,RelLib.Person.MALE,father_surname)
@ -254,8 +250,8 @@ class GeneWebParser:
def read_family_comment(self,line,fields):
if not self.current_family:
print "Unknown family of child!"
return None
print "Unknown family of child!"
return None
self.current_family.set_note(self.cnv(line))
self.db.commit_family(self.current_family,self.trans)
return None
@ -299,7 +295,7 @@ class GeneWebParser:
# skip to marriage date in case person contained unmatches tokens
#Alex: this failed when fields[idx] was an empty line. Fixed.
#while idx < len(fields) and not fields[idx][0] == "+":
#while idx < len(fields) and not fields[idx][0] == "+":
while idx < len(fields) and not (fields[idx] and fields[idx][0] == "+"):
print "Unknown field: "+fields[idx]
idx = idx + 1
@ -307,33 +303,33 @@ class GeneWebParser:
while idx < len(fields) and mariageDataRe.match(fields[idx]):
if fields[idx][0] == "+":
mar_date = self.parse_date(self.decode(fields[idx]))
print " Married at: %s" % fields[idx]
#print " Married at: %s" % fields[idx]
idx = idx + 1
elif fields[idx][0] == "-":
div_date = self.parse_date(self.decode(fields[idx]))
print " Div at: %s" % fields[idx]
#print " Div at: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == "#mp":
idx = idx + 1
mar_place = self.get_or_create_place(self.decode(fields[idx]))
print " Marriage place: %s" % fields[idx]
#print " Marriage place: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == "#ms":
idx = idx + 1
mar_source = self.get_or_create_source(self.decode(fields[idx]))
print " Marriage source: %s" % fields[idx]
#print " Marriage source: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == "#sep":
idx = idx + 1
sep_date = self.parse_date(self.decode(fields[idx]))
print " Seperated since: %s" % fields[idx]
#print " Seperated since: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == "#np":
print " Are not married."
#print " Are not married."
married = 0
idx = idx + 1
elif fields[idx] == "#eng":
print " Are engaged."
#print " Are engaged."
engaged = 1
idx = idx + 1
else:
@ -385,7 +381,7 @@ class GeneWebParser:
surname = self.decode(fields[idx])
idx = idx + 1
print "Person: %s %s" % (firstname, surname)
#print "Person: %s %s" % (firstname, surname)
person = self.get_or_create_person(firstname,surname)
name = RelLib.Name()
name.set_type("Birth Name")
@ -424,113 +420,113 @@ class GeneWebParser:
while idx < len(fields) and personDataRe.match(fields[idx]):
if fields[idx][0] == '(':
print "Public Name: %s" % fields[idx]
#print "Public Name: %s" % fields[idx]
public_name = self.decode(fields[idx])
idx = idx + 1
elif fields[idx][0] == '{':
print "Firstsname Alias: %s" % fields[idx]
#print "Firstsname Alias: %s" % fields[idx]
firstname_aliases.append(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx][0] == '[':
print "Titles: %s" % fields[idx]
#print "Titles: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == '#nick':
idx = idx + 1
print "Nick Name: %s" % fields[idx]
#print "Nick Name: %s" % fields[idx]
nick_names.append(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#occu':
idx = idx + 1
print "Occupation: %s" % fields[idx]
#print "Occupation: %s" % fields[idx]
occu = self.create_event("Occupation",self.decode(fields[idx]))
person.add_event_handle(occu.get_handle())
self.db.commit_person(person,self.trans)
idx = idx + 1
elif fields[idx] == '#alias':
idx = idx + 1
print "Name Alias: %s" % fields[idx]
#print "Name Alias: %s" % fields[idx]
name_aliases.append(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#salias':
idx = idx + 1
print "Surname Alias: %s" % fields[idx]
#print "Surname Alias: %s" % fields[idx]
surname_aliases.append(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#image':
idx = idx + 1
print "Image: %s" % fields[idx]
#print "Image: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == '#src':
idx = idx + 1
print "Source: %s" % fields[idx]
#print "Source: %s" % fields[idx]
source = self.get_or_create_source(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#bs':
idx = idx + 1
print "Birth Source: %s" % fields[idx]
#print "Birth Source: %s" % fields[idx]
birth_source = self.get_or_create_source(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx][0] == '!':
print "Baptize at: %s" % fields[idx]
#print "Baptize at: %s" % fields[idx]
bapt_date = self.parse_date(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#bp':
idx = idx + 1
print "Birth Place: %s" % fields[idx]
#print "Birth Place: %s" % fields[idx]
birth_place = self.get_or_create_place(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#pp':
idx = idx + 1
print "Baptize Place: %s" % fields[idx]
#print "Baptize Place: %s" % fields[idx]
bapt_place = self.get_or_create_place(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#ps':
idx = idx + 1
print "Baptize Source: %s" % fields[idx]
#print "Baptize Source: %s" % fields[idx]
bapt_source = self.get_or_create_source(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#dp':
idx = idx + 1
print "Death Place: %s" % fields[idx]
#print "Death Place: %s" % fields[idx]
death_place = self.get_or_create_place(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#ds':
idx = idx + 1
print "Death Source: %s" % fields[idx]
#print "Death Source: %s" % fields[idx]
death_source = self.get_or_create_source(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#buri':
idx = idx + 1
print "Burial Date: %s" % fields[idx]
#print "Burial Date: %s" % fields[idx]
bur_date = self.parse_date(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#crem':
idx = idx + 1
print "Cremention Date: %s" % fields[idx]
#print "Cremention Date: %s" % fields[idx]
crem_date = self.parse_date(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#bp':
idx = idx + 1
print "Burial Place: %s" % fields[idx]
#print "Burial Place: %s" % fields[idx]
bur_place = self.get_or_create_place(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#rs':
idx = idx + 1
print "Burial Source: %s" % fields[idx]
#print "Burial Source: %s" % fields[idx]
bur_source = self.get_or_create_source(self.decode(fields[idx]))
idx = idx + 1
elif fields[idx] == '#apubl':
print "This is a public record"
#print "This is a public record"
idx = idx + 1
elif fields[idx] == '#apriv':
print "This is a private record"
#print "This is a private record"
idx = idx + 1
elif dateRe.match( fields[idx]):
if not birth_date:
print "Birth Date: %s" % fields[idx]
#print "Birth Date: %s" % fields[idx]
birth_date = self.parse_date(self.decode(fields[idx]))
else:
print "Death Date: %s" % fields[idx]
#print "Death Date: %s" % fields[idx]
death_date = self.parse_date(self.decode(fields[idx]))
idx = idx + 1
else:
@ -611,8 +607,7 @@ class GeneWebParser:
return (idx,person)
def parse_date(self,field):
#Alex: this should do the trick
date = self.dp.parse(field)
date = _dp.parse(field)
return date
def create_event(self,type,desc=None,date=None,place=None,source=None):
@ -680,11 +675,10 @@ class GeneWebParser:
#
#
#-------------------------------------------------------------------------
_mime_type = 'application/x-geneweb'
_mime_type = const.app_geneweb
_filter = gtk.FileFilter()
_filter.set_name(_('GeneWeb files'))
_filter.add_mime_type(_mime_type)
from PluginMgr import register_import
register_import(importData,_filter,_mime_type,1)