79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
"""Silique (https://www.silique.fr)
|
|
Copyright (C) 2022-2026
|
|
|
|
This program is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by the
|
|
Free Software Foundation, either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
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 typing import Optional
|
|
from tiramisu import Config
|
|
from warnings import warn
|
|
|
|
from .convert import RougailConvert
|
|
from ..types import rougail_type
|
|
from ..config import RougailConfig
|
|
from ..user_data import UserData
|
|
from ..tiramisu import tiramisu_display_name
|
|
|
|
|
|
class Rougail(UserData):
|
|
"""Main Rougail object"""
|
|
|
|
def __init__(
|
|
self,
|
|
rougailconfig: Optional[RougailConfig]=None,
|
|
load_from_tiramisu_cache: bool=False,
|
|
) -> None:
|
|
if rougailconfig is None:
|
|
rougailconfig = RougailConfig
|
|
self.rougailconfig = rougailconfig
|
|
self.load_from_tiramisu_cache = load_from_tiramisu_cache and Path(self.rougailconfig["tiramisu_cache"]).is_file()
|
|
types = rougail_type(self.rougailconfig)
|
|
if not self.load_from_tiramisu_cache:
|
|
self.converted = RougailConvert(self.rougailconfig, *types)
|
|
self.config = None
|
|
|
|
def get_root_option(self):
|
|
if not self.load_from_tiramisu_cache:
|
|
tiram_obj = self.converted.save()
|
|
else:
|
|
tiramisu_cache = self.rougailconfig["tiramisu_cache"]
|
|
with open(tiramisu_cache, "r", encoding="utf-8") as tiramisu:
|
|
tiram_obj = tiramisu.read()
|
|
optiondescription = {}
|
|
custom_types = {
|
|
custom.__name__: custom
|
|
for custom in self.rougailconfig["custom_types"].values()
|
|
}
|
|
exec(tiram_obj, custom_types, optiondescription) # pylint: disable=W0122
|
|
return optiondescription["option_0"]
|
|
|
|
def run(self, *, name: Optional[str] = None):
|
|
"""Get Tiramisu Config"""
|
|
if not self.config:
|
|
self.config = Config(
|
|
self.get_root_option(),
|
|
name=name,
|
|
display_name=tiramisu_display_name,
|
|
)
|
|
self.config.property.read_write()
|
|
return self.config
|
|
|
|
def get_config(self):
|
|
warn(
|
|
"get_config is deprecated, use run instead",
|
|
DeprecationWarning,
|
|
stacklevel=2,
|
|
)
|
|
return self.run()
|