summaryrefslogtreecommitdiff
path: root/gr-utils/python/modtool/cli/makeyaml.py
diff options
context:
space:
mode:
authorArpit Gupta <guptarpit1997@gmail.com>2019-12-19 22:48:00 +0530
committerMarcus Müller <mmueller@gnuradio.org>2019-12-19 18:18:00 +0100
commit116f0401f54e4c8483952118c013b8c668eb3682 (patch)
treec4362ba8274ff68d78f8179603d3173481134775 /gr-utils/python/modtool/cli/makeyaml.py
parentf3dcc45afea4fafa84b0c0e861031105a67bbaf2 (diff)
Block header parsing tool: GSoC 2019 (#2750)
* Add base.py file in cli module to import override Click functions * Create cli and core base module for AST generation of header blocks * Create basic CLI for blocktool with minimal support * Add Sequence Completer to CLI and successful generation of AST * CLI structure complete with parseheader command * Basic core structure complete * Add test script gr_blocktool to run the tool * Add JSON schema and validation for parsed json output file * Change properties and methods key to list in JSON schema * Create an independent api from blocktool * Bug fix for abslute path of the header files * Create basic parser core api * Parse the block header documentation * Expose the core api, minor bug fixes * Create the code pylint compatible * Modify cli to accept file_path as an argument, parse default values of make function arguments * Fix: Namespace parsing of block header file * Parse the io_signature from the implementation file of the block header * Create json file generator * Add key-value io_signature and docstring in json schema, change sample generated json output * Fix: squash an I/O parsing bug * Change directory structure for blocktool tests * Add Blocktool unittest * Removed empty strings, make the code pylint compatible * Use str.format() to get output * Implement YAML generator * Add a new CLI argument to parse a complete header directory * Add Logger to log errors without raising exceptions * Create output schema file in blocktool core * Change directory structure of blocktool and cli commands * write unittests for Blocktool Excceptions * Add sample yaml files * Simplify blocktool cli structure * Refactor blocktool exception handling * Split long blocktool unit-tests * Parse message ports from the implementation file * Add tests for parsed message port id, update sample json files * Add blocktool subdirectory, files in CMakeLists.txt * Remove test files to run Blocktool * Fix: locates implementation file by traversing the module * Integrate blocktool with modtool as an external plugin * Create proper formatting of io_signature for yaml files * Extend modtool makeyaml command to extend support for blocktool * Remove external plugin for modtool support, add blocktool independent script * Minor formatiing, change function name due to conflict with modtool function * Add support to read and add blocktool special comments in header file * Fix: Key Errors, Modify Documentation Reader * Raise warning in case of conflict in the parsed information and blocktool comments * Remove all the blocktool boilerplate cli code and provide minimal support * Remove gr_blocktool script and use blocktool as a python module * Major refactoring of the modtool cli structure to support the blocktool API * Check for PyGCCXML dependency during build * Add README.md for gr-blocktool and remove modtool cli warnings
Diffstat (limited to 'gr-utils/python/modtool/cli/makeyaml.py')
-rw-r--r--gr-utils/python/modtool/cli/makeyaml.py37
1 files changed, 32 insertions, 5 deletions
diff --git a/gr-utils/python/modtool/cli/makeyaml.py b/gr-utils/python/modtool/cli/makeyaml.py
index 621d444958..8e38f9a3a0 100644
--- a/gr-utils/python/modtool/cli/makeyaml.py
+++ b/gr-utils/python/modtool/cli/makeyaml.py
@@ -24,14 +24,27 @@ from __future__ import print_function
from __future__ import absolute_import
from __future__ import unicode_literals
+import os
import click
-from ..core import get_block_candidates, ModToolMakeYAML
+try:
+ from gnuradio.blocktool import BlockHeaderParser
+ from gnuradio.blocktool.core.base import BlockToolException
+except ImportError:
+ have_blocktool = False
+else:
+ have_blocktool = True
+
+from ..core import get_block_candidates, ModToolMakeYAML, yaml_generator
from ..tools import SequenceCompleter
from .base import common_params, block_name, run, cli_input
@click.command('makeyaml', short_help=ModToolMakeYAML.description)
+@click.option('-b', '--blocktool', is_flag=True,
+ help='Use blocktool support to print yaml output. FILE PATH mandatory if used.')
+@click.option('-o', '--output', is_flag=True,
+ help='If given, a file with desired output format will be generated')
@common_params
@block_name
def cli(**kwargs):
@@ -42,10 +55,24 @@ def cli(**kwargs):
Note: This does not work on python blocks
"""
kwargs['cli'] = True
- self = ModToolMakeYAML(**kwargs)
- click.secho("GNU Radio module name identified: " + self.info['modname'], fg='green')
- get_pattern(self)
- run(self)
+ if kwargs['blocktool']:
+ kwargs['modtool'] = True
+ if kwargs['blockname'] is None:
+ raise BlockToolException('Missing argument FILE PATH with blocktool flag')
+ kwargs['file_path'] = os.path.abspath(kwargs['blockname'])
+ if os.path.isfile(kwargs['file_path']):
+ parse_yml = BlockHeaderParser(**kwargs)
+ parse_yml.run_blocktool()
+ parse_yml.cli = True
+ parse_yml.yaml = True
+ yaml_generator(parse_yml, **kwargs)
+ else:
+ raise BlockToolException('Invalid file path.')
+ else:
+ self = ModToolMakeYAML(**kwargs)
+ click.secho("GNU Radio module name identified: " + self.info['modname'], fg='green')
+ get_pattern(self)
+ run(self)
def get_pattern(self):
""" Get the regex pattern for block(s) to be parsed """