Skip to content

Commit

Permalink
[sonic-cli-gen]
Browse files Browse the repository at this point in the history
Signed-off-by: Stepan Blyschak <stepanb@nvidia.com>
  • Loading branch information
stepanblyschak committed May 14, 2021
1 parent 5784d6c commit 65b125c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 13 deletions.
2 changes: 1 addition & 1 deletion sonic-utilities-data/templates/sonic-cli-gen/config.py.j2
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ def {{ group }}_delete(db, {{ pythonize(object["keys"]) }}):
{# Generate another nesting group in case table holds two types of objects #}
{% if table["dynamic-objects"]|length > 1 %}
{% set group = table.name + "_" + object.name %}
@{{ table.name }}.group(name="{{ cli_name(object.name) }}",
@{{ table.name }}.group(name="{{ cli_name(object.name|replace(table.name + "_", "", 1)) }}",
cls=clicommon.AliasedGroup)
def {{ group }}():
""" {{ object.description }} """
Expand Down
19 changes: 11 additions & 8 deletions sonic_cli_gen/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,25 @@ class CliGenerator:
show, sonic-clear CLI plugins
"""

def __init__(self,
yang_model):
def __init__(self):
""" Initialize PackageManager. """

self.yang_model_name = yang_model
self.loader = jinja2.FileSystemLoader(['/usr/share/sonic/templates/sonic-cli-gen/'])
self.env = jinja2.Environment(loader=self.loader)

def generate_cli_plugin(self, cli_group, plugin_name):
def generate_cli_plugin(self, yang_model_name, cli_group, output_stream=None):
""" Generate CLI plugin. """
parser = YangParser(self.yang_model_name)
parser = YangParser(yang_model_name)
yang_dict = parser.parse_yang_model()
plugin_path = get_cli_plugin_path(cli_group, plugin_name + '_yang.py')
template = self.env.get_template(cli_group + '.py.j2')
with open(plugin_path, 'w') as plugin_py:
plugin_py.write(template.render(yang_dict))

if output_stream is None:
plugin_name = yang_module_name.replace('-', '_')
plugin_path = get_cli_plugin_path(cli_group, plugin_name + '_auto.py')
with open(plugin_path, 'w') as output_stream:
output_stream.write(template.render(yang_dict))
else:
output_stream.write(template.render(yang_dict))

def get_cli_plugin_path(command, plugin_name):
pkg_loader = pkgutil.get_loader(f'{command}.plugins')
Expand Down
8 changes: 4 additions & 4 deletions sonic_cli_gen/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@ def cli(ctx):
@click.pass_context
def generate_config(ctx, yang_model_name):
""" Generate CLI plugin (click) for 'config' CLI group. """
gen = CliGenerator(yang_model_name)
gen.generate_cli_plugin(cli_group='config', plugin_name=yang_model_name)
gen = CliGenerator()
gen.generate_cli_plugin(yang_model_name, cli_group='config', plugin_name=yang_model_name)

@cli.command()
@click.argument('yang_model_name')
@click.pass_context
def generate_show(ctx, yang_model_name):
""" Generate CLI plugin (click) for 'show' CLI group. """
gen = CliGenerator(yang_model_name)
gen.generate_cli_plugin(cli_group='show', plugin_name=yang_model_name)
gen = CliGenerator()
gen.generate_cli_plugin(yang_model_name, cli_group='show', plugin_name=yang_model_name)

if __name__ == '__main__':
cli()

0 comments on commit 65b125c

Please sign in to comment.