This repository has been archived on 2021-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
kaneton/export/export.py

138 lines
3.7 KiB
Python

#
# ---------- header -----------------------------------------------------------
#
# project kaneton
#
# license kaneton
#
# file /home/mycure/kaneton/export/export.py
#
# created francois goudal [sat oct 25 20:57:38 2008]
# updated julien quintard [sat feb 5 11:43:43 2011]
#
#
# ---------- imports ----------------------------------------------------------
#
import sys
import yaml
import env
#
# ---------- globals ----------------------------------------------------------
#
g_verbose = 1
g_modules = {}
g_modules_parameters = {}
g_action_data = []
g_export_dir = ""
#
# ---------- functions --------------------------------------------------------
#
#
# modules_load()
#
# dynamically loads action modules from the "modules" directory.
#
def modules_load():
global g_modules
env.display(env.HEADER_OK, 'loading action modules', env.OPTION_NONE)
if (env.path(sys.argv[0], env.OPTION_DIRECTORY) == ""):
moduledir = './modules'
else:
moduledir = env.path(sys.argv[0], env.OPTION_DIRECTORY) + '/modules'
sys.path.append(moduledir)
for i in env.list(moduledir, env.OPTION_FILE):
if i.endswith('.py'):
mod = __import__(i[:-3])
try:
init_str = mod.module_init()
except AttributeError:
sys.stderr.write('error: The module file ' + i +
' is missing the module_init function\n')
sys.exit(1)
g_modules[init_str[0]] = mod
g_modules_parameters[init_str[0]] = init_str
env.display(env.HEADER_OK, " loaded module " + init_str[0], env.OPTION_NONE)
#
# action_data_load()
#
# loads the action data from the YAML file
#
def action_data_load(filename):
env.display(env.HEADER_OK, 'loading action data description file ' + filename, env.OPTION_NONE)
stream = file(env._EXPORT_DIR_ + '/' + filename + '.yml', 'r')
return yaml.load(stream)
def parse_data_file(filename):
global g_action_data
global g_modules
global g_export_dir
global g_modules_parameters
g_action_data = action_data_load(filename)
for i in g_action_data:
if i['operation'] == 'import':
env.display(env.HEADER_OK, 'action import ' + i['filename'], env.OPTION_NONE)
parse_data_file("behaviours/" + i['filename'])
else:
arg = {}
for j in range(1, len(g_modules_parameters[i['operation']])):
arg[g_modules_parameters[i['operation']][j]] = i[g_modules_parameters[
i['operation']][j]];
if g_modules[i['operation']].module_action(g_export_dir, arg) != 0:
sys.exit(1)
#
# main()
#
# main function: goes through the actions and calls the modules accordingly
#
def main():
global g_modules
global g_action_data
global g_export_dir
if (len(sys.argv) != 2):
env.display(env.HEADER_ERROR, "usage: export.py [behaviour]",
env.OPTION_NONE)
env.display(env.HEADER_NONE, "",
env.OPTION_NONE)
env.display(env.HEADER_ERROR, "behaviours:",
env.OPTION_NONE)
for i in env.list(env._EXPORT_DIR_ + "/behaviours", env.OPTION_FILE):
env.display(env.HEADER_ERROR, " " + i[:-4], env.OPTION_NONE)
return 1
modules_load()
work_dir = env.temporary(env.OPTION_DIRECTORY)
g_export_dir = work_dir + "/kaneton"
env.display(env.HEADER_OK, 'exporting to ' + g_export_dir, env.OPTION_NONE)
env.display(env.HEADER_OK, 'running export actions', env.OPTION_NONE)
parse_data_file("behaviours/" + sys.argv[1])
env.display(env.HEADER_OK, 'cleaning temporary directory', env.OPTION_NONE)
env.remove(work_dir, env.OPTION_NONE)
env.display(env.HEADER_OK, 'export finished', env.OPTION_NONE)
#
# ---------- entry point ------------------------------------------------------
#
main()