10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-11-07 14:43:56 +01:00
quantum_package/scripts/module/qp_install_module.py

188 lines
5.7 KiB
Python
Raw Normal View History

2015-06-04 16:40:00 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
2015-06-22 10:37:17 +02:00
Usage:
2015-06-05 09:50:24 +02:00
qp_install_module.py create -n <name> [<children_module>...]
qp_install_module.py download -n <name> [<path_folder>...]
2015-06-22 10:37:17 +02:00
qp_install_module.py install <name>...
2015-06-25 10:22:19 +02:00
qp_install_module.py list (--installed | --available-local)
2015-06-23 10:04:59 +02:00
qp_install_module.py uninstall <name>... [--and_ancestor]
2015-06-05 09:50:24 +02:00
Options:
2015-06-25 10:22:19 +02:00
list: List all the module available
create: Create a new module
2015-06-04 16:40:00 +02:00
"""
import sys
import os
try:
from docopt import docopt
from module_handler import ModuleHandler, get_dict_child
from module_handler import get_l_module_descendant
2015-06-04 16:40:00 +02:00
from update_README import Doc_key, Needed_key
2015-06-25 10:22:19 +02:00
from qp_path import QP_SRC, QP_PLUGINS
2015-06-04 16:40:00 +02:00
except ImportError:
print "Please check if you have source the .quantum_package.rc"
print "(`source .quantum_package.rc`)"
print sys.exit(1)
2015-06-04 16:40:00 +02:00
def save_new_module(path, l_child):
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
# N E E D E D _ C H I L D R E N _ M O D U L E S #
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
try:
os.makedirs(path)
except OSError:
print "The module ({0}) already exist...".format(path)
sys.exit(1)
with open(os.path.join(path, "NEEDED_CHILDREN_MODULES"), "w") as f:
f.write(" ".join(l_child))
f.write("\n")
# ~#~#~#~#~#~#~ #
# R E A D _ M E #
# ~#~#~#~#~#~#~ #
module_name = os.path.basename(path)
header = "{0}\n{1}\n{0}\n".format("=" * len(module_name), module_name)
with open(os.path.join(path, "README.rst"), "w") as f:
f.write(header + "\n")
f.write(Doc_key + "\n")
f.write(Needed_key + "\n")
if __name__ == '__main__':
arguments = docopt(__doc__)
if arguments["list"]:
if arguments["--installed"]:
2015-06-23 10:04:59 +02:00
l_repository = [QP_SRC]
2015-06-25 10:22:19 +02:00
elif arguments["--available-local"]:
2015-06-23 10:04:59 +02:00
l_repository = [QP_PLUGINS]
m_instance = ModuleHandler(l_repository)
2015-06-22 10:22:00 +02:00
for module in sorted(m_instance.l_module):
2015-06-17 19:00:31 +02:00
print "* {0}".format(module)
2015-06-04 16:40:00 +02:00
elif arguments["create"]:
2015-06-23 10:04:59 +02:00
m_instance = ModuleHandler([QP_SRC])
2015-06-04 16:40:00 +02:00
l_children = arguments["<children_module>"]
2015-07-02 09:55:41 +02:00
path = os.path.join(QP_PLUGINS, arguments["<name>"][0])
2015-06-04 16:40:00 +02:00
print "You will create the module:"
print path
for children in l_children:
if children not in m_instance.dict_descendant:
2015-06-04 16:40:00 +02:00
print "This module ({0}) is not a valide module.".format(children)
2015-06-25 10:22:19 +02:00
print "Run `list` flag for the list of module available"
2015-06-23 10:04:59 +02:00
print "Maybe you need to install some module first"
2015-06-04 16:40:00 +02:00
print "Aborting..."
sys.exit(1)
print "You ask for this submodule:"
print l_children
print "You can use all the routine in this module"
print l_children + m_instance.l_descendant_unique(l_children)
2015-06-04 16:40:00 +02:00
print "This can be reduce to:"
l_child_reduce = m_instance.l_reduce_tree(l_children)
2015-06-04 16:40:00 +02:00
print l_child_reduce
save_new_module(path, l_child_reduce)
2015-07-02 09:55:41 +02:00
print "This was a plugin, you can install it now"
elif arguments["download"]:
2015-06-17 19:00:31 +02:00
pass
2015-06-23 10:04:59 +02:00
# d_local = get_dict_child([QP_SRC])
2015-06-17 19:00:31 +02:00
# d_remote = get_dict_child(arguments["<path_folder>"])
#
# d_child = d_local.copy()
# d_child.update(d_remote)
#
# name = arguments["<name>"]
# l_module_descendant = get_l_module_descendant(d_child, [name])
#
# for module in l_module_descendant:
# if module not in d_local:
# print "you need to install", module
elif arguments["install"]:
2015-06-23 10:04:59 +02:00
d_local = get_dict_child([QP_SRC])
d_plugin = get_dict_child([QP_PLUGINS])
d_child = d_local.copy()
2015-06-17 19:00:31 +02:00
d_child.update(d_plugin)
2015-06-17 19:00:31 +02:00
l_name = arguments["<name>"]
2015-06-17 19:00:31 +02:00
for name in l_name:
if name in d_local:
print "{0} Is already installed".format(name)
2015-06-17 19:00:31 +02:00
l_module_descendant = get_l_module_descendant(d_child, l_name)
2015-06-17 19:00:31 +02:00
l_module_to_cp = [module for module in l_module_descendant if module not in d_local]
2015-06-17 19:00:31 +02:00
if l_module_to_cp:
2015-06-17 19:00:31 +02:00
print "You will need all these modules"
print l_module_to_cp
2015-06-17 19:00:31 +02:00
print "Installation...",
2015-06-17 19:00:31 +02:00
for module_to_cp in l_module_to_cp:
2015-06-23 10:04:59 +02:00
src = os.path.join(QP_PLUGINS, module_to_cp)
des = os.path.join(QP_SRC, module_to_cp)
2015-06-22 10:22:00 +02:00
try:
os.symlink(src, des)
except OSError:
2015-06-23 10:04:59 +02:00
print "Your src directory is broken. Please remove %s" % des
2015-06-22 10:22:00 +02:00
raise
2015-06-17 19:00:31 +02:00
print "Done"
print "You can now compile as usual"
2015-06-22 10:37:17 +02:00
elif arguments["uninstall"]:
2015-06-23 10:04:59 +02:00
m_instance = ModuleHandler([QP_SRC])
d_descendant = m_instance.dict_descendant
d_local = get_dict_child([QP_SRC])
2015-06-22 10:37:17 +02:00
l_name = arguments["<name>"]
2015-06-23 10:04:59 +02:00
l_failed = [name for name in l_name if name not in d_local]
2015-06-22 10:37:17 +02:00
if l_failed:
print "Modules not installed:"
for name in sorted(l_failed):
2015-06-23 10:04:59 +02:00
print "* %s" % name
2015-06-22 10:37:17 +02:00
sys.exit(1)
else:
2015-06-23 10:04:59 +02:00
if arguments["--and_ancestor"]:
l_name_to_remove = l_name + [module for module in m_instance.l_module for name in l_name if name in d_descendant[module]]
print "You will remove all of:"
print l_name_to_remove
else:
l_name_to_remove = l_name
2015-06-22 10:37:17 +02:00
def unlink(x):
try:
2015-06-23 10:04:59 +02:00
os.unlink(os.path.join(QP_SRC, x))
2015-06-22 10:37:17 +02:00
except OSError:
2015-06-23 10:04:59 +02:00
print "%s is a core module which can not be renmoved" % x
map(unlink, l_name_to_remove)