# coding: utf-8 # Copyright (C) 1994-2018 Altair Engineering, Inc. # For more information, contact Altair at www.altair.com. # # This file is part of the PBS Professional ("PBS Pro") software. # # Open Source License Information: # # PBS Pro is free software. You can redistribute it and/or modify it under the # terms of the GNU Affero General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) any # later version. # # PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # See the GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # Commercial License Information: # # For a copy of the commercial license terms and conditions, # go to: (http://www.pbspro.com/UserArea/agreement.html) # or contact the Altair Legal Department. # # Altair’s dual-license business model allows companies, individuals, and # organizations to create proprietary derivative works of PBS Pro and # distribute them - whether embedded or bundled with other software - # under a commercial license agreement. # # Use of Altair’s trademarks, including but not limited to "PBS™", # "PBS Professional®", and "PBS Pro™" and Altair’s logos is subject to Altair's # trademark licensing policies. """ attr_parser.py will parse xml files also called master attribute files containing all the members of both server and ecl files,and will generate two corresponding files one for server and one for ecl """ import sys import os import re import getopt import string import xml.parsers.expat import xml.dom.minidom import pdb list_ecl = [] list_svr = [] global e_flag global s_flag global ms global me e_flag = 0 s_flag = 0 class switch(object): """ This class provides the functionality which is equivalent to switch/case statements in C. It only needs to be defined once. """ def __init__(self, value): self.value = value self.fall = False def __iter__(self): """Return the match method once, then stop""" yield self.match raise StopIteration def match(self, *args): """Indicate whether or not to enter a case suite""" if self.fall or not args: return True elif self.value in args: # changed for v1.5, see below self.fall = True return True else: return False def fileappend(line): """ fileappend function - (wrapper on top of append for being able to select the file where to write """ global s_flag global e_flag if s_flag == 1 and e_flag == 0: list_svr.append(line) if e_flag == 1 and s_flag == 0: list_ecl.append(line) if e_flag == 0 and s_flag == 0: list_svr.append(line) list_ecl.append(line) return None def getText(efl, sfl): """ getText function - (writes the data stored in lists to file) """ buff1 = "".join(list_svr) buff2 = "".join(list_ecl) for line in buff1: sfl.write(line) for line in buff2: efl.write(line) def add_comma(string): """ add_comma function - (will take Tag values and will put if there is any comma in it) """ buff2 = string.split('\n') for line in buff2: if re.search(r'#', line): line = line.strip(' \t') list_svr.append('\t' + '\t' + line + '\n') elif re.search(r'\n', line): pass else: line = line.strip(' \t') list_svr.append('\t' + '\t' + '\t' + line + ',' + '\n') def attr(masterf, svrf, eclf): """ attr function - (opens the files reads them and using minidom filters relevant data to individual lists) """ from xml.dom import minidom global e_flag global s_flag doc = minidom.parse(masterf) nodes = doc.getElementsByTagName('data') for node in nodes: alist = node.getElementsByTagName('head') for a in alist: list_svr.append ( "/*Disclaimer: This is a machine generated file.*/" + '\n') list_svr.append( "/*For modifying any attribute change corresponding XML file */" + '\n') list_ecl.append( "/*Disclaimer: This is a machine generated file.*/" + '\n') list_ecl.append( "/*For modifying any attribute change corresponding XML file */" + '\n') blist = a.getElementsByTagName('SVR') blist_ecl = a.getElementsByTagName('ECL') for s in blist: text1 = s.childNodes[0].nodeValue text1 = text1.strip(' \t') list_svr.append(text1) for e in blist_ecl: text2 = e.childNodes[0].nodeValue text2 = text2.strip(' \t') list_ecl.append(text2) at_list = node.getElementsByTagName('attributes') for i in at_list: e_flag = 0 s_flag = 0 attr_list = i.childNodes[0].nodeValue inc_name = i.getAttribute('include') list_svr.append( '\n' + inc_name) flag_name = i.getAttribute('flag') if flag_name == 'SVR': s_flag = 1 if flag_name == 'ECL': e_flag = 1 if flag_name == None: e_flag = 0 s_flag = 0 attr_list = attr_list.strip(' \t') fileappend(attr_list) h = None s_mem = None e_mem = None mem_list1 = i.getElementsByTagName('member_name') if mem_list1: bot = mem_list1[0].getElementsByTagName('both') svr = mem_list1[0].getElementsByTagName('SVR') ecl = mem_list1[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue h = h.strip(' \t') fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + h + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_mem = s_mem.strip(' \t') fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + s_mem + ',' + '\n') for e in ecl: e_mem = e.childNodes[0].nodeValue e_mem = e_mem.strip(' \t') fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + e_mem + ',' + '\n') else: sys.exit( "member_name does not exist!" + i.childNodes[0].nodeValue) mem_list2 = i.getElementsByTagName('member_at_decode') if mem_list2: mem = mem_list2[0].childNodes[0].nodeValue mem = mem.strip(' \t') s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_decode does not exist! for Attribute -> " + tmp) mem_list3 = i.getElementsByTagName('member_at_encode') if mem_list3: mem = mem_list3[0].childNodes[0].nodeValue mem = mem.strip(' \t') s_flag = 1 if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_encode does not exist! for Attribute -> " + tmp) mem_list4 = i.getElementsByTagName('member_at_set') s_flag = 1 if mem_list4: mem = mem_list4[0].childNodes[0].nodeValue mem = mem.strip(' \t') if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_set does not exist! for Attribute -> " + tmp) mem_list5 = i.getElementsByTagName('member_at_comp') s_flag = 1 if mem_list5: mem = mem_list5[0].childNodes[0].nodeValue mem = mem.strip(' \t') if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_comp does not exist! for Attribute -> " + tmp) mem_list6 = i.getElementsByTagName('member_at_free') s_flag = 1 if mem_list6: mem = mem_list6[0].childNodes[0].nodeValue mem = mem.strip(' \t') if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_free does not exist! for Attribute -> " + tmp) mem_list7 = i.getElementsByTagName('member_at_action') s_flag = 1 if mem_list7: mem = mem_list7[0].childNodes[0].nodeValue mem = mem.strip(' \t') if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_action does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list8 = i.getElementsByTagName('member_at_flags') if mem_list8: mem = mem_list8[0].childNodes[0].nodeValue bot = mem_list8[0].getElementsByTagName('both') svr = mem_list8[0].getElementsByTagName('SVR') ecl = mem_list8[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue h = h.strip(' \t') fileappend('\t' + '\t' + h + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_mem = s_mem.strip(' \t') s_flag = 1 if re.search(r'^#', s_mem): add_comma(s_mem) else: fileappend('\t' + '\t' + s_mem + ',' + '\n') s_flag = 0 e_flag = 0 for e in ecl: e_mem = e.childNodes[0].nodeValue e_mem = e_mem.strip(' \t') e_flag = 1 fileappend('\t' + '\t' + e_mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_flags does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list9 = i.getElementsByTagName('member_at_type') if mem_list9: mem = mem_list9[0].childNodes[0].nodeValue bot = mem_list9[0].getElementsByTagName('both') svr = mem_list9[0].getElementsByTagName('SVR') ecl = mem_list9[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue h = h.strip(' \t') fileappend('\t' + '\t' + h + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_mem = s_mem.strip(' \t') s_flag = 1 if re.search(r'^#', s_mem): add_comma(s_mem) else: fileappend('\t' + '\t' + s_mem + ',' + '\n') s_flag = 0 e_flag = 0 for e in ecl: e_mem = e.childNodes[0].nodeValue e_mem = e_mem.strip(' \t') e_flag = 1 fileappend('\t' + '\t' + e_mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_type does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list10 = i.getElementsByTagName('member_at_parent') if mem_list10: mem = mem_list10[0].childNodes[0].nodeValue mem = mem.strip(' \t') s_flag = 1 fileappend('\t' + '\t' + mem + '\n' + '\t' + '},') s_flag = 0 else: pass e_flag = 0 s_flag = 0 mem_list11 = i.getElementsByTagName('member_verify_function') if mem_list11: mem = mem_list11[0].childNodes[0].nodeValue ecl = mem_list11[0].getElementsByTagName('ECL') e_mem1 = [] # member_verify_function, will always have only 2 ECL subtags. e_flag = 1 for e in ecl: e_mem1.append(e.childNodes[0].nodeValue.strip(' \t')) fileappend('\t' + '\t' + e_mem1[0] + ',' + '\n') fileappend('\t' + '\t' + e_mem1[1] + '\t' + '\n' + '\t' + '},') e_flag = 0 s_flag = 0 else: pass tail_list = node.getElementsByTagName('tail') for t in tail_list: tail_value = t.childNodes[0].nodeValue if tail_value == None: pass fileappend('\n') tail_both = t.getElementsByTagName('both') tail_svr = t.getElementsByTagName('SVR') tail_ecl = t.getElementsByTagName('ECL') for tb in tail_both: b = tb.childNodes[0].nodeValue b = b.strip(' \t') list_ecl.append(b) list_svr.append(b) for ts in tail_svr: s = ts.childNodes[0].nodeValue s = s.strip(' \t') list_svr.append(s) for te in tail_ecl: e = te.childNodes[0].nodeValue e = e.strip(' \t') list_ecl.append(e) getText(eclf, svrf) def resc_attr(masterf, svrf, eclf): """ resc_attr function - (opens the resc_def file reads them and using minidom filters relevant data to individual lists) """ from xml.dom import minidom global e_flag global s_flag global ms global me doc = minidom.parse(masterf) nodes = doc.getElementsByTagName('data') for node in nodes: alist = node.getElementsByTagName('head') for a in alist: list_svr.append ( "/*Disclaimer: This is a machine generated file.*/" + '\n') list_svr.append( "/*For modifying any attribute change corresponding XML file */" + '\n') list_ecl.append( "/*Disclaimer: This is a machine generated file.*/" + '\n') list_ecl.append( "/*For modifying any attribute change corresponding XML file */" + '\n') blist = a.getElementsByTagName('SVR') blist_ecl = a.getElementsByTagName('ECL') for s in blist: text1 = s.childNodes[0].nodeValue list_svr.append(text1) for e in blist_ecl: text2 = e.childNodes[0].nodeValue list_ecl.append(text2) at_list = node.getElementsByTagName('attributes') for i in at_list: attr_list = i.childNodes[0].nodeValue flag_name = i.getAttribute('flag') macro_name = i.getAttribute('macro') s_flag = 0 e_flag = 0 ms = 0 me = 0 mflg = i.getAttribute('mflag') if flag_name == 'SVR': s_flag = 1 if flag_name == 'ECL': e_flag = 1 if flag_name == None: e_flag = 0 s_flag = 0 if macro_name: ms = 1 me = 1 for case in switch(mflg): if case('SVR'): ms = 1 me = 0 break if case('ECL'): me = 1 ms = 0 break if me == 1 and macro_name != None: list_ecl.append('\n' + macro_name) if ms == 1 and macro_name != None: list_svr.append('\n' + macro_name) fileappend(attr_list) h = None s_mem = None e_mem = None mem_list1 = i.getElementsByTagName('member_name') if mem_list1: mem = mem_list1[0].childNodes[0].nodeValue bot = mem_list1[0].getElementsByTagName('both') svr = mem_list1[0].getElementsByTagName('SVR') ecl = mem_list1[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + h.strip(' \t') + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_mem = s_mem.strip(' \t') fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + s_mem + ',' + '\n') for e in ecl: e_mem = e.childNodes[0].nodeValue e_mem = e_mem.strip(' \t') fileappend( '\n' + '\t' + '{' + '\n' + '\t' + '\t' + e_mem + ',' + '\n') else: sys.exit( "member_name does not exist!" + i.childNodes[0].nodeValue) mem_list2 = i.getElementsByTagName('member_at_decode') if mem_list2: mem = mem_list2[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_decode does not exist! for Attribute -> " + tmp) mem_list3 = i.getElementsByTagName('member_at_encode') if mem_list3: mem = mem_list3[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_encode does not exist! for Attribute -> " + tmp) mem_list4 = i.getElementsByTagName('member_at_set') if mem_list4: mem = mem_list4[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_set does not exist! for Attribute -> " + tmp) mem_list5 = i.getElementsByTagName('member_at_comp') if mem_list5: mem = mem_list5[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_comp does not exist! for Attribute -> " + tmp) mem_list6 = i.getElementsByTagName('member_at_free') if mem_list6: mem = mem_list6[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_free does not exist! for Attribute -> " + tmp) mem_list7 = i.getElementsByTagName('member_at_action') if mem_list7: mem = mem_list7[0].childNodes[0].nodeValue s_flag = 1 # This is not required in ECL files if re.search(r'^#', mem): add_comma(mem) else: fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_action does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list8 = i.getElementsByTagName('member_at_flags') if mem_list8: mem = mem_list8[0].childNodes[0].nodeValue bot = mem_list8[0].getElementsByTagName('both') svr = mem_list8[0].getElementsByTagName('SVR') ecl = mem_list8[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue fileappend('\t' + '\t' + h + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_flag = 1 if re.search(r'^#', s_mem): add_comma(s_mem) else: fileappend('\t' + '\t' + s_mem + ',' + '\n') s_flag = 0 e_flag = 0 for e in ecl: e_mem = e.childNodes[0].nodeValue e_flag = 1 fileappend('\t' + '\t' + e_mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_flags does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list9 = i.getElementsByTagName('member_at_type') if mem_list9: mem = mem_list9[0].childNodes[0].nodeValue bot = mem_list9[0].getElementsByTagName('both') svr = mem_list9[0].getElementsByTagName('SVR') ecl = mem_list9[0].getElementsByTagName('ECL') for b in bot: h = b.childNodes[0].nodeValue fileappend('\t' + '\t' + h + ',' + '\n') for s in svr: s_mem = s.childNodes[0].nodeValue s_flag = 1 if re.search(r'^#', s_mem): add_comma(s_mem) else: fileappend('\t' + '\t' + s_mem + ',' + '\n') e_flag = 0 s_flag = 0 for e in ecl: e_mem = e.childNodes[0].nodeValue e_flag = 1 fileappend('\t' + '\t' + e_mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_type does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list10 = i.getElementsByTagName('member_at_entlim') if mem_list10: mem = mem_list10[0].childNodes[0].nodeValue s_flag = 1 fileappend('\t' + '\t' + mem + ',' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_entlim does not exist! for Attribute -> " + tmp) mem_list11 = i.getElementsByTagName('member_at_struct') if mem_list11: mem = mem_list11[0].childNodes[0].nodeValue s_flag = 1 fileappend('\t' + '\t' + mem + '\n' + '\t' + '},') if ms == 1: fileappend('\n' + '#endif' + '\n') else: if h: tmp = h elif s_mem: tmp = s_mem elif e_mem: tmp = e_mem else: tmp = i.childNodes[0].nodeValue sys.exit( "member_at_struct does not exist! for Attribute -> " + tmp) e_flag = 0 s_flag = 0 mem_list12 = i.getElementsByTagName('member_verify_function') if mem_list12: mem = mem_list12[0].childNodes[0].nodeValue ecl = mem_list12[0].getElementsByTagName('ECL') for e in ecl: e_mem = e.childNodes[0].nodeValue ecl = mem_list12[0].getElementsByTagName('ECL') e_mem1 = [] # member_verify_function, will always have only 2 ECL subtags. e_flag = 1 for e in ecl: e_mem1.append(e.childNodes[0].nodeValue.strip(' \t')) fileappend('\t' + '\t' + e_mem1[0] + ',' + '\n') fileappend('\t' + '\t' + e_mem1[1] + '\t' + '\n' + '\t' + '},') if me == 1: fileappend('\n' + '#endif' + '\n') e_flag = 0 s_flag = 0 else: pass tail_list = node.getElementsByTagName('tail') for t in tail_list: tail_value = t.childNodes[0].nodeValue if tail_value == None: pass fileappend('\n') tail_both = t.getElementsByTagName('both') tail_svr = t.getElementsByTagName('SVR') tail_ecl = t.getElementsByTagName('ECL') for tb in tail_both: b = tb.childNodes[0].nodeValue list_ecl.append(b) list_svr.append(b) for ts in tail_svr: s = ts.childNodes[0].nodeValue list_svr.append(s) for te in tail_ecl: e = te.childNodes[0].nodeValue list_ecl.append(e) getText(eclf, svrf) def main(argv): """ The Main Module starts here- Opens files,and calls appropriate functions based on Object values. """ global SVR_FILE global ECL_FILE global MASTER_FILE global ATTRIBUTE_SCRIPT_ARG if len(sys.argv) == 2: usage() sys.exit(1) try: opts, args = getopt.getopt( argv, "m:s:e:a:h", ["master=", "svr=", "ecl=", "attr=", "help"]) except getopt.error, err: print str(err) usage() sys.exit(1) for opt, arg in opts: if opt in ('-h', "--help"): usage() sys.exit(1) elif opt in ("-m", "--master"): MASTER_FILE = arg elif opt in ("-s", "--svr"): SVR_FILE = arg elif opt in ("-e", "--ecl"): ECL_FILE = arg elif opt in ("-a", "--attr"): ATTRIBUTE_SCRIPT_ARG = arg else: print "Invalid Option!" sys.exit(1) # Error conditions are checked here. if MASTER_FILE is None or not os.path.isfile(MASTER_FILE) or not os.path.getsize(MASTER_FILE) > 0: print "Master file not found or data is not present in File" sys.exit(1) if SVR_FILE is None: SVR_FILE = "attr_def.c" if ECL_FILE is None: ECL_FILE = "ecl_attr_def.c" if ATTRIBUTE_SCRIPT_ARG is None or not str: print "Attribute type is required" sys.exit(1) try: m_file = open(MASTER_FILE) except IOError, err: print str(err) print 'Cannot Open Master File!' sys.exit(1) try: s_file = open(SVR_FILE, 'w') except IOError, err: print str(err) print 'Cannot Open Server File!' sys.exit(1) try: e_file = open(ECL_FILE, 'w') except IOError, err: print str(err) print 'Cannot Open Ecl File!' sys.exit(1) n = str(ATTRIBUTE_SCRIPT_ARG) for case in switch(n): if case('job', 'server', 'node', 'queue', 'sched', 'resv'): attr(m_file, s_file, e_file) break if case('resc'): resc_attr(m_file, s_file, e_file) break if case(): # default, could also just omit condition or 'if True' print "Invalid Object!" # No need to break here, it'll stop anyway m_file.close() s_file.close() e_file.close() def usage(): """ Usage (depicts the usage of the script) """ print "usage: prog -m -s -e -a " if __name__ == "__main__": main(sys.argv[1:])