Commit 597cb1e7 authored by Gino Tosti's avatar Gino Tosti
Browse files

initial Commit

parents
Loading
Loading
Loading
Loading

GenDevice/__init__.py

0 → 100644
+1 −0
Original line number Diff line number Diff line

GenDevice/acsUtils.py

0 → 100755
+60 −0
Original line number Diff line number Diff line

from datetime import date
import sys,os
import subprocess


def execACSCommand(command):
	p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
	for line in p.stdout.readlines():
    		print (line,)
	retval = p.wait()
	print ("command executed:",retval)
	return retval

def createACSDir(basedir,dirname):
	pwd=os.getcwd()
	command="getTemplateForDirectory MODROOT_WS "
	print (pwd)
	if basedir !="":
		if not os.path.exists(basedir):
			print ("Root dir:",basedir,"does not exist")
			return False
		else:
			os.chdir(basedir)
			
			command=command+dirname
			print (command)
			execACSCommand(command)
			cwd=os.path.abspath(dirname)
			os.chdir(pwd)
	else:
		print ("A null Root dir was selected")
		return False
	return cwd
	
def checkACS():
	if 'ACSROOT' in os.environ:
		return True
	else:
		return False

def stopAcs():
	command="acsStop -b 0 "
	exexACSCommnad(command)

def startAcs():
	command="acsStart -b 0 "
	exexACSCommnad(command)

def startJavaCont(name):
	command="acsStartContainer -java -b 0 " +name
	exexACSCommnad(command)

def stopJavaCont(name):
	command="acsStopContainer -b 0 " +name
	exexACSCommnad(command)

def killACS():
	command="killACS "
	exexACSCommnad(command)
+162 −0
Original line number Diff line number Diff line
from GenDevice.acsUtils import *

managerxml="""<?xml version="1.0" encoding="ISO-8859-1"?>
<Manager   xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" 
           xmlns="urn:schemas-cosylab-com:Manager:1.0" 
           xmlns:log="urn:schemas-cosylab-com:LoggingConfig:1.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     Timeout="50.0"
     ClientPingInterval="10.0"
     ContainerPingInterval="10.0"
     AdministratorPingInterval="10.0">
	
	<Startup>
	</Startup>

	<ServiceComponents>
		<cdb:e string="AcsAlarmService" />
		<cdb:e string="ACSLogSvc" />
		<cdb:e string="Log" />
		<cdb:e string="LogFactory" />
		<cdb:e string="NotifyEventChannelFactory" />
		<cdb:e string="MC_NotifyEventChannelFactory" />
		<cdb:e string="LoggingNotifyEventChannelFactory" />
		<cdb:e string="MC_LoggingNotifyEventChannelFactory" />
		<cdb:e string="AlarmNotifyEventChannelFactory" />
		<cdb:e string="MC_AlarmNotifyEventChannelFactory" />
		<cdb:e string="ArchivingChannel@ARCHIVING.channels" />
		<cdb:e string="LoggingChannel@LOGGING.channels" />
		<cdb:e string="AlarmChannel" />
		<cdb:e string="InterfaceRepository" />
		<cdb:e string="CDB" />
	</ServiceComponents>

	<LoggingConfig>
		<log:e Name="jacorb@Manager" minLogLevel="5" minLogLevelLocal="4" />
	</LoggingConfig>

</Manager>
 """
javacontXml = """<?xml version="1.0" encoding="ISO-8859-1"?>
<Container 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="urn:schemas-cosylab-com:Container:1.0" 
	xmlns:log="urn:schemas-cosylab-com:LoggingConfig:1.0" 
	ImplLang="java"
        ServerThreads="99"
	>

	<Autoload>
	</Autoload>

	<LoggingConfig 
           centralizedLogger="Log" 
           minLogLevel="4" 
           dispatchPacketSize="10" 
           immediateDispatchLevel="99">
           <log:e Name="jacorb@frodoContainer"
		minLogLevel="8" minLogLevelLocal="8" />
	   <log:e Name="UnknownSlf4j@frodoContainer"
		minLogLevel="8" minLogLevelLocal="8" />
        </LoggingConfig>

</Container>
 """




def setCDBEnvVar(dirname):
	os.environ["ACS_CDB"]=dirname
	pwd = os.getcwd()
	os.chdir(dirname)
	f=open("setCDB.sh","w")
	f.write("ACS_CDB="+dirname+"\n")
	f.write("export ACS_CDB\n")
	f.close()
	os.chdir(pwd)
	return



def createDir(dirname):
	command="mkdir -p "
	if dirname !="":
		if os.path.exists(dirname):
			print ("dir:",dirname," already exists")
			return True
		else:
			command=command+dirname
			print (command)
			execACSCommand(command)

	else:
		print ("A null dirname was inserted")
		return False
	return True

def createCBDBaseDir(dirname):
	if createDir(dirname):
	  print ("CDB base dir created")
	  return True
	else:
	  print ("error")
	  return False

def createCDBDirs():
	basedir=os.environ["ACS_CDB"]
	print (basedir)
	if basedir=="":
	   print ("ACS_CDB variable is not defined")
	   return False
	else:
		almadir = basedir+"/CDB/alma"
		if createDir(almadir):
			srt="directory:"+almadir+" created"
			print (srt)
		else: 
			print ("error creting directory:",almadir)
		schemadir = basedir+"/CDB/schemas"
		if createDir(schemadir):
			print ("directory:"+schemadir+" created")
		else: 
			print ("error creting directory:"+schemadir)
		macidir = basedir +"/CDB/MACI/{Components,Containers,Managers}"
		if createDir(macidir):
			print ("directory:"+macidir+" created")
		else: 
			print ("error creting directory:"+macidir)

		managerdir = basedir+"/CDB/MACI/Managers/Manager"
		if createDir(managerdir):
			print ("directory:"+managerdir+" created")
		else: 
			print ("error creting directory:"+managerdir)
	   
def createManagerXml():
	basedir=os.environ["ACS_CDB"]
	managerdir = basedir+"/CDB/MACI/Managers/Manager"
	managerfile=managerdir+"/Manager.xml"
	f = open(managerfile,"w")
	f.write(managerxml)
	f.close()

def createJavaContXml(name):
	basedir=os.environ["ACS_CDB"]
	javacontdir = basedir +"/CDB/MACI/Containers/"+name
	if createDir(javacontdir):
		print ("directory:"+javacontdir+" created")
	else: 
		print ("error creting directory:"+javacontdir)
		return False
	javacontfile=javacontdir+"/"+name+".xml"
	f = open(javacontfile,"w")
	f.write(javacontXml)
	f.close()

if __name__=="__main__":
	createCBDBaseDir(sys.argv[1])
	setCDBEnvVar(sys.argv[1])
	createCDBDirs()
	createManagerXml()
	createJavaContXml()

GenDevice/excelIcd.py

0 → 100644
+93 −0
Original line number Diff line number Diff line
import pandas as pd
from datetime import date
import sys,os
from optparse import OptionParser
import openpyxl.utils.exceptions as ecc
# Read the ICD excel file

class excelIcd:
	def __init__(self, excel_file=None):
		self.bookfile =excel_file
		self.book = None
		self.nsheets=0
		self.sheets={}
		self.MainSheet={}
		self.GetSheet={}
		self.SetSheet={}
		self.CmdSheet={}
		self.ModeSheet={}
		self.debug=False
		self._getExcelWorkbook()
	def setDebugModeOn(self):
		debug=True
	def setDebugModeOff(self):
		debug=False
	def _getExcelWorkbook(self):
		try: 
			self.book = pd.ExcelFile(self.bookfile,engine='openpyxl')
		except FileNotFoundError:
			print("File does not exist")
		except ecc.InvalidFileException:
			print(" openpyxl does not support the old .xls file format\n","Trying with xlrd")
		finally:
			self.book = pd.ExcelFile(self.bookfile)
		self.nsheets = len(self.book.sheet_names)
		if(self.debug):
			print(self.nsheets,self.book.sheet_names)
		for sheet_name in (self.book.sheet_names):
			#sheet=self.book.sheet_names[sheet_index]
			self.sheets[sheet_name]=self.book.parse(sheet_name)
			siz=self.sheets[sheet_name].shape
			if(self.debug):
				print(self.sheets[sheet_name].columns,siz[0],siz[1])
		self.getMain()
		self.GetSheet=self.getSheet("GET")
		self.SetSheet=self.getSheet("SET")
		self.CmdSheet=self.getSheet("CMD")
		self.ModeSheet=self.getSheet("MODE")
		

	def getMain(self):
		self.MainSheet["NCols"]=(self.sheets["Main"].shape)[1]
		self.MainSheet["NRows"]=(self.sheets["Main"].shape)[0] -2
		self.MainSheet["Colnames"]= self.sheets["Main"].columns[1:]
		for colind,coname in enumerate (self.sheets["Main"].loc[0]):
			
			#print "CCC",coname
			colval=[]
			if(self.debug):
				print("****",coname,"*****",(str(coname)).replace(' ','_'))
			#colname=(str(coname)).replace(' ','_')
			for idx in range(0,self.MainSheet["NRows"]):
				#print "BBBBB", self.sheets["Main"].cell(idx,colind).value
				colval.append(self.sheets["Main"].iat[idx+1,colind])
				
			self.MainSheet[coname]=colval
			if(self.debug):
				print(coname,self.MainSheet[coname])
		print("Read Sheet: Main"," from:", self.bookfile )
		return self.MainSheet
		
	def getSheet(self, name):
		Sheet={}
		Sheet["NCols"]=(self.sheets[name].shape)[1]
		Sheet["NRows"]=(self.sheets[name].shape)[0] 
		Sheet["Colnames"]= self.sheets[name].columns
		#print(Sheet["Colnames"])
		for colind,coname in enumerate (self.sheets[name]):
			#coname=self.sheets["Main"].cell(1,colind).value
			#print "CCC",coname
			colval=[]
			#colname=(str(coname)).replace(' ','_')
			for idx in range(0,Sheet["NRows"]):
				#print "BBBBB", self.sheets["Main"].cell(idx,colind).value
				colval.append(self.sheets[name].iat[idx,colind])
				
			Sheet[coname]=colval
			#print(coname,Sheet[coname])
		print("Read Sheet:",name," from:", self.bookfile )
		return Sheet



+183 −0
Original line number Diff line number Diff line
#! /usr/bin/env python

from Cheetah.Template import Template
from datetime import date
from GenDevice.excelIcd import excelIcd
import sys,os
from optparse import OptionParser
import subprocess
from GenDevice.genFromTemplates import genFromTemplates
from GenDevice.createEmptyCDB import *
from GenDevice.acsUtils import *

import PySimpleGUI as sg

fnt = 'Arial 18'

def warningWin(txt):
	event, values = sg.Window('*****Warning****',
                  [[sg.Text(txt)],
                  [sg.B('OK'), sg.B('Cancel') ]], size=(400,200),font=fnt ).read(close=True)
	return (event, values)

def generateFiles(opt):
	mygen=genFromTemplates(opt['bookfile'], opt['prefix'],opt['module'],opt['basedir'])
	if mygen.checkIfExists():
		txt="The device files already exists in:\n"+str(mygen.outdir)+"\nOverride existing files?"
		event, value=warningWin(txt)
		if event == 'OK':
			mygen.generateFileInDir()
			return mygen._dirs
		else:
			return None
	else:
		mygen.generateFileInDir()
		return mygen._dirs

def buildCode(dirs):
	pwd=os.getcwd()
	os.chdir(dirs['src'])
	print ("Make Build ")
	command="make clean all"
	print ("Execuiting:",command)
	if execACSCommand(command):
		print ("ERROR executing: ",command,) 
	os.chdir(pwd)	

def readOptions(window,values):
	opt={}
	if not values['-IN-']=="":
		opt['bookfile']=values['-IN-']
	else:
		event, value=warningWin("Input file is not set")
		return None
	if not values['-OUT-']=="":
		opt['basedir']=values['-OUT-']
	else:
		event, value=warningWin("Output dir is not set by user\nDefault value is : ./tmp")
		if event == 'OK':
			opt['basedir']="./tmp"
			window['-OUT-'].update(opt['basedir'])
			window.Refresh()
		else:
			return None
	if not values['-PACK-']=="":
		opt['prefix']=values['-PACK-']
	else:
		event, value=warningWin("Package name set by user.\nDefault value is: astri")
		if event == 'OK':
			opt['prefix']="astri"
			window['-PACK-'].update(opt['prefix'])
			window.Refresh()
		else:
			return None
	if not values['-MOD-']=="":
		opt['module']=values['-MOD-']
	else:
		event, value=warningWin("Module name set by user.\nDefault value is: tcs")
		if event == 'OK':
			opt['module']="tcs"
			window['-MOD-'].update(opt['module'])
			window.Refresh()
		else:
			return None
	return opt
	
def myLayout():
	
	sg.theme('DarkTeal12')    # Keep things interesting for your users

	layout = [[sg.T('Set Input Parameters')],      
          [sg.T('input ICD file',size=(15,1)),sg.I(key='-IN-', size=(60,1),), sg.Button('BrowseFile')], [sg.T('Output Dir',size=(15,1)),      
          sg.I(key='-OUT-',size=(60,1)), sg.Button('BrowseDir')], [sg.T('Package Prefix',size=(15,1))      
          ,sg.I("astri",key='-PACK-',size=(20,1))], [sg.Text('Module Prefix',size=(15,1)),      
          sg.Input("tcs",key='-MOD-',size=(20,1))],
          [sg.Button('Submit'), sg.Button('Generate'), sg.Button('Build'), sg.Exit()],
	  [sg.MLine(key='-ML-', size=(80,20),reroute_stdout=True)], [sg.B('Clear')]]
	return layout

def myWindow(title):
	layout=myLayout()
	window = sg.Window(title, layout,font=fnt, location=(200,100), resizable=True, finalize=True) #size=(500,200)
	return window
def mainLoop(window):
	fnt = 'Arial 18'
	window['Generate'].update(disabled=True)
	window['Build'].update(disabled=True)
	gen=False
	build=False
	genDirs=[]
	while True:                             # The Event Loop
		event, values = window.read() 
		print(event, values)
		if event == sg.WIN_CLOSED or event == 'Exit':
			break
		if event == 'Submit':
			opt=readOptions(window,values)  
			print(opt)
			if not gen:	
				window['Generate'].update(disabled=False)
				window.Refresh()
				gen=True		
		if event == 'BrowseFile':
			fname=sg.popup_get_file('Select ICD file',font=fnt, file_types=(('ALL Files', '*.*'),('old excel Files', '*.xls'),('excel Files', '*.xlsx')),no_window=True)
			window['-IN-'].update(fname)
		if event == 'BrowseDir':
			dname=sg.popup_get_folder('Select Output Base Directory', no_window=True)
			window['-OUT-'].update(dname)	
			window.Refresh()
		if event == 'Generate':
			if not opt==None: 
				print(opt)
				genDirs=generateFiles(opt)
				if not build:	
					window['Build'].update(disabled=False)
					window.Refresh()
					Build=True
			else:
				print("Parameters are not set")
		if event == 'Build':
			if not genDirs==None:
				try:
					buildCode(genDirs)
				except Exception as ex:
					print(ex)
		if event == 'Clear':
			window['-ML-']('')
				

if __name__ =="__main__":
	pwd=os.getcwd()
	gendir=os.environ["PYGEN"]
	if gendir=="":
		print ("Please set the env variable PYGEN = the Geneartor root directory")
		exit()  
	if  not checkACS():
		print ("ACS Enviroment is not set")
		exit()
	introot = os.environ["INTROOT"]
	if introot=="":
		print("INTROOT variable is not set")
		exit()
	
	os.chdir(gendir)
	window=myWindow('Device Code Generator v1.0 by GT@astri')
	mainLoop(window)
	window.close()
	os.chdir(pwd)
	"""	
	    command ="make install"
	    if execACSCommand(command):
	       print ("ERROR executing: ",command)
	       os.chdir(pwd)
	       exit()
	  os.chdir(pwd)
	  
	  command="cdbChecker"
	  if execACSCommand(command):
	    print ("ERROR executing: ",command)
	    exit()
	"""
	print ("ALL Done")