ForcePilot/src/config/__init__.py

58 lines
1.5 KiB
Python
Raw Normal View History

import os
import json
import yaml
import logging
logger = logging.getLogger(__name__)
class SimpleConfig(dict):
def __key(self, key):
return "" if key is None else key.lower()
def __str__(self):
return json.dumps(self)
def __setattr__(self, key, value):
self[self.__key(key)] = value
def __getattr__(self, key):
return self.get(self.__key(key))
def __getitem__(self, key):
return super().get(self.__key(key))
def __setitem__(self, key, value):
return super().__setitem__(self.__key(key), value)
class Config(SimpleConfig):
def __init__(self, filename=None):
super().__init__()
self.filename = filename
### startup
self.mode = "cli"
self.stream = False
self.load()
def load(self):
if self.filename is not None and os.path.exists(self.filename):
if self.filename.endswith(".json"):
with open(self.filename, 'r') as f:
self.update(json.load(f))
elif self.filename.endswith(".yaml"):
with open(self.filename, 'r') as f:
self.update(yaml.safe_load(f))
else:
logger.warning(f"Config file {self.filename} not found")
def save(self):
if self.filename is not None:
with open(self.filename, 'w') as f:
json.dump(self, f, indent=4)
logger.info(f"Config file {self.filename} saved")