comparison configmix/__init__.py @ 443:23941c014130

FIX: Merge properly when the configuration's __getitem__ do now interpolate: prohibit duplicate interpolation and interpolation while merging
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 10 Dec 2021 09:27:47 +0100
parents fa08713a4992
children 7ff4ee40b36c
comparison
equal deleted inserted replaced
442:94cf5a8722d6 443:23941c014130
429 if k in user: 429 if k in user:
430 if user[k] == constants.DEL_VALUE: 430 if user[k] == constants.DEL_VALUE:
431 # do not copy 431 # do not copy
432 del user[k] 432 del user[k]
433 else: 433 else:
434 user[k] = _merge(user[k], v, filter_comments) 434 if isinstance(user, Configuration):
435 user[k] = _merge(
436 user.getitem_ns(k), v, filter_comments)
437 else:
438 user[k] = _merge(user[k], v, filter_comments)
435 else: 439 else:
436 user[k] = v 440 user[k] = v
437 _filter_deletions(user) 441 _filter_deletions(user)
438 return user 442 return user
439 443
449 if k in user: 453 if k in user:
450 if user[k] == constants.DEL_VALUE: 454 if user[k] == constants.DEL_VALUE:
451 # do not copy 455 # do not copy
452 del user[k] 456 del user[k]
453 else: 457 else:
454 user[k] = _merge(user[k], v, filter_comments) 458 if isinstance(user, Configuration):
459 user[k] = _merge(
460 user.getitem_ns(k), v, filter_comments)
461 else:
462 user[k] = _merge(user[k], v, filter_comments)
455 else: 463 else:
456 user[k] = v 464 user[k] = v
457 return user 465 return user
458 466
459 467
482 if k in user: 490 if k in user:
483 if user[k] == constants.DEL_VALUE: 491 if user[k] == constants.DEL_VALUE:
484 # do not copy 492 # do not copy
485 del user[k] 493 del user[k]
486 else: 494 else:
487 user[k] = _safe_merge(user[k], v, filter_comments) 495 if isinstance(user, Configuration):
496 user[k] = _safe_merge(
497 user.getitem_ns(k), v, filter_comments)
498 else:
499 user[k] = _safe_merge(user[k], v, filter_comments)
488 else: 500 else:
489 user[k] = copy.deepcopy(v) 501 user[k] = copy.deepcopy(v)
490 _filter_deletions(user) 502 _filter_deletions(user)
491 return user 503 return user
492 504
502 if k in user: 514 if k in user:
503 if user[k] == constants.DEL_VALUE: 515 if user[k] == constants.DEL_VALUE:
504 # do not copy 516 # do not copy
505 del user[k] 517 del user[k]
506 else: 518 else:
507 user[k] = _safe_merge(user[k], v, filter_comments) 519 if isinstance(user, Configuration):
520 user[k] = _safe_merge(
521 user.getitem_ns(k), v, filter_comments)
522 else:
523 user[k] = _safe_merge(user[k], v, filter_comments)
508 else: 524 else:
509 user[k] = copy.deepcopy(v) 525 user[k] = copy.deepcopy(v)
510 return user 526 return user
511 527
512 528
518 534
519 """ 535 """
520 if not isinstance(d, dict): 536 if not isinstance(d, dict):
521 return 537 return
522 # use a copy of the keys because we change `d` while iterating 538 # use a copy of the keys because we change `d` while iterating
523 for k in list(d.keys()): 539 if isinstance(d, Configuration):
524 if _is_comment(k): 540 for k in list(d.keys()):
525 del d[k] 541 if _is_comment(k):
526 else: 542 del d[k]
527 if isinstance(d[k], dict): 543 else:
528 _filter_comments(d[k]) 544 dk = d.getitem_ns(k)
545 if isinstance(dk, dict):
546 _filter_comments(dk)
547 else:
548 for k in list(d.keys()):
549 if _is_comment(k):
550 del d[k]
551 else:
552 if isinstance(d[k], dict):
553 _filter_comments(d[k])
529 554
530 555
531 def _is_comment(k): 556 def _is_comment(k):
532 for i in constants.COMMENTS: 557 for i in constants.COMMENTS:
533 try: 558 try:
546 571
547 """ 572 """
548 if not isinstance(d, dict): 573 if not isinstance(d, dict):
549 return 574 return
550 # use a copy of the items because we change `d` while iterating 575 # use a copy of the items because we change `d` while iterating
551 for k, v in list(d.items()): 576 if isinstance(d, Configuration):
552 if v == constants.DEL_VALUE: 577 for k, v in list(d.items()):
553 del d[k] 578 if v == constants.DEL_VALUE:
554 else: 579 del d[k]
555 if isinstance(d[k], dict): 580 else:
556 _filter_deletions(d[k]) 581 dk = d.getitem_ns(k)
582 if isinstance(dk, dict):
583 _filter_deletions(dk)
584 else:
585 for k, v in list(d.items()):
586 if v == constants.DEL_VALUE:
587 del d[k]
588 else:
589 if isinstance(d[k], dict):
590 _filter_deletions(d[k])
557 591
558 592
559 # 593 #
560 # Init loader defaults: mode->loader and extension->mode 594 # Init loader defaults: mode->loader and extension->mode
561 # 595 #