#!/usr/bin/env python3 import traceback import argparse import os,sys import shutil import getpass from pathlib import Path from importlib import import_module from paramecio2.libraries.slugify import slugify import json import subprocess sys.path.insert(0, os.path.realpath('.')) try: from settings import config except: pass def start(): """Module for create new modules for paramecio """ parser=argparse.ArgumentParser(description='A tool for add modules for paramecio from git url') parser.add_argument('--git_url', help='The git url for clone the module.', required=True) args=parser.parse_args() workdir='.' os.chdir('./modules/') if subprocess.call("git clone {}".format(args.git_url), shell=True) > 0: print('Error, cannot install the git module. Do you have installed git?. Is a correct url?') exit(1) real_path='' with os.scandir('.') as d: for e in d: #print(e.name) if not e.name in config.apps: #print(e.name) if args.git_url.find(e.name)!=-1: real_path=os.path.basename(e.name) # Add dependencies using pip os.chdir('../') dependencies_file='./modules/{}/dependencies.json'.format(real_path) if os.path.isfile(dependencies_file): #print('install dependencies') dep_json=[] with open(dependencies_file) as f: content=f.read() try: dep_json=json.loads(content) except: dep_json=[] print('Error: cannot install dependencies for the package. Malformed json {}'.format(content)) if len(dep_json)>0: if 'packages' in dep_json: print('Install dependencies for the module...') arr_packages=" ".join(dep_json['packages']) if subprocess.call("pip install {}".format(arr_packages), shell=True) > 0: print('Error, cannot install the pip libraries. Do you have installed pip?.') if 'models' in dep_json: print('Creating database tables from models in module...') for model in dep_json['models']: if subprocess.call("paramecio2db --model modules/{}/models/{}.py".format(real_path, model), shell=True) > 0: print('Error, cannot install the model {}.'.format(model)) #print(real_path) # # Add to json configuration. if real_path!='': if os.path.isfile('settings/modules.json'): modules_json={} with open('settings/modules.json') as f: print('Inserting new module in modules.json...') #apps={'monit2': ['modules.monit2', 'monit2_app', '/'], 'welcome': ['paramecio2.modules.welcome', 'welcome_app', '/'], 'pastafari2': ['modules.pastafari2', 'pastafari_app', '/'], 'apache': ['modules.apache', 'apache_app', '/'], 'mariadb': ['modules.mariadb', 'mariadb_app', '/'], 'apiv1': ['modules.apiv1', 'apiv1_app', '/'], 'admin': ['paramecio2.modules.admin', 'admin_app', '/']} json_text=f.read() if json_text!='': modules_json=json.loads(json_text) with open('settings/modules.json', 'w+') as f: modules_json[real_path]=['modules.'+real_path, real_path+'_app', '/'] f.write(json.dumps(modules_json, indent=4)) print('Please, reload your wsgi application for access to your new module') if __name__=="__main__": start()