Create shell entry point

Create a shell entry point for tosca-parser.

Partially Implements: blueprint tosca-shell-entry-support

Change-Id: If3096c2e67534c080ccbae6a760a2556f00015bd
This commit is contained in:
spzala 2015-11-10 19:53:37 -08:00
parent 46895b33a1
commit 8b99827bad
3 changed files with 92 additions and 56 deletions

View File

@ -22,6 +22,10 @@ classifier =
packages =
toscaparser
[entry_points]
console_scripts =
tosca-parser = toscaparser.shell:main
[build_sphinx]
source-dir = doc/source
build-dir = doc/build

View File

@ -11,19 +11,10 @@
# under the License.
import os
import sys
from toscaparser.tosca_template import ToscaTemplate
from toscaparser.utils.gettextutils import _
import toscaparser.utils.urlutils
from toscaparser import shell as parser_shell
"""
CLI test utility to show how TOSCA Parser can be used programmatically
This is a basic command line test utility showing the entry point in the
TOSCA Parser and how to iterate over parsed template. It can be extended
or modified to fit an individual need.
Test utility to show how TOSCA Parser can be used programmatically
It can be used as,
#python tosca_parser.py --template-file=<path to the YAML template>
@ -37,49 +28,5 @@ e.g.
--template-file=toscaparser/tests/data/CSAR/csar_hello_world.zip
"""
def main():
if len(sys.argv) < 2:
msg = _("The program requires template or CSAR file as an argument. "
"Please refer to the usage documentation.")
raise ValueError(msg)
if "--template-file=" not in sys.argv[1]:
msg = _("The program expects --template-file as first argument. "
"Please refer to the usage documentation.")
path = sys.argv[1].split('--template-file=')[1]
if os.path.isfile(path):
parse(path)
elif toscaparser.utils.urlutils.UrlUtils.validate_url(path):
parse(path, False)
else:
raise ValueError(_("%(path)s is not a valid file.") % {'path': path})
def parse(path, a_file=True):
output = None
tosca = ToscaTemplate(path, None, a_file)
version = tosca.version
if tosca.version:
print ("\nversion:\n" + version)
description = tosca.description
if description:
print ("\ndescription:\n" + description)
inputs = tosca.inputs
if inputs:
print ("\ninputs:")
for input in inputs:
print (input.name)
nodetemplates = tosca.nodetemplates
if nodetemplates:
print ("\nnodetemplates:")
for node in nodetemplates:
print (node.name)
outputs = tosca.outputs
if outputs:
print ("\noutputs:")
for output in outputs:
print (output.name)
if __name__ == '__main__':
main()
parser_shell.main()

85
toscaparser/shell.py Normal file
View File

@ -0,0 +1,85 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import sys
from toscaparser.tosca_template import ToscaTemplate
from toscaparser.utils.gettextutils import _
import toscaparser.utils.urlutils
"""
CLI entry point to show how TOSCA Parser can be used programmatically
This is a basic command line utility showing the entry point in the
TOSCA Parser and how to iterate over parsed template. It can be extended
or modified to fit an individual need.
It can be used as,
#tosca-parser --template-file=<path to the YAML template>
#tosca-parser --template-file=<path to the CSAR zip file>
#tosca-parser --template-file=<URL to the template or CSAR>
e.g.
#tosca-parser
--template-file=toscaparser/tests/data/tosca_helloworld.yaml
#tosca-parser
--template-file=toscaparser/tests/data/CSAR/csar_hello_world.zip
"""
def main():
if len(sys.argv) < 2:
msg = _("The program requires template or CSAR file as an argument. "
"Please refer to the usage documentation.")
raise ValueError(msg)
if "--template-file=" not in sys.argv[1]:
msg = _("The program expects --template-file as first argument. "
"Please refer to the usage documentation.")
path = sys.argv[1].split('--template-file=')[1]
if os.path.isfile(path):
parse(path)
elif toscaparser.utils.urlutils.UrlUtils.validate_url(path):
parse(path, False)
else:
raise ValueError(_("%(path)s is not a valid file.") % {'path': path})
def parse(path, a_file=True):
output = None
tosca = ToscaTemplate(path, None, a_file)
version = tosca.version
if tosca.version:
print ("\nversion: " + version)
description = tosca.description
if description:
print ("\ndescription: " + description)
inputs = tosca.inputs
if inputs:
print ("\ninputs:")
for input in inputs:
print ("\t" + input.name)
nodetemplates = tosca.nodetemplates
if nodetemplates:
print ("\nnodetemplates:")
for node in nodetemplates:
print ("\t" + node.name)
outputs = tosca.outputs
if outputs:
print ("\noutputs:")
for output in outputs:
print ("\t" + output.name)
if __name__ == '__main__':
main()