switch CLI import to TEMP_DIR location; see new Utils functs
svn: r9409
This commit is contained in:
parent
97a720945f
commit
63a3f8479b
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2007-11-25 Jim Sack <jgsack@san.rr.com>
|
||||
* src/Utils.py : add get_empty_tempdir() and rm_tempdir()
|
||||
* src/ArgHandler.py : use get_empty_tempdir, etc
|
||||
* src/test/gramps_cli_test.py : update test for new import dir
|
||||
- Note get_empty_tempdir forces location in (new) const.TEMP_DIR.
|
||||
- Note rm_tempdir is paranoid in only removing subdirs under
|
||||
TEMP_DIR -- if needed callers can code shutil.rmtree themselves.
|
||||
- Also added FIXME comment in AH - about a prior comment and
|
||||
code change that I feel needs re-examination.
|
||||
|
||||
2007-11-25 Jim Sack <jgsack@san.rr.com>
|
||||
* src/gramps_main.py : remove trial code left in on last commit
|
||||
the r9407 trial code may be of interest as it demos how I avoid
|
||||
|
@ -64,16 +64,6 @@ from PluginUtils import Tool, cl_list, cli_tool_list
|
||||
from ReportBase import CATEGORY_BOOK, CATEGORY_CODE, CATEGORY_WEB, cl_report
|
||||
|
||||
|
||||
def _rm_files(dirpath, pattern="*"):
|
||||
""" Remove files in a directory which match the pattern
|
||||
|
||||
The optional pattern can use shell-style wildcards
|
||||
|
||||
"""
|
||||
for fpath in glob.glob(os.path.join(dirpath, pattern)):
|
||||
if os.path.isfile(fpath):
|
||||
os.remove(fpath)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# ArgHandler
|
||||
#-------------------------------------------------------------------------
|
||||
@ -406,23 +396,8 @@ class ArgHandler:
|
||||
if self.imports:
|
||||
self.cl = bool(self.exports or self.actions or self.cl)
|
||||
|
||||
# Create dir for imported database(s)
|
||||
self.impdir_path = os.path.join(const.HOME_DIR,"import")
|
||||
self.imp_db_path = os.path.join(self.impdir_path,"import_db.grdb")
|
||||
if not os.path.isdir(self.impdir_path):
|
||||
try:
|
||||
os.mkdir(self.impdir_path,0700)
|
||||
except:
|
||||
print "Could not create import directory %s. Exiting." \
|
||||
% self.impdir_path
|
||||
sys.exit(1)
|
||||
elif not os.access(self.impdir_path,os.W_OK):
|
||||
print "Import directory %s is not writable. Exiting." \
|
||||
% self.impdir_path
|
||||
sys.exit(1)
|
||||
# and clean it up before use
|
||||
_rm_files(self.impdir_path)
|
||||
_rm_files(self.imp_db_path)
|
||||
# Create empty dir for imported database(s)
|
||||
self.imp_db_path = Utils.get_empty_tempdir("import_dbdir")
|
||||
|
||||
self.vm.db_loader.read_file(self.imp_db_path,const.APP_GRAMPS)
|
||||
|
||||
@ -450,8 +425,8 @@ class ArgHandler:
|
||||
print "Cleaning up."
|
||||
# remove files in import db subdir after use
|
||||
self.state.db.close()
|
||||
if self.imports:
|
||||
_rm_files(self.imp_db_path)
|
||||
if self.imp_db_path:
|
||||
Utils.rm_tempdir(self.imp_db_path)
|
||||
print "Exiting."
|
||||
sys.exit(0)
|
||||
|
||||
@ -513,23 +488,7 @@ class ArgHandler:
|
||||
print "Error importing %s" % filename
|
||||
sys.exit(1)
|
||||
elif format == 'gramps-pkg':
|
||||
# Create tempdir, if it does not exist, then check for writability
|
||||
tmpdir_path = os.path.join(const.HOME_DIR,"tmp")
|
||||
if not os.path.isdir(tmpdir_path):
|
||||
try:
|
||||
os.mkdir(tmpdir_path,0700)
|
||||
except:
|
||||
print "Could not create temporary directory %s" \
|
||||
% tmpdir_path
|
||||
sys.exit(1)
|
||||
elif not os.access(tmpdir_path,os.W_OK):
|
||||
print "Temporary directory %s is not writable" % tmpdir_path
|
||||
sys.exit(1)
|
||||
else: # tempdir exists and writable -- clean it up if not empty
|
||||
files = os.listdir(tmpdir_path) ;
|
||||
for fn in files:
|
||||
os.remove( os.path.join(tmpdir_path,fn) )
|
||||
|
||||
tmpdir_path = Utils.get_empty_tempdir("imp_gpkgdir")
|
||||
try:
|
||||
import tarfile
|
||||
archive = tarfile.open(filename)
|
||||
@ -557,6 +516,14 @@ class ArgHandler:
|
||||
# Clean up tempdir after ourselves
|
||||
# THIS HAS BEEN CHANGED, because now we want to keep images
|
||||
# stay after the import is over. Just delete the XML file.
|
||||
##jgs:FIXME for how long? just for debug? or this session?
|
||||
## must not be forever, since re-exec of this routine
|
||||
## clears dirfiles without asking
|
||||
## & expands nre tarball possibly overwriting subdirs
|
||||
##
|
||||
## if only debugging, could do Utils.rm_tempdir here
|
||||
## in any case, no real harm (exc. space) to leave stuff here
|
||||
## until next exec of this, which will discard all old stuff
|
||||
os.remove(dbname)
|
||||
## files = os.listdir(tmpdir_path)
|
||||
## for fn in files:
|
||||
|
21
src/Utils.py
21
src/Utils.py
@ -51,6 +51,8 @@ import gen.lib
|
||||
import Errors
|
||||
from QuestionDialog import WarningDialog
|
||||
|
||||
from const import TEMP_DIR
|
||||
import shutil
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -862,6 +864,25 @@ def get_new_filename(ext, folder='~/'):
|
||||
ix = ix + 1
|
||||
return os.path.expanduser(_NEW_NAME_PATTERN % (folder, os.path.sep, ix, ext))
|
||||
|
||||
def get_empty_tempdir(dirname):
|
||||
""" Return path to TEMP_DIR/dirname, a guaranteed empty directory
|
||||
|
||||
makes intervening directories if required
|
||||
fails if _file_ by that name already exists,
|
||||
or for inadequate permissions to delete dir/files or create dir(s)
|
||||
|
||||
"""
|
||||
dirpath = os.path.join(TEMP_DIR,dirname)
|
||||
if os.path.isdir(dirpath):
|
||||
shutil.rmtree(dirpath)
|
||||
os.makedirs(dirpath)
|
||||
return dirpath
|
||||
|
||||
def rm_tempdir(path):
|
||||
"""Remove a tempdir created with get_empty_tempdir"""
|
||||
if path.startswith(TEMP_DIR) and os.path.isdir(path):
|
||||
shutil.rmtree(path)
|
||||
|
||||
def cast_to_bool(val):
|
||||
if val == str(True):
|
||||
return True
|
||||
|
@ -51,13 +51,13 @@ class Test(unittest.TestCase):
|
||||
g = re.search("INDI", content)
|
||||
s.assertTrue(g, "found 'INDI' in output file")
|
||||
|
||||
# this verifies that files in the "import dir"
|
||||
# this verifies that files in the temporary "import dir"
|
||||
# get cleaned before (and after) running a CLI
|
||||
# (eg cleanout stale files from prior crash-runs)
|
||||
def test3_files_in_import_dir(s):
|
||||
import const
|
||||
idir = os.path.join(const.HOME_DIR,"import")
|
||||
ddir = os.path.join(idir, "import_db.grdb")
|
||||
ddir = os.path.join(const.TEMP_DIR,"import_dbdir")
|
||||
os.makedirs(ddir)
|
||||
bogofiles = [os.path.join(ddir,fn)
|
||||
for fn in ("family.db", "lock")]
|
||||
for fn in bogofiles:
|
||||
|
Loading…
Reference in New Issue
Block a user