diff --git a/schain-cli/schain.xml b/schain-cli/schain.xml new file mode 100644 index 0000000..304456a --- /dev/null +++ b/schain-cli/schain.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/schain-cli/schaincli/cli.py b/schain-cli/schaincli/cli.py index 4ea0c2a..2fd6978 100644 --- a/schain-cli/schaincli/cli.py +++ b/schain-cli/schaincli/cli.py @@ -1,5 +1,7 @@ import click import schainpy +import subprocess +from multiprocessing import cpu_count from schaincli import templates import os, sys @@ -12,31 +14,47 @@ def print_version(ctx, param, value): @click.command() @click.option('--version', '-v', is_flag=True, callback=print_version, help='SChain version', type=str) +@click.option('--xml', '-x', default=None, help='xml file', type=click.Path(exists=True, resolve_path=True)) @click.argument('command', default='run', required=True) -def main(command, version): +def main(command, version, xml): """COMMAND LINE INTERFACE FOR SIGNAL CHAIN - JICAMARCA RADIO OBSERVATORY""" - if command == 'generate': + if xml is not None: + subprocess.call(['schain --file=' + xml], shell=True) + elif command == 'generate': generate() - pass - elif command == 'run': - pass elif command == 'test': test() - pass else: - click.echo('[ERROR] - Command not defined.') + click.echo('\x1b[0;37;41m[ERROR] - Command is not defined.\x1b[0m') -def generate(): +def basicInputs(): inputs = {} inputs['desc'] = click.prompt('Enter a description', default="A schain project", type=str) inputs['name'] = click.prompt('Name of the project', default="project", type=str) inputs['path'] = click.prompt('Data path', default=os.getcwd(), type=click.Path(exists=True, resolve_path=True)) - inputs['startDate'] = click.prompt('Start date', default='01/01/1970', type=str) - inputs['endDate'] = click.prompt('End date', default='31/12/2017', type=str) + inputs['startDate'] = click.prompt('Start date', default='1970/01/01', type=str) + inputs['endDate'] = click.prompt('End date', default='2017/12/31', type=str) inputs['startHour'] = click.prompt('Start hour', default='00:00:00', type=str) inputs['endHour'] = click.prompt('End hour', default='23:59:59', type=str) - script = open(inputs['name'] + ".py", 'w') - script.write(templates.basic.format(**inputs)) + inputs['figpath'] = inputs['path'] + '/figs' + return inputs + +def generate(): + inputs = basicInputs() + inputs['multiprocess'] = click.confirm('Is this a multiprocess script?') + if inputs['multiprocess']: + inputs['nProcess'] = click.prompt('How many process?', default=cpu_count(), type=int) + current = templates.multiprocess.format(**inputs) + else: + current = templates.basic.format(**inputs) + scriptname = inputs['name'] + ".py" + script = open(scriptname, 'w') + try: + script.write(current) + click.echo('\x1b[0;37;42m[SUCCESS] Script {file} generated\x1b[0m'.format(file=scriptname)) + except Exception as e: + click.echo('\x1b[0;37;41m[ERROR] I cannot create the file. Do you have writing permissions?\x1b[0m') + def test(): print templates.basic.format(name='hola', desc= 'desc', path='path', startDate='0', endDate='0') diff --git a/schain-cli/schaincli/templates.py b/schain-cli/schaincli/templates.py index 555b0ee..748ab72 100644 --- a/schain-cli/schaincli/templates.py +++ b/schain-cli/schaincli/templates.py @@ -1,21 +1,75 @@ -basic = -'''import argparse -from schainpy.controller import Project, multiSchain +basic = '''from schainpy.controller import Project desc = "{desc}" controller = Project() controller.setup(id='191', name="{name}", description=desc) -readUnitConf = controller.addReadUnit(datatype='SpectraReader', - path="{path}", - startDate="{startDate}", - endDate="{endDate}", - startTime="{startHour}", - endTime="{endHour}", - online=0, - walk=1, - ) - -procUnitConf2 = controllerObj.addProcUnit(datatype='Spectra', inputId=readUnitConfObj.getId()) +readUnitConf = controller.addReadUnit(datatype='VoltageReader', + path="{path}", + startDate="{startDate}", + endDate="{endDate}", + startTime="{startHour}", + endTime="{endHour}", + online=0, + verbose=1, + walk=1, + ) + +procUnitConf1 = controller.addProcUnit(datatype='VoltageProc', inputId=readUnitConf.getId()) + +opObj11 = procUnitConf1.addOperation(name='ProfileSelector', optype='other') +opObj11.addParameter(name='profileRangeList', value='120,183', format='intlist') + +opObj11 = procUnitConf1.addOperation(name='RTIPlot', optype='other') +opObj11.addParameter(name='wintitle', value='Jicamarca Radio Observatory', format='str') +opObj11.addParameter(name='showprofile', value='0', format='int') +opObj11.addParameter(name='xmin', value='0', format='int') +opObj11.addParameter(name='xmax', value='24', format='int') +opObj11.addParameter(name='figpath', value="{figpath}", format='str') +opObj11.addParameter(name='wr_period', value='5', format='int') +opObj11.addParameter(name='exp_code', value='22', format='int') + + +controller.start() +''' + +multiprocess = '''from schainpy.controller import Project, multiSchain + +desc = "{desc}" + +def fiber(cursor, skip, q, day): + controller = Project() + controller.setup(id='191', name="{name}", description=desc) + + readUnitConf = controller.addReadUnit(datatype='SpectraReader', + path="{path}", + startDate="day", + endDate="day", + startTime="{startHour}", + endTime="{endHour}", + online=0, + queue=q, + cursor=cursor, + skip=skip, + verbose=1, + walk=1, + ) + + procUnitConf1 = controller.addProcUnit(datatype='Spectra', inputId=readUnitConf.getId()) + + procUnitConf2 = controller.addProcUnit(datatype='ParametersProc', inputId=readUnitConf.getId()) + opObj11 = procUnitConf2.addOperation(name='SpectralMoments', optype='other') + + opObj12 = procUnitConf2.addOperation(name='PublishData', optype='other') + opObj12.addParameter(name='zeromq', value=1, format='int') + opObj12.addParameter(name='verbose', value=0, format='bool') + + controller.start() + + +if __name__ == '__main__': + multiSchain(fiber, nProcess={nProcess}, startDate="{startDate}", endDate="{endDate}") + + ''' diff --git a/schainpy/scripts/schain.xml b/schainpy/scripts/schain.xml index a2ccb6f..bd5200e 100644 --- a/schainpy/scripts/schain.xml +++ b/schainpy/scripts/schain.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file