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>
|
2007-11-25 Jim Sack <jgsack@san.rr.com>
|
||||||
* src/gramps_main.py : remove trial code left in on last commit
|
* 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
|
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
|
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
|
# ArgHandler
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -406,23 +396,8 @@ class ArgHandler:
|
|||||||
if self.imports:
|
if self.imports:
|
||||||
self.cl = bool(self.exports or self.actions or self.cl)
|
self.cl = bool(self.exports or self.actions or self.cl)
|
||||||
|
|
||||||
# Create dir for imported database(s)
|
# Create empty dir for imported database(s)
|
||||||
self.impdir_path = os.path.join(const.HOME_DIR,"import")
|
self.imp_db_path = Utils.get_empty_tempdir("import_dbdir")
|
||||||
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)
|
|
||||||
|
|
||||||
self.vm.db_loader.read_file(self.imp_db_path,const.APP_GRAMPS)
|
self.vm.db_loader.read_file(self.imp_db_path,const.APP_GRAMPS)
|
||||||
|
|
||||||
@ -450,8 +425,8 @@ class ArgHandler:
|
|||||||
print "Cleaning up."
|
print "Cleaning up."
|
||||||
# remove files in import db subdir after use
|
# remove files in import db subdir after use
|
||||||
self.state.db.close()
|
self.state.db.close()
|
||||||
if self.imports:
|
if self.imp_db_path:
|
||||||
_rm_files(self.imp_db_path)
|
Utils.rm_tempdir(self.imp_db_path)
|
||||||
print "Exiting."
|
print "Exiting."
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
@ -513,23 +488,7 @@ class ArgHandler:
|
|||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gramps-pkg':
|
elif format == 'gramps-pkg':
|
||||||
# Create tempdir, if it does not exist, then check for writability
|
tmpdir_path = Utils.get_empty_tempdir("imp_gpkgdir")
|
||||||
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) )
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import tarfile
|
import tarfile
|
||||||
archive = tarfile.open(filename)
|
archive = tarfile.open(filename)
|
||||||
@ -557,6 +516,14 @@ class ArgHandler:
|
|||||||
# Clean up tempdir after ourselves
|
# Clean up tempdir after ourselves
|
||||||
# THIS HAS BEEN CHANGED, because now we want to keep images
|
# THIS HAS BEEN CHANGED, because now we want to keep images
|
||||||
# stay after the import is over. Just delete the XML file.
|
# 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)
|
os.remove(dbname)
|
||||||
## files = os.listdir(tmpdir_path)
|
## files = os.listdir(tmpdir_path)
|
||||||
## for fn in files:
|
## for fn in files:
|
||||||
|
21
src/Utils.py
21
src/Utils.py
@ -51,6 +51,8 @@ import gen.lib
|
|||||||
import Errors
|
import Errors
|
||||||
from QuestionDialog import WarningDialog
|
from QuestionDialog import WarningDialog
|
||||||
|
|
||||||
|
from const import TEMP_DIR
|
||||||
|
import shutil
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -862,6 +864,25 @@ def get_new_filename(ext, folder='~/'):
|
|||||||
ix = ix + 1
|
ix = ix + 1
|
||||||
return os.path.expanduser(_NEW_NAME_PATTERN % (folder, os.path.sep, ix, ext))
|
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):
|
def cast_to_bool(val):
|
||||||
if val == str(True):
|
if val == str(True):
|
||||||
return True
|
return True
|
||||||
|
@ -51,13 +51,13 @@ class Test(unittest.TestCase):
|
|||||||
g = re.search("INDI", content)
|
g = re.search("INDI", content)
|
||||||
s.assertTrue(g, "found 'INDI' in output file")
|
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
|
# get cleaned before (and after) running a CLI
|
||||||
# (eg cleanout stale files from prior crash-runs)
|
# (eg cleanout stale files from prior crash-runs)
|
||||||
def test3_files_in_import_dir(s):
|
def test3_files_in_import_dir(s):
|
||||||
import const
|
import const
|
||||||
idir = os.path.join(const.HOME_DIR,"import")
|
ddir = os.path.join(const.TEMP_DIR,"import_dbdir")
|
||||||
ddir = os.path.join(idir, "import_db.grdb")
|
os.makedirs(ddir)
|
||||||
bogofiles = [os.path.join(ddir,fn)
|
bogofiles = [os.path.join(ddir,fn)
|
||||||
for fn in ("family.db", "lock")]
|
for fn in ("family.db", "lock")]
|
||||||
for fn in bogofiles:
|
for fn in bogofiles:
|
||||||
|
Loading…
Reference in New Issue
Block a user