diff --git a/src/rougail/config/__init__.py b/src/rougail/config/__init__.py index 3b5a64f6b..46546503d 100644 --- a/src/rougail/config/__init__.py +++ b/src/rougail/config/__init__.py @@ -25,7 +25,6 @@ details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . """ - from pathlib import Path from tiramisu import Config from ruamel.yaml import YAML @@ -129,11 +128,16 @@ class _RougailConfig: key = RENAMED.get(key, key) option = self.config.option(key) if option.isoptiondescription() and option.isleadership(): - leader = list(value) + if isinstance(value, RConfigLeadership): + leader = value.leader + followers = value.followers + else: + leader = list(value) + followers = value.values() option.leader().value.reset() option.leader().value.set(leader) follower = option.followers()[0] - for idx, val in enumerate(value.values()): + for idx, val in enumerate(followers): self.config.option(follower.path(), idx).value.set(val) elif key == "not_export_with_import": option.value.set(not value) @@ -178,7 +182,7 @@ class _RougailConfig: leader = value else: followers.append(value) - return dict(zip(leader, followers)) + return RConfigLeadership(self.config, option, leader, followers) def parse(self, config) -> str: for option in config: @@ -199,6 +203,42 @@ class _RougailConfig: return values +class RConfigLeadership(): + def __init__(self, config, option, leader, followers): + self.config = config + self.option = option + self.leader = leader + self.followers = followers + + def items(self): + return dict(zip(self.leader, self.followers)).items() + + def __setitem__( + self, + key, + value, + ) -> None: + self.config.property.read_write() + names = self.option.option('names') + leader = names.value.get() + leader.append(key) + names.value.set(leader) + directories = self.option.option('directories', len(leader) - 1) + directories.value.set(value) + self.leader.append(key) + self.followers.append(value) + self.config.property.read_only() + + def __getitem__(self, key): + option = self.option.option(key) + if option.isleader(): + return option.value.get() + return [option.index(idx).value.get() for idx in range(option.value.len())] + + def __repr__(self): + return dict(zip(self.leader, self.followers)) + + class FakeRougailConvert(RougailConvert): def __init__( self, diff --git a/src/rougail/convert/object_model.py b/src/rougail/convert/object_model.py index 93fc74db8..1feb2e9b4 100644 --- a/src/rougail/convert/object_model.py +++ b/src/rougail/convert/object_model.py @@ -28,7 +28,6 @@ from pydantic import ( ConfigDict, ) import tiramisu -from tiramisu.config import get_common_path from ..utils import ( get_jinja_variable_to_param, calc_multi_for_type_variable,