@@ -259,16 +259,17 @@ def on_uses(y_module: OrderedDict,
259
259
# trim prefixes in order to the next checks
260
260
trim_uses_prefixes (y_uses )
261
261
262
- # TODO: 'refine' support
263
262
for group in y_grouping :
264
263
if isinstance (y_uses , list ):
265
264
for use in y_uses :
266
265
if group .get ('@name' ) == use .get ('@name' ):
266
+ resolve_refine (group , use )
267
267
ret_attrs .extend (get_leafs (group , group .get ('@name' )))
268
268
ret_attrs .extend (get_leaf_lists (group , group .get ('@name' )))
269
269
ret_attrs .extend (get_choices (y_module , group , conf_mgmt , group .get ('@name' )))
270
270
else :
271
271
if group .get ('@name' ) == y_uses .get ('@name' ):
272
+ resolve_refine (group , y_uses )
272
273
ret_attrs .extend (get_leafs (group , group .get ('@name' )))
273
274
ret_attrs .extend (get_leaf_lists (group , group .get ('@name' )))
274
275
ret_attrs .extend (get_choices (y_module , group , conf_mgmt , group .get ('@name' )))
@@ -401,10 +402,10 @@ def get_mandatory(y_leaf: OrderedDict) -> bool:
401
402
'leaf' 'mandatory' value
402
403
"""
403
404
404
- if y_leaf .get ('mandatory' ) is not None :
405
- return True
405
+ if y_leaf .get ('mandatory' ) is None :
406
+ return False
406
407
407
- return False
408
+ return y_leaf . get ( 'mandatory' ). get ( '@value' ) == 'true'
408
409
409
410
410
411
def get_description (y_entity : OrderedDict ) -> str :
@@ -506,6 +507,58 @@ def get_uses(y_module: OrderedDict,
506
507
return []
507
508
508
509
510
+ def refine_cb (refine : OrderedDict , entity : OrderedDict ):
511
+ if refine .get ('@target-node' ) != entity .get ('@name' ):
512
+ return
513
+
514
+ if refine .get ('description' ) is not None :
515
+ entity ['description' ] = OrderedDict ([('text' , refine .get ('description' ).get ('text' ))])
516
+
517
+ if refine .get ('mandatory' ) is not None :
518
+ entity ['mandatory' ] = OrderedDict ([('@value' , refine .get ('mandatory' ).get ('@value' ))])
519
+
520
+
521
+ def resolve_refine_list (y_uses_refine : OrderedDict , y_entity : OrderedDict ):
522
+ if isinstance (y_uses_refine , list ):
523
+ if isinstance (y_entity , list ):
524
+ for refine in y_uses_refine :
525
+ for e in y_entity :
526
+ refine_cb (refine , e )
527
+ else :
528
+ for refine in y_uses_refine :
529
+ refine_cb (refine , y_entity )
530
+ else :
531
+ if isinstance (y_entity , list ):
532
+ for e in y_entity :
533
+ refine_cb (y_uses_refine , e )
534
+ else :
535
+ refine_cb (y_uses_refine , y_entity )
536
+
537
+
538
+ def resolve_refine (y_group : OrderedDict , y_uses : OrderedDict ):
539
+ """ Check if the YANG 'uses' entity have the 'refine' entity, if so
540
+ this function will override values in 'y_group' using 'refine' values
541
+
542
+ Args:
543
+ y_group: reference to 'grouping'
544
+ y_uses: reference to 'uses'
545
+ """
546
+
547
+ y_uses_refine = y_uses .get ('refine' )
548
+
549
+ if y_uses_refine is None :
550
+ return
551
+
552
+ y_group_leaf = y_group .get ('leaf' )
553
+ y_group_leaf_list = y_group .get ('leaf-list' )
554
+
555
+ if y_group_leaf is not None :
556
+ resolve_refine_list (y_uses_refine , y_group_leaf )
557
+
558
+ if y_group_leaf_list is not None :
559
+ resolve_refine_list (y_uses_refine , y_group_leaf_list )
560
+
561
+
509
562
def get_all_grouping (y_module : OrderedDict ,
510
563
y_uses : OrderedDict ,
511
564
conf_mgmt : ConfigMgmt ) -> list :
0 commit comments