diff options
author | Arpit Gupta <guptarpit1997@gmail.com> | 2019-12-19 22:48:00 +0530 |
---|---|---|
committer | Marcus Müller <mmueller@gnuradio.org> | 2019-12-19 18:18:00 +0100 |
commit | 116f0401f54e4c8483952118c013b8c668eb3682 (patch) | |
tree | c4362ba8274ff68d78f8179603d3173481134775 /gr-utils/python/modtool/cli/makeyaml.py | |
parent | f3dcc45afea4fafa84b0c0e861031105a67bbaf2 (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.py | 37 |
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 """ |