Move delete command to commands module
parent
6206c015a2
commit
9feddf8011
|
@ -0,0 +1,128 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
import utils
|
||||||
|
|
||||||
|
from metafile import Metafile, MalformedMetafileError
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
def init(parser):
|
||||||
|
parser.add_argument( "app" ,
|
||||||
|
type=str ,
|
||||||
|
help="The app to delete, or the app to delete a " \
|
||||||
|
"conf file from" )
|
||||||
|
|
||||||
|
parser.add_argument( "files" ,
|
||||||
|
nargs="*" ,
|
||||||
|
type=str ,
|
||||||
|
help="The conf files or directories to delete from " \
|
||||||
|
"the app" )
|
||||||
|
|
||||||
|
parser.add_argument( "--force-yes", "-y" ,
|
||||||
|
action="store_true" ,
|
||||||
|
help="Don't ask silly questions" )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
def run(args, persoconf, logger):
|
||||||
|
|
||||||
|
# Does this app really exists ?
|
||||||
|
try:
|
||||||
|
appmeta = Metafile( json_path = os.path.join( persoconf.path ,
|
||||||
|
args.app ,
|
||||||
|
persoconf.metafile ) )
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.error( "App %s does not seem to exist" % args.app )
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
except MalformedMetafileError:
|
||||||
|
logger.error( "Failed to load metafile from app %s" % args.app )
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# Does the user want to remove files or the entire app ?
|
||||||
|
if args.files == []:
|
||||||
|
# Delete the entire app
|
||||||
|
|
||||||
|
if ( args.force_yes
|
||||||
|
or utils.yes_no_question("Really delete app '%s'?" % appmeta.name)
|
||||||
|
):
|
||||||
|
|
||||||
|
shutil.rmtree( os.path.join(persoconf.path, appmeta.name) )
|
||||||
|
logger.warning("App %s was deleted" % appmeta.name)
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning("Nothing was deleted")
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Delete all required files (or directories)
|
||||||
|
if ( not args.force_yes
|
||||||
|
and not utils.yes_no_question(
|
||||||
|
"Delete all files from following list: %s from app %s?"
|
||||||
|
% (str(args.files),appmeta.name)
|
||||||
|
)
|
||||||
|
):
|
||||||
|
logger.warning("Nothing was deleted")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
# The filenames can be confnames or real files names. For each we'll
|
||||||
|
# assume first that it's a confname, then that it's a file name if that
|
||||||
|
# fails.
|
||||||
|
dstdic = appmeta.get_files_dst2src() # Get that here for optimization
|
||||||
|
for f in args.files:
|
||||||
|
|
||||||
|
# 1) It's probably a confname
|
||||||
|
if f in appmeta.files:
|
||||||
|
if utils.delete_file_or_dir(
|
||||||
|
logger = logger ,
|
||||||
|
path = os.path.join(persoconf.path,
|
||||||
|
appmeta.name ,
|
||||||
|
f )
|
||||||
|
):
|
||||||
|
# File deleted, let's delete the entry in Metafile
|
||||||
|
appmeta.del_file(f)
|
||||||
|
appmeta.save()
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning( "Something wrong occured while deleting " \
|
||||||
|
"file %s"
|
||||||
|
% f )
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 2) If not, it must be a real filename
|
||||||
|
else:
|
||||||
|
absf = utils.contractuser(
|
||||||
|
os.path.abspath(os.path.expanduser(f))
|
||||||
|
)
|
||||||
|
if absf in dstdic:
|
||||||
|
if delete_file_or_dir( logger = logger,
|
||||||
|
path = os.path.join(
|
||||||
|
persoconf.path,
|
||||||
|
appmeta.name ,
|
||||||
|
dstdir[absf]
|
||||||
|
)
|
||||||
|
):
|
||||||
|
# File deleted, let's delete the entry in Metafile
|
||||||
|
appmeta.del_file(dstdir[absf])
|
||||||
|
appmeta.save()
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning( "Something wrong occured while " \
|
||||||
|
"deleting file %s"
|
||||||
|
% f )
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
# 3) Otherwise, no idea what it is
|
||||||
|
else:
|
||||||
|
logger.warning( "Cannot find file %s in app %s data; " \
|
||||||
|
"ignoring it"
|
||||||
|
% (f, appmeta.name) )
|
||||||
|
continue
|
||||||
|
|
|
@ -15,7 +15,8 @@ from metafile import Metafile, MalformedMetafileError, NoPathDefinedError
|
||||||
from persoconf import Persoconf, FileInsteadOfDirError, \
|
from persoconf import Persoconf, FileInsteadOfDirError, \
|
||||||
PersoconfRootDoesNotExistError
|
PersoconfRootDoesNotExistError
|
||||||
|
|
||||||
import commands.list, commands.package, commands.update, commands.add
|
import commands.list, commands.package, commands.update, commands.add, \
|
||||||
|
commands.delete
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,22 +76,7 @@ parser_del = subparsers.add_parser( "delete" ,
|
||||||
help="Delete an app from the persoconf " \
|
help="Delete an app from the persoconf " \
|
||||||
"directory, or a config file from " \
|
"directory, or a config file from " \
|
||||||
"an existing app" )
|
"an existing app" )
|
||||||
|
commands.delete.init(parser_del)
|
||||||
parser_del.add_argument( "app" ,
|
|
||||||
type=str ,
|
|
||||||
help="The app to delete, or the app to delete a " \
|
|
||||||
"conf file from" )
|
|
||||||
|
|
||||||
parser_del.add_argument( "files" ,
|
|
||||||
nargs="*" ,
|
|
||||||
type=str ,
|
|
||||||
help="The conf files or directories to delete from " \
|
|
||||||
"the app" )
|
|
||||||
|
|
||||||
parser_del.add_argument( "--force-yes", "-y" ,
|
|
||||||
action="store_true" ,
|
|
||||||
help="Don't ask silly questions" )
|
|
||||||
|
|
||||||
|
|
||||||
# Parse arguments
|
# Parse arguments
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
@ -163,98 +149,10 @@ except PersoconfRootDoesNotExistError:
|
||||||
if args.command == "list":
|
if args.command == "list":
|
||||||
commands.list.run(args, persoconf, log)
|
commands.list.run(args, persoconf, log)
|
||||||
|
|
||||||
|
|
||||||
# DELETE COMMAND
|
# DELETE COMMAND
|
||||||
########################################
|
########################################
|
||||||
if args.command == "delete":
|
if args.command == "delete":
|
||||||
|
commands.delete.run(args, persoconf, log)
|
||||||
# Does this app really exists ?
|
|
||||||
try:
|
|
||||||
appmeta = Metafile( json_path = persoconf.path
|
|
||||||
+"/"+ args.app
|
|
||||||
+"/"+ persoconf.metafile )
|
|
||||||
except FileNotFoundError:
|
|
||||||
log.error( "App %s does not seem to exist" % args.app )
|
|
||||||
exit(1)
|
|
||||||
except MalformedMetafileError:
|
|
||||||
log.error( "Failed to load metafile from app %s" % args.app )
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
# Does the user want to remove files or the entire app ?
|
|
||||||
if args.files == []:
|
|
||||||
# Delete the entire app
|
|
||||||
|
|
||||||
if ( args.force_yes
|
|
||||||
or yes_no_question("Really delete app '%s'?" % appmeta.name )
|
|
||||||
):
|
|
||||||
|
|
||||||
shutil.rmtree( persoconf.path +"/"+ appmeta.name )
|
|
||||||
log.warning("App %s was deleted" % appmeta.name)
|
|
||||||
|
|
||||||
else:
|
|
||||||
log.warning("Nothing was deleted")
|
|
||||||
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
else:
|
|
||||||
# Delete all required files (or directories)
|
|
||||||
if ( not args.force_yes
|
|
||||||
and not yes_no_question( "Delete all files from following list: " \
|
|
||||||
"%s from app %s?"
|
|
||||||
% (str(args.files),appmeta.name))
|
|
||||||
):
|
|
||||||
log.warning("Nothing was deleted")
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
# The filenames can be confnames or real files names. For each we'll
|
|
||||||
# assume first that it's a confname, then that it's a file name if that
|
|
||||||
# fails.
|
|
||||||
dstdic = appmeta.get_files_dst2src() # Get that here for optimization
|
|
||||||
for f in args.files:
|
|
||||||
|
|
||||||
# 1) It's probably a confname
|
|
||||||
if f in appmeta.files:
|
|
||||||
if delete_file_or_dir( logger = log ,
|
|
||||||
path = persoconf.path
|
|
||||||
+"/"+ appmeta.name
|
|
||||||
+"/"+ f ):
|
|
||||||
# File deleted, let's delete the entry in Metafile
|
|
||||||
appmeta.del_file(f)
|
|
||||||
appmeta.save()
|
|
||||||
|
|
||||||
else:
|
|
||||||
log.warning( "Something wrong occured while deleting " \
|
|
||||||
"file %s"
|
|
||||||
% f )
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 2) If not, it must be a real filename
|
|
||||||
else:
|
|
||||||
absf = contractuser(os.path.abspath(os.path.expanduser(f)))
|
|
||||||
if absf in dstdic:
|
|
||||||
if delete_file_or_dir( logger = log ,
|
|
||||||
path = persoconf.path
|
|
||||||
+"/"+ appmeta.name
|
|
||||||
+"/"+ dstdir[absf] ):
|
|
||||||
# File deleted, let's delete the entry in Metafile
|
|
||||||
appmeta.del_file(dstdir[absf])
|
|
||||||
appmeta.save()
|
|
||||||
|
|
||||||
else:
|
|
||||||
log.warning( "Something wrong occured while " \
|
|
||||||
"deleting file %s"
|
|
||||||
% f )
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
# 3) Otherwise, no idea what it is
|
|
||||||
else:
|
|
||||||
log.warning( "Cannot find file %s in app %s data; " \
|
|
||||||
"ignoring it"
|
|
||||||
% (f, appmeta.name) )
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ADD COMMAND
|
# ADD COMMAND
|
||||||
########################################
|
########################################
|
||||||
|
|
Loading…
Reference in New Issue