4114: Would like to use stdin and stdout for command line import/export by MD Nauta
svn: r16308
This commit is contained in:
parent
3833ee63a6
commit
217316ccf5
@ -97,9 +97,9 @@ class ArgHandler(object):
|
||||
else:
|
||||
# Need to convert to system file encoding before printing
|
||||
# For non latin characters in path/file/user names
|
||||
print msg1.encode(sys.getfilesystemencoding())
|
||||
print >> sys.stderr, msg1.encode(sys.getfilesystemencoding())
|
||||
if msg2 is not None:
|
||||
print msg2.encode(sys.getfilesystemencoding())
|
||||
print >> sys.stderr, msg2.encode(sys.getfilesystemencoding())
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Argument parser: sorts out given arguments
|
||||
@ -145,7 +145,7 @@ class ArgHandler(object):
|
||||
value = Utils.get_unicode_path_from_env_var(value)
|
||||
fname = value
|
||||
fullpath = os.path.abspath(os.path.expanduser(fname))
|
||||
if not os.path.exists(fullpath):
|
||||
if fname != '-' and not os.path.exists(fullpath):
|
||||
self.__error(_('Error: Import file %s not found.') % fname)
|
||||
sys.exit(0)
|
||||
|
||||
@ -181,20 +181,23 @@ class ArgHandler(object):
|
||||
# For non latin characters in Windows path/file/user names
|
||||
value = Utils.get_unicode_path_from_env_var(value)
|
||||
fname = value
|
||||
fullpath = os.path.abspath(os.path.expanduser(fname))
|
||||
if os.path.exists(fullpath):
|
||||
self.__error(_("WARNING: Output file already exists!\n"
|
||||
"WARNING: It will be overwritten:\n %(name)s") % \
|
||||
{'name' : fullpath})
|
||||
answer = None
|
||||
while not answer:
|
||||
answer = raw_input(_('OK to overwrite? (yes/no) ') \
|
||||
.encode(sys.getfilesystemencoding()))
|
||||
if answer.upper() in ('Y', 'YES', _('YES').upper()):
|
||||
self.__error( _("Will overwrite the existing file: %s")
|
||||
% fullpath)
|
||||
else:
|
||||
sys.exit(0)
|
||||
if fname == '-':
|
||||
fullpath = '-'
|
||||
else:
|
||||
fullpath = os.path.abspath(os.path.expanduser(fname))
|
||||
if os.path.exists(fullpath):
|
||||
self.__error(_("WARNING: Output file already exists!\n"
|
||||
"WARNING: It will be overwritten:\n %(name)s") % \
|
||||
{'name' : fullpath})
|
||||
answer = None
|
||||
while not answer:
|
||||
answer = raw_input(_('OK to overwrite? (yes/no) ') \
|
||||
.encode(sys.getfilesystemencoding()))
|
||||
if answer.upper() in ('Y', 'YES', _('YES').upper()):
|
||||
self.__error( _("Will overwrite the existing file: %s")
|
||||
% fullpath)
|
||||
else:
|
||||
sys.exit(0)
|
||||
|
||||
if family_tree_format is None:
|
||||
# Guess the file format based on the file extension.
|
||||
@ -317,9 +320,9 @@ class ArgHandler(object):
|
||||
self.__import_action()
|
||||
|
||||
for (action, options_str) in self.actions:
|
||||
print "Performing action: %s." % action
|
||||
print >> sys.stderr, "Performing action: %s." % action
|
||||
if options_str:
|
||||
print "Using options string: %s" % options_str
|
||||
print >> sys.stderr, "Using options string: %s" % options_str
|
||||
self.cl_action(action, options_str)
|
||||
|
||||
for expt in self.exports:
|
||||
@ -327,16 +330,16 @@ class ArgHandler(object):
|
||||
# For non latin characters in Windows path/file/user names
|
||||
fn = expt[0].encode(sys.getfilesystemencoding())
|
||||
fmt = str(expt[1])
|
||||
print "Exporting: file %s, format %s." % (fn, fmt)
|
||||
print >> sys.stderr, "Exporting: file %s, format %s." % (fn, fmt)
|
||||
self.cl_export(expt[0], expt[1])
|
||||
|
||||
if cleanup:
|
||||
self.cleanup()
|
||||
print "Exiting."
|
||||
print >> sys.stderr, "Exiting."
|
||||
sys.exit(0)
|
||||
|
||||
def cleanup(self):
|
||||
print "Cleaning up."
|
||||
print >> sys.stderr, "Cleaning up."
|
||||
# remove files in import db subdir after use
|
||||
self.dbstate.db.close()
|
||||
if self.imp_db_path:
|
||||
@ -366,16 +369,16 @@ class ArgHandler(object):
|
||||
|
||||
try:
|
||||
self.sm.open_activate(self.imp_db_path)
|
||||
print "Created empty family tree successfully"
|
||||
print >> sys.stderr, "Created empty family tree successfully"
|
||||
except:
|
||||
print "Error opening the file."
|
||||
print "Exiting..."
|
||||
print >> sys.stderr, "Error opening the file."
|
||||
print >> sys.stderr, "Exiting..."
|
||||
sys.exit(0)
|
||||
|
||||
for imp in self.imports:
|
||||
fn = imp[0].encode(sys.getfilesystemencoding())
|
||||
fmt = str(imp[1])
|
||||
print "Importing: file %s, format %s." % (fn, fmt)
|
||||
print >> sys.stderr, "Importing: file %s, format %s." % (fn, fmt)
|
||||
self.cl_import(imp[0], imp[1])
|
||||
|
||||
def __open_action(self):
|
||||
@ -391,10 +394,10 @@ class ArgHandler(object):
|
||||
# we load this file for use
|
||||
try:
|
||||
self.sm.open_activate(self.open)
|
||||
print "Opened successfully!"
|
||||
print >> sys.stderr, "Opened successfully!"
|
||||
except:
|
||||
print "Error opening the file."
|
||||
print "Exiting..."
|
||||
print >> sys.stderr, "Error opening the file."
|
||||
print >> sys.stderr, "Exiting..."
|
||||
sys.exit(0)
|
||||
|
||||
def check_db(self, dbpath, force_unlock = False):
|
||||
@ -466,7 +469,7 @@ class ArgHandler(object):
|
||||
for chunk in options_str.split(',') ] )
|
||||
except:
|
||||
options_str_dict = {}
|
||||
print "Ignoring invalid options string."
|
||||
print >> sys.stderr, "Ignoring invalid options string."
|
||||
|
||||
name = options_str_dict.pop('name', None)
|
||||
_cl_list = pmgr.get_reg_reports(gui=False)
|
||||
@ -493,15 +496,16 @@ class ArgHandler(object):
|
||||
else:
|
||||
msg = "Report name not given. Please use one of [-p|--options] name=reportname."
|
||||
|
||||
print "%s\n Available names are:" % msg
|
||||
print >> sys.stderr, "%s\n Available names are:" % msg
|
||||
for pdata in _cl_list:
|
||||
# Print cli report name ([item[0]) and GUI report name (item[4])
|
||||
if len(pdata.id) <= 25:
|
||||
print " %s%s- %s" % ( pdata.id,
|
||||
" " * (26 - len(pdata.id)),
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
print >> sys.stderr, \
|
||||
" %s%s- %s" % ( pdata.id, " " * (26 - len(pdata.id)),
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
else:
|
||||
print " %s\t- %s" % (pdata.id, pdata.name.encode(sys.getfilesystemencoding()))
|
||||
print >> sys.stderr, " %s\t- %s" % (pdata.id,
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
|
||||
elif action == "tool":
|
||||
from gui.plug import tool
|
||||
@ -510,7 +514,7 @@ class ArgHandler(object):
|
||||
chunk in options_str.split(',') ] )
|
||||
except:
|
||||
options_str_dict = {}
|
||||
print "Ignoring invalid options string."
|
||||
print >> sys.stderr, "Ignoring invalid options string."
|
||||
|
||||
name = options_str_dict.pop('name', None)
|
||||
_cli_tool_list = pmgr.get_reg_tools(gui=False)
|
||||
@ -531,15 +535,16 @@ class ArgHandler(object):
|
||||
else:
|
||||
msg = "Tool name not given. Please use one of [-p|--options] name=toolname."
|
||||
|
||||
print "%s\n Available names are:" % msg
|
||||
print >> sys.stderr, "%s\n Available names are:" % msg
|
||||
for pdata in _cli_tool_list:
|
||||
# Print cli report name ([item[0]) and GUI report name (item[4])
|
||||
if len(pdata.id) <= 25:
|
||||
print " %s%s- %s" % ( pdata.id,
|
||||
" " * (26 - len(pdata.id)),
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
print >> sys.stderr, \
|
||||
" %s%s- %s" % ( pdata.id, " " * (26 - len(pdata.id)),
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
else:
|
||||
print " %s\t- %s" % (pdata.id, pdata.name.encode(sys.getfilesystemencoding()))
|
||||
print >> sys.stderr, " %s\t- %s" % (pdata.id,
|
||||
pdata.name.encode(sys.getfilesystemencoding()))
|
||||
else:
|
||||
print "Unknown action: %s." % action
|
||||
print >> sys.stderr, "Unknown action: %s." % action
|
||||
sys.exit(0)
|
||||
|
@ -231,7 +231,7 @@ class ArgParser(object):
|
||||
# if there were an argument without option,
|
||||
# use it as a file to open and return
|
||||
self.open_gui = leftargs[0]
|
||||
print "Trying to open: %s ..." % leftargs[0]
|
||||
print >> sys.stderr, "Trying to open: %s ..." % leftargs[0]
|
||||
#see if force open is on
|
||||
for opt_ix in range(len(options)):
|
||||
option, value = options[opt_ix]
|
||||
@ -262,7 +262,7 @@ class ArgParser(object):
|
||||
elif option in ( '-a', '--action' ):
|
||||
action = value
|
||||
if action not in ( 'report', 'tool' ):
|
||||
print "Unknown action: %s. Ignoring." % action
|
||||
print >> sys.stderr, "Unknown action: %s. Ignoring." % action
|
||||
continue
|
||||
options_str = ""
|
||||
if opt_ix < len(options)-1 \
|
||||
@ -270,7 +270,7 @@ class ArgParser(object):
|
||||
options_str = options[opt_ix+1][1]
|
||||
self.actions.append((action, options_str))
|
||||
elif option in ('-d', '--debug'):
|
||||
print 'setup debugging', value
|
||||
print >> sys.stderr, 'setup debugging', value
|
||||
logger = logging.getLogger(value)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
cleandbg += [opt_ix]
|
||||
@ -287,20 +287,22 @@ class ArgParser(object):
|
||||
set_value = True
|
||||
if config.has_default(setting_name):
|
||||
setting_value = config.get(setting_name)
|
||||
print "Current Gramps config setting: %s:%s" % (
|
||||
setting_name, repr(setting_value))
|
||||
print >> sys.stderr, "Current Gramps config setting: " \
|
||||
"%s:%s" % (setting_name, repr(setting_value))
|
||||
if set_value:
|
||||
if new_value == "DEFAULT":
|
||||
new_value = config.get_default(setting_name)
|
||||
else:
|
||||
new_value = safe_eval(new_value)
|
||||
config.set(setting_name, new_value)
|
||||
print " New Gramps config setting: %s:%s" % (
|
||||
setting_name, repr(config.get(setting_name)))
|
||||
print >> sys.stderr, " New Gramps config " \
|
||||
"setting: %s:%s" % (setting_name, \
|
||||
repr(config.get(setting_name)))
|
||||
else:
|
||||
need_to_quit = True
|
||||
else:
|
||||
print "Gramps: no such config setting: '%s'" % setting_name
|
||||
print >> sys.stderr, "Gramps: no such config setting:" \
|
||||
" '%s'" % setting_name
|
||||
need_to_quit = True
|
||||
else:
|
||||
print "Gramps config settings from %s:" % \
|
||||
|
@ -125,46 +125,52 @@ class GrampsXmlWriter(UpdateCallback):
|
||||
"""
|
||||
Write the database to the specified file.
|
||||
"""
|
||||
base = os.path.dirname(filename)
|
||||
if os.path.isdir(base):
|
||||
if not os.access(base, os.W_OK) or not os.access(base, os.R_OK):
|
||||
raise DbWriteFailure(
|
||||
_('Failure writing %s') % filename,
|
||||
_("The database cannot be saved because you do "
|
||||
"not have permission to write to the directory. "
|
||||
"Please make sure you have write access to the "
|
||||
"directory and try again."))
|
||||
return 0
|
||||
|
||||
if os.path.exists(filename):
|
||||
if not os.access(filename, os.W_OK):
|
||||
raise DbWriteFailure(
|
||||
_('Failure writing %s') % filename,
|
||||
_("The database cannot be saved because you do "
|
||||
"not have permission to write to the file. "
|
||||
"Please make sure you have write access to the "
|
||||
"file and try again."))
|
||||
return 0
|
||||
if filename == '-':
|
||||
import sys
|
||||
g = sys.stdout
|
||||
self.compress = False
|
||||
else:
|
||||
base = os.path.dirname(filename)
|
||||
if os.path.isdir(base):
|
||||
if not os.access(base, os.W_OK) or not os.access(base, os.R_OK):
|
||||
raise DbWriteFailure(
|
||||
_('Failure writing %s') % filename,
|
||||
_("The database cannot be saved because you do "
|
||||
"not have permission to write to the directory. "
|
||||
"Please make sure you have write access to the "
|
||||
"directory and try again."))
|
||||
return 0
|
||||
|
||||
if os.path.exists(filename):
|
||||
if not os.access(filename, os.W_OK):
|
||||
raise DbWriteFailure(
|
||||
_('Failure writing %s') % filename,
|
||||
_("The database cannot be saved because you do "
|
||||
"not have permission to write to the file. "
|
||||
"Please make sure you have write access to the "
|
||||
"file and try again."))
|
||||
return 0
|
||||
|
||||
self.fileroot = os.path.dirname(filename)
|
||||
try:
|
||||
if self.compress and _gzip_ok:
|
||||
try:
|
||||
g = gzip.open(filename,"wb")
|
||||
except:
|
||||
self.fileroot = os.path.dirname(filename)
|
||||
try:
|
||||
if self.compress and _gzip_ok:
|
||||
try:
|
||||
g = gzip.open(filename,"wb")
|
||||
except:
|
||||
g = open(filename,"w")
|
||||
else:
|
||||
g = open(filename,"w")
|
||||
else:
|
||||
g = open(filename,"w")
|
||||
except IOError,msg:
|
||||
LOG.warn(str(msg))
|
||||
raise DbWriteFailure((_('Failure writing %s') % filename,
|
||||
str(msg)))
|
||||
return 0
|
||||
except IOError,msg:
|
||||
LOG.warn(str(msg))
|
||||
raise DbWriteFailure((_('Failure writing %s') % filename,
|
||||
str(msg)))
|
||||
return 0
|
||||
|
||||
self.g = codecs.getwriter("utf8")(g)
|
||||
|
||||
self.write_xml_data()
|
||||
g.close()
|
||||
if filename != '-':
|
||||
g.close()
|
||||
return 1
|
||||
|
||||
def write_handle(self, handle):
|
||||
|
Loading…
Reference in New Issue
Block a user