fix: load config leadership
This commit is contained in:
parent
8363580306
commit
a3aff66523
2 changed files with 44 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue