fix: load config leadership

This commit is contained in:
egarette@silique.fr 2025-10-29 12:11:55 +01:00
parent 8363580306
commit a3aff66523
2 changed files with 44 additions and 5 deletions

View file

@ -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 <http://www.gnu.org/licenses/>.
"""
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():
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,

View file

@ -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,