Skip to content
Snippets Groups Projects
Commit 7800bda9 authored by Schmidt, Christoph's avatar Schmidt, Christoph
Browse files

Cleanup repo for version 0.0.2

parent 346f3da0
Branches
Tags 0.0.2
No related merge requests found
[project]
name = "confighandler"
version = "0.0.1"
version = "0.0.2"
authors = [
{ name="Christoph Schmidt", email="cschmidt.fs@gmail.com" },
]
......
import os
from abc import ABC
class VFSObject(ABC):
def __init__(self, file_system_obj: str = None, pref_folder: str = None, keywords: dict = None):
super().__init__()
self._raw_file_system_obj = file_system_obj
self.keywords = keywords
if file_system_obj is None or file_system_obj == "":
raise ValueError("File input can't be None or empty. No file given")
if pref_folder is None or pref_folder == "":
self.pref_folder = "./"
else:
self.pref_folder = pref_folder
self.set_obj(file_system_obj=self._raw_file_system_obj, keywords=keywords)
@property
def filename(self):
return self._raw_file_system_obj
@property
def absolute(self):
return self._abs
@property
def relative(self):
return self._rel
def setup_folder(self):
# Check if the given argument is a file
if os.path.isfile(self.absolute) or "." in self.absolute:
folder = os.path.split(self.absolute)[0]
# joind the splitted string
folder = os.path.join(folder)
else:
folder = self.absolute
if "{" in folder:
print(self.absolute)
raise Exception("Can't set folder for file with keywords in path.")
# Try creating the output directory
if not os.path.exists(folder):
try:
os.makedirs(folder)
except Exception as exc:
print(f"Could not create folder {folder}. Exception: {exc}")
raise exc
# check if the folder exists
try:
if not os.path.exists(folder):
raise FileNotFoundError(f"Folder {folder} does not exist")
except Exception as exc:
print(f"Could not check if folder {folder} exists. Exception: {exc}")
self._folder_set = True
print(f"Folder created: {folder} for "
f" -> \n{self.absolute}\n")
return folder
def create_object(self):
if self._folder_set:
return self
else:
return self.setup_folder()
def set_obj(self, file_system_obj: str = None, keywords: dict = None, pref_folder: str = None):
# Now replace all keywords
if keywords is not None:
self.keywords = {**self.keywords, **keywords}
if file_system_obj is not None:
self._raw_file_system_obj = file_system_obj
if pref_folder is not None:
self.pref_folder = pref_folder
# print(f"Setting pref_folder to {self.pref_folder} for {self.filename}")
self.file_system_obj = self._raw_file_system_obj
self._folder_set = False
self._file = self.file_system_obj
self._file_full = os.path.join(self.pref_folder, self._file)
self._abs = os.path.abspath(self._file_full)
try:
self._rel = os.path.relpath(self._file_full, os.getcwd())
except:
self._rel = self._abs
def __str__(self):
return self.relative
def __repr__(self):
return f"{type(self)}: {self.relative}"
# -*- coding: utf-8 -*-
"""
Author(s): Christoph Schmidt <christoph.schmidt@tugraz.at>
Created: 2023-10-19 12:35
Package Version: 0.0.1
Description:
"""
import logging
import sys
from PySide6.QtGui import QStandardItemModel, QStandardItem
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QTreeView, QPushButton
from confighandler.controller.VAutomatorConfig import VAutomatorConfig
from confighandler.controller.GenericConfig import GenericConfig
class ConfigViewOld(QWidget):
def __init__(self, vaut_config: VAutomatorConfig):
super().__init__()
# Load YAML file
#with open(yaml_file_path, 'r') as f:
self.data = vaut_config
# Create controller and populate with YAML data
self.model = QStandardItemModel()
self._populate_model(self.model, self.data)
# Create view and set controller
self.view = QTreeView()
self.view.setModel(self.model)
self.view.expandAll()
# Connect double-click signal to edit mode
self.view.doubleClicked.connect(self._edit_mode)
# Create textbox and button for value editing
self.textbox = QLineEdit()
self.button = QPushButton('Update')
self.button.clicked.connect(self._update_value)
# Create layout and add widgets
self.layout = QVBoxLayout()
self.layout.addWidget(self.view)
self.layout.addWidget(self.textbox)
self.layout.addWidget(self.button)
# Set widget layout
self.setLayout(self.layout)
def repopulate(self, data):
self.data = data
self.model = QStandardItemModel()
self._populate_model(self.model, data)
self.view.setModel(self.model)
def _populate_model(self, parent, data):
"""
Recursively populate QStandardItemModel with YAML data
"""
if isinstance(data, dict):
for key, value in data.items():
item = QStandardItem(str(key))
parent.appendRow(item)
self._populate_model(item, value)
if isinstance(data, GenericConfig):
for key, value in data.__dict__.items():
item = QStandardItem(str(key))
parent.appendRow(item)
self._populate_model(item, value)
elif isinstance(data, list):
for value in data:
item = QStandardItem(str(value))
parent.appendRow(item)
#self._populate_model(item, str(data))
elif isinstance(data, logging.Logger):
pass
else:
item = QStandardItem(str(data))
parent.appendRow(item)
def _edit_mode(self, index):
"""
Enter edit mode when double-clicked on item
"""
self.view.edit(index)
def _update_value(self):
"""
Update YAML data and controller when button is clicked
"""
# Get selected index
index = self.view.currentIndex()
# Get new value from textbox
new_value = self.textbox.text()
# Update YAML data
self._update_data(self.data, index, new_value)
# Update controller
self.model.clear()
self._populate_model(self.model, self.data)
self.view.expandAll()
def _update_data(self, data, index, new_value):
"""
Recursively update YAML data
"""
if index.column() == 0:
# Update key
key = index.selected_measurements()
data[new_value] = data.pop(key)
else:
# Update value
parent = index.parent().selected_measurements()
if isinstance(data, dict):
data[parent][index.row()] = new_value
elif isinstance(data, list):
data[parent][index.row()] = new_value
# Recursively update child nodes
for row in range(self.model.rowCount(index)):
child_index = self.model.index(row, 0, index)
self._update_data(data, child_index, new_value)
if __name__ == '__main__':
# Initialize Qt application
app = QApplication(sys.argv)
vaut = VAutomatorConfig.load_config("./configs/init_config.yaml")
# Create main window
window = ConfigViewOld(vaut)
window.show()
# Run Qt event loop
sys.exit(app.exec())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment