diff options
| author | Aeliton G. Silva | 2026-01-12 22:39:55 -0300 |
|---|---|---|
| committer | Aeliton G. Silva | 2026-01-13 04:22:25 -0300 |
| commit | f975144f25d34f97329b2d4e52891061573cea08 (patch) | |
| tree | 226fe223b31af6f217b1dd413629ab2cf26964d4 /src/toolkit/common.py | |
| parent | b8703752ffc7768b0275897b3c2a869ff41504e5 (diff) | |
Use pyproject.toml + uv_build
This replaces setup.py by a modern pyproject.toml using uv_build
backend.
Dependencies are being also managed by uv, so to install dependencies
and run the project one can execute:
```
uv sync
uv run pytest # optional
python -m avp
```
To build the both source and binary (wheel) distribution package run:
```
uv build
```
Uv can be installed with `pip install uv`.
The directory structure has been changed to reflect best practices.
- src/* -> src/avp/
- src/tests -> ../tests
Diffstat (limited to 'src/toolkit/common.py')
| -rw-r--r-- | src/toolkit/common.py | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/src/toolkit/common.py b/src/toolkit/common.py deleted file mode 100644 index e35aba2..0000000 --- a/src/toolkit/common.py +++ /dev/null @@ -1,192 +0,0 @@ -""" -Common functions -""" - -from PyQt6 import QtWidgets -import string -import os -import sys -import subprocess -import logging -from copy import copy -from collections import OrderedDict - - -log = logging.getLogger("AVP.Toolkit.Common") - - -class blockSignals: - """ - Context manager to temporarily block list of QtWidgets from updating, - and guarantee restoring the previous state afterwards. - """ - - def __init__(self, widgets): - if type(widgets) is dict: - self.widgets = concatDictVals(widgets) - else: - self.widgets = widgets if hasattr(widgets, "__iter__") else [widgets] - - def __enter__(self): - log.verbose( - "Blocking signals for %s", - ", ".join([str(w.__class__.__name__) for w in self.widgets]), - ) - self.oldStates = [w.signalsBlocked() for w in self.widgets] - for w in self.widgets: - w.blockSignals(True) - - def __exit__(self, *args): - log.verbose("Resetting blockSignals to %s", str(bool(sum(self.oldStates)))) - for w, state in zip(self.widgets, self.oldStates): - w.blockSignals(state) - - -def concatDictVals(d): - """Concatenates all values in given dict into one list.""" - key, value = d.popitem() - d[key] = value - final = copy(value) - if type(final) is not list: - final = [final] - final.extend([val for val in d.values()]) - else: - value.extend([item for val in d.values() for item in val]) - return final - - -def badName(name): - """Returns whether a name contains non-alphanumeric chars""" - return any([letter in string.punctuation for letter in name]) - - -def alphabetizeDict(dictionary): - """Alphabetizes a dict into OrderedDict""" - return OrderedDict(sorted(dictionary.items(), key=lambda t: t[0])) - - -def presetToString(dictionary): - """Returns string repr of a preset""" - return repr(alphabetizeDict(dictionary)) - - -def presetFromString(string): - """Turns a string repr of OrderedDict into a regular dict""" - return dict(eval(string)) - - -def appendUppercase(lst): - for form, i in zip(lst, range(len(lst))): - lst.append(form.upper()) - return lst - - -def pipeWrapper(func): - """A decorator to insert proper kwargs into Popen objects.""" - - def pipeWrapper(commandList, **kwargs): - if sys.platform == "win32": - # Stop CMD window from appearing on Windows - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - kwargs["startupinfo"] = startupinfo - - if "bufsize" not in kwargs: - kwargs["bufsize"] = 10**8 - if "stdin" not in kwargs: - kwargs["stdin"] = subprocess.DEVNULL - return func(commandList, **kwargs) - - return pipeWrapper - - -@pipeWrapper -def checkOutput(commandList, **kwargs): - return subprocess.check_output(commandList, **kwargs) - - -def disableWhenEncoding(func): - def decorator(self, *args, **kwargs): - if self.encoding: - return - else: - return func(self, *args, **kwargs) - - return decorator - - -def disableWhenOpeningProject(func): - def decorator(self, *args, **kwargs): - if self.core.openingProject: - return - else: - return func(self, *args, **kwargs) - - return decorator - - -def rgbFromString(string): - """Turns an RGB string like "255, 255, 255" into a tuple""" - try: - tup = tuple([int(i) for i in string.split(",")]) - if len(tup) != 3: - raise ValueError - for i in tup: - if i > 255 or i < 0: - raise ValueError - return tup - except: - return (255, 255, 255) - - -def formatTraceback(tb=None): - import traceback - - if tb is None: - import sys - - tb = sys.exc_info()[2] - return "Traceback:\n%s" % "\n".join(traceback.format_tb(tb)) - - -def connectWidget(widget, func): - if type(widget) == QtWidgets.QLineEdit: - widget.textChanged.connect(func) - elif type(widget) == QtWidgets.QSpinBox or type(widget) == QtWidgets.QDoubleSpinBox: - widget.valueChanged.connect(func) - elif type(widget) == QtWidgets.QCheckBox: - widget.stateChanged.connect(func) - elif type(widget) == QtWidgets.QComboBox: - widget.currentIndexChanged.connect(func) - else: - log.warning("Failed to connect %s ", str(widget.__class__.__name__)) - return False - return True - - -def setWidgetValue(widget, val): - """Generic setValue method for use with any typical QtWidget""" - log.verbose("Setting %s to %s" % (str(widget.__class__.__name__), val)) - if type(widget) == QtWidgets.QLineEdit: - widget.setText(val) - elif type(widget) == QtWidgets.QSpinBox or type(widget) == QtWidgets.QDoubleSpinBox: - widget.setValue(val) - elif type(widget) == QtWidgets.QCheckBox: - widget.setChecked(val) - elif type(widget) == QtWidgets.QComboBox: - widget.setCurrentIndex(val) - else: - log.warning("Failed to set %s ", str(widget.__class__.__name__)) - return False - return True - - -def getWidgetValue(widget): - if type(widget) == QtWidgets.QLineEdit: - return widget.text() - elif type(widget) == QtWidgets.QSpinBox or type(widget) == QtWidgets.QDoubleSpinBox: - return widget.value() - elif type(widget) == QtWidgets.QCheckBox: - return widget.isChecked() - elif type(widget) == QtWidgets.QComboBox: - return widget.currentIndex() |
