16718ffe225cdba1bee76203e64786fa0175f4e87Kevin Rocard#!/usr/bin/python2 285d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 37d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner# Copyright (c) 2015, Intel Corporation 4b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# All rights reserved. 585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# 6b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# Redistribution and use in source and binary forms, with or without modification, 7b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# are permitted provided that the following conditions are met: 885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# 9b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 1. Redistributions of source code must retain the above copyright notice, this 10b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# list of conditions and the following disclaimer. 11b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 12b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 2. Redistributions in binary form must reproduce the above copyright notice, 13b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# this list of conditions and the following disclaimer in the documentation and/or 14b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# other materials provided with the distribution. 15b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 16b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 3. Neither the name of the copyright holder nor the names of its contributors 17b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# may be used to endorse or promote products derived from this software without 18b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# specific prior written permission. 19b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# 20b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 24b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 27b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner 317d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagnerimport EddParser 327d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagnerfrom PfwBaseTranslator import PfwBaseTranslator 3385d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 347d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagnerimport argparse 3585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocardimport sys 3685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 377d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagnerclass PfwScriptTranslator(PfwBaseTranslator): 3885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 3985d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard def __init__(self): 407d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner super(PfwScriptTranslator, self).__init__() 417d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 427d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner self._script = [] 437d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 447d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def getScript(self): 457d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner return self._script 467d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 479368eea42a1afb01dd44110582f997115b50e742François Gaffie def _appendCommand(self, *args): 489368eea42a1afb01dd44110582f997115b50e742François Gaffie self._script.append(list(args)) 499368eea42a1afb01dd44110582f997115b50e742François Gaffie 507d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doCreateDomain(self, name): 519368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("createDomain", name) 527d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 537d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doSetSequenceAware(self): 549368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("setSequenceAwareness", self._ctx_domain, "true") 557d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 567d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doAddElement(self, path): 579368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("addElement", self._ctx_domain, path) 587d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 597d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doCreateConfiguration(self, name): 609368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("createConfiguration", self._ctx_domain, name) 617d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 627d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doSetElementSequence(self, paths): 639368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("setElementSequence", self._ctx_domain, self._ctx_configuration, *paths) 647d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 657d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doSetRule(self, rule): 669368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("setRule", self._ctx_domain, self._ctx_configuration, rule) 677d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 687d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner def _doSetParameter(self, path, value): 699368eea42a1afb01dd44110582f997115b50e742François Gaffie self._appendCommand("setConfigurationParameter", self._ctx_domain, self._ctx_configuration, path, value) 7085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 716718ffe225cdba1bee76203e64786fa0175f4e87Kevin Rocardclass ArgparseArgumentParser(object) : 7285d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard """class that parse command line arguments with argparse library 7385d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 7485d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard result of parsing are the class atributs""" 759368eea42a1afb01dd44110582f997115b50e742François Gaffie def __init__(self): 7685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 7785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard myArgParser = argparse.ArgumentParser(description='Process domain scripts.') 7885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 797d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myArgParser.add_argument('input', nargs='?', 807d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner type=argparse.FileType('r'), default=sys.stdin, 817d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner help="the domain script file, default stdin") 8285d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 8385d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard myArgParser.add_argument('-o', '--output', 847d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner type=argparse.FileType('w'), default=sys.stdout, 857d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner help="the output file, default stdout") 8685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 8785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard myArgParser.add_argument('-d', '--debug', 887d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner action='store_true', 897d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner help="print debug warnings") 9085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 917d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myArgParser.add_argument('--output-kind', 927d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner choices=['pfw', 'raw'], 937d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner default='pfw', 947d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner help="output kind; can be either 'raw' (debug only) or 'pfw' (pfw commands; default choice)") 9585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 9685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 9785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard # process command line arguments 9885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard options = myArgParser.parse_args() 9985d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 10085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard # maping to atributs 1017d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner self.input = options.input 1027d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner self.output = options.output 10385d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1047d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner self.debug = options.debug 10585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1067d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner self.output_kind = options.output_kind 10785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 10885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 10985d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# ============== 11085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# main function 11185d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# ============== 11285d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 11385d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocarddef printE(s): 11485d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard """print in stderr""" 1157d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner sys.stderr.write(str(s)) 11685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 11785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocarddef main (): 11885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1197d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner options = ArgparseArgumentParser() 12085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1217d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myparser = EddParser.Parser() 12285d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard try: 1237d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myroot = myparser.parse(options.input, options.debug) 12485d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1257d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner except EddParser.MySyntaxError as ex: 12685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard printE(ex) 12785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard printE("EXIT ON FAILURE") 1287d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner exit(2) 1297d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner 1307d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner if options.output_kind == 'raw': 1317d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner options.output.write(str(myroot)) 1327d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner else: 1337d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner try: 1347d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myroot.propagate() 13585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1367d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner except EddParser.MyPropagationError, ex : 1377d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner printE(ex) 1387d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner printE("EXIT ON FAILURE") 1397d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner exit(1) 14085d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 1417d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner if options.output_kind == 'pfw': 1427d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner translator = PfwScriptTranslator() 1437d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner myroot.translate(translator) 1447d996811c0e80b30a40a5add1f01f0314f2ebef4David Wagner options.output.write("\n".join(translator.getScript())) 14585d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 14685d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard# execute main function if the python interpreter is running this module as the main program 14785d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocardif __name__ == "__main__" : 14885d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard main() 14985d6dd65ad91d04eb847dfbc50b914f3739511e7Kevin Rocard 150