Skip to content

Add yin plugin#41

Open
ljbevemyr wants to merge 1 commit into
mbj4668:masterfrom
ljbevemyr:add_yin_plugin
Open

Add yin plugin#41
ljbevemyr wants to merge 1 commit into
mbj4668:masterfrom
ljbevemyr:add_yin_plugin

Conversation

@ljbevemyr

Copy link
Copy Markdown
Contributor

This commit adds the yin plugin which generates YIN from the input YANG
model, along with tests to compare the Pyang YIN plugin.

Two different options are available for the plugin:

  • pretty strings, will print strings on multiple lines
  • canonical, prints elements in canonical order

This commit adds the yin plugin which generates yin from the input YANG
model, along with tests to compare the Pyang YIN plugin.

Two different options are available for the plugin:
- pretty strings, will print strings on multiple lines
- canonical, prints elements in canonical order
@fnchooft

fnchooft commented Sep 7, 2021

Copy link
Copy Markdown
Contributor

Evening Lisa, great to see yin-support coming to yanger!
The only observation is the generation of xml-elements from imported yang models such as tailf-common.yang with prefix 'tailf'. In this case the implementation is using the modulename instead of the prefix.

I attempted a quick fix:

diff --git a/plugins/yanger_yin.erl b/plugins/yanger_yin.erl
index cdd91c0..a90f010 100644
--- a/plugins/yanger_yin.erl
+++ b/plugins/yanger_yin.erl
@@ -104,6 +104,7 @@ emit_stmts([], _Lvl, _S) ->
     ok;
 emit_stmts([Stmt|Stmts], Lvl, S) ->
     OutF = S#state.outf,
+    Ctx = S#state.ctx,
     Keyword = yang:stmt_keyword(Stmt),
     emit_stmt_keyword(Keyword, Lvl, S),
     YinElement = emit_stmt_arg(yang:stmt_arg(Stmt), Lvl, S, Keyword),
@@ -121,7 +122,14 @@ emit_stmts([Stmt|Stmts], Lvl, S) ->
                         {S, SubStmts0}
                 end,
             emit_stmts(SubStmts, Lvl+1, NewS),
-            KeywordStr = make_str(Keyword),
+            KeywordStr = case is_tuple(Keyword) of
+                true ->
+                    {ModuleName, Key} = Keyword,
+                    Prefix  = search_for_prefix(ModuleName,Ctx),
+                    make_str({Prefix,Key});
+                _ ->
+                    make_str(Keyword)
+            end,
             OutF([indent(Lvl),ot(),fs(),KeywordStr,ct(),nl()])
     end,
     emit_stmts(Stmts, Lvl, NewS).
@@ -146,7 +154,8 @@ emit_stmt_arg(Arg, Lvl, S, Keyword) ->
     if is_tuple(Keyword) ->
             {Type, YinElement} = search_for_extension(Keyword, Ctx),
             if YinElement ->
-                    {Prefix, _} = Keyword,
+                    {ModuleName, _} = Keyword,
+                    Prefix  = search_for_prefix(ModuleName,Ctx),
                     TypeStr = make_str({Prefix, Type});
                true ->
                     TypeStr = make_str(Type)
@@ -243,6 +252,20 @@ search_for_namespace(undefined, Mod, Ctx) ->
 search_for_namespace(Namespace, _Mod, _Ctx) ->
     Namespace.
 
+
+search_for_prefix(ModuleName, Ctx) ->
+    Target = yang:search_module(Ctx, ModuleName, undefined),
+    case Target of
+        {true, _, TargetMod} ->
+            make_str(TargetMod#module.prefix);
+        _ ->
+            undefined
+    end.
+
+
+
+
+
 module_arg_imports(_S, _Ctx, [], _Indent) ->
     skip;
 module_arg_imports(S, Ctx, [Import|Imports], Indent) ->

And this produces valid xml-files where the prefixes are correctly used as namespace.

Kind regards, and thanks for this great plugin!

@mbj4668

mbj4668 commented Dec 9, 2021

Copy link
Copy Markdown
Owner

Sorry for the late response... @fnchooft perhaps you can do a new PR from your branch, with this fix?

@fnchooft

Copy link
Copy Markdown
Contributor

Hi @mbj4668 - I have added a patch-request with the fixes for the yin-plugin. Apologies for the delay - but vacation was needed after 2021! :)

@fnchooft

fnchooft commented Mar 4, 2022

Copy link
Copy Markdown
Contributor

I believe this patch entered into main-branch after applied fixes.
The only thing that would need to be rebased is the xml-skeleton addition from @ljbevemyr in order to have all the functionality complete.

@ljbevemyr

Copy link
Copy Markdown
Contributor Author

Hi @fnchooft, thank you for adding patch to the yin-plugin! I will rebase the xml-skeleton.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants