diff --git a/mkdocs.yml b/mkdocs.yml index 38ce866..9f9f6f5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -7,8 +7,13 @@ theme: name: material logo: images/logo.png favicon: images/favicon.ico + font: + text: Arimo # Google font, replaces the default Arial features: - content.code.annotate + - content.code.copy # Copy button on top right of code blocks + - navigation.expand # Expand navigation menus by default +# - navigation.tabs # Enable tabs on top https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-tabs palette: - media: "(prefers-color-scheme: light" scheme: default @@ -23,19 +28,24 @@ theme: markdown_extensions: - abbr - - admonition - - pymdownx.details + - admonition # Info boxes + - pymdownx.details # Info boxes - pymdownx.highlight - - pymdownx.superfences + - pymdownx.superfences # Info boxes, tabs - pymdownx.emoji: - emoji_index: !!python/name:materialx.emoji.twemoji # https://emojipedia.org/twitter/ - emoji_generator: !!python/name:materialx.emoji.to_svg - - tables + emoji_index: !!python/name:material.extensions.emoji.twemoji # https://emojipedia.org/twitter/ + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - tables # Create tables in Markdown by using a simple syntax + - mdx_truly_sane_lists # 2-space indented nested lists + - attr_list # More functionality for images (align, lazy load, etc.) + - md_in_html # MD/HTML interop. Also helps with images (caption, center alignment) plugins: - - search + - search # Search box at the top + - glightbox # Image lightbox (for zooming). Requires `mkdocs-glightbox` package -dev_addr: 127.0.0.1:7000 +dev_addr: 127.0.0.1:7007 # Default 8000 may compete with other frameworks +site_url: https://github.com/joaonc/hd_active repo_url: https://github.com/joaonc/hd_active copyright: Copyright © 2024 Joao Coelho diff --git a/pyproject.toml b/pyproject.toml index f63dadc..f466ee1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,15 +6,14 @@ target-version = ['py311'] skip-string-normalization = true extend-exclude=''' ( - app/ui/forms + src/hd_active/ui/forms | \.venv.* | \venv.* ) ''' [tool.isort] -extend_skip = ['app/ui/forms'] -known_first_party = 'app' +extend_skip = ['src/hd_active/ui/forms'] profile = 'black' sections = 'FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER' skip_glob = ['**/.venv*', '**/venv*', '/build'] diff --git a/setup.cfg b/setup.cfg index 502c0a8..090f019 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ # Configuration for tools that don't support `pyproject.toml`. [flake8] -exclude = .git,.github,.venv*,venv*,__pycache__,assets,app/ui/forms,docs,site +exclude = .git,.github,.venv*,venv*,__pycache__,assets,src/hd_active/ui/forms,docs,site max-line-length = 100 # Errors being ignored: diff --git a/app/__init__.py b/src/__init__.py similarity index 100% rename from app/__init__.py rename to src/__init__.py diff --git a/app/ui/__init__.py b/src/hd_active/__init__.py similarity index 100% rename from app/ui/__init__.py rename to src/hd_active/__init__.py diff --git a/app/hd_action_state.py b/src/hd_active/hd_action_state.py similarity index 100% rename from app/hd_action_state.py rename to src/hd_active/hd_action_state.py diff --git a/app/hd_active.py b/src/hd_active/hd_active.py similarity index 97% rename from app/hd_active.py rename to src/hd_active/hd_active.py index fced0b1..b85cf63 100644 --- a/app/hd_active.py +++ b/src/hd_active/hd_active.py @@ -7,7 +7,7 @@ from pathlib import Path from typing import Deque, Iterable, Optional, Set, Union -from app.hd_action_state import HdActionState +from src.hd_active.hd_action_state import HdActionState FILE_NAME = '_hd_active.txt' logger = logging.getLogger(__name__) @@ -148,7 +148,7 @@ def change_state(self) -> HdActionState: import argparse import sys - from app.hd_active_config import HdActiveConfig + from src.hd_active.hd_active_config import HdActiveConfig parser = argparse.ArgumentParser(description='Keep HDs active.') parser.add_argument( diff --git a/app/hd_active_config.py b/src/hd_active/hd_active_config.py similarity index 100% rename from app/hd_active_config.py rename to src/hd_active/hd_active_config.py diff --git a/app/main.py b/src/hd_active/main.py similarity index 84% rename from app/main.py rename to src/hd_active/main.py index f340ca9..b3f5785 100644 --- a/app/main.py +++ b/src/hd_active/main.py @@ -2,8 +2,8 @@ from PySide6 import QtGui, QtWidgets -from app.ui.system_tray_icon import SystemTrayIcon -from app.utils import get_asset +from src.hd_active.ui.system_tray_icon import SystemTrayIcon +from src.hd_active.utils import get_asset def main(): diff --git a/app/ui/forms/__init__.py b/src/hd_active/ui/__init__.py similarity index 100% rename from app/ui/forms/__init__.py rename to src/hd_active/ui/__init__.py diff --git a/src/hd_active/ui/forms/__init__.py b/src/hd_active/ui/forms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/ui/forms/log_ui.py b/src/hd_active/ui/forms/log_ui.py similarity index 92% rename from app/ui/forms/log_ui.py rename to src/hd_active/ui/forms/log_ui.py index 6205dbe..43f6ae4 100644 --- a/app/ui/forms/log_ui.py +++ b/src/hd_active/ui/forms/log_ui.py @@ -18,9 +18,9 @@ QPoint, QRect, QSize, + Qt, QTime, QUrl, - Qt, ) from PySide6.QtGui import ( QBrush, @@ -40,7 +40,14 @@ QRadialGradient, QTransform, ) -from PySide6.QtWidgets import QApplication, QDialog, QPushButton, QSizePolicy, QTextBrowser, QWidget +from PySide6.QtWidgets import ( + QApplication, + QDialog, + QPushButton, + QSizePolicy, + QTextBrowser, + QWidget, +) class Ui_LogDialog(object): diff --git a/app/ui/forms/settings_ui.py b/src/hd_active/ui/forms/settings_ui.py similarity index 100% rename from app/ui/forms/settings_ui.py rename to src/hd_active/ui/forms/settings_ui.py index 619031a..ee8fc77 100644 --- a/app/ui/forms/settings_ui.py +++ b/src/hd_active/ui/forms/settings_ui.py @@ -18,9 +18,9 @@ QPoint, QRect, QSize, + Qt, QTime, QUrl, - Qt, ) from PySide6.QtGui import ( QBrush, diff --git a/app/ui/log_dialog.py b/src/hd_active/ui/log_dialog.py similarity index 86% rename from app/ui/log_dialog.py rename to src/hd_active/ui/log_dialog.py index 7ae1de3..dc66f32 100644 --- a/app/ui/log_dialog.py +++ b/src/hd_active/ui/log_dialog.py @@ -1,7 +1,7 @@ from PySide6 import QtGui, QtWidgets -from app.hd_active import HdActive -from app.ui.forms.log_ui import Ui_LogDialog +from src.hd_active.hd_active import HdActive +from src.hd_active.ui.forms.log_ui import Ui_LogDialog class LogDialog(QtWidgets.QDialog): diff --git a/app/ui/settings_dialog.py b/src/hd_active/ui/settings_dialog.py similarity index 89% rename from app/ui/settings_dialog.py rename to src/hd_active/ui/settings_dialog.py index 4b2e174..567805d 100644 --- a/app/ui/settings_dialog.py +++ b/src/hd_active/ui/settings_dialog.py @@ -2,10 +2,10 @@ from PySide6 import QtGui, QtWidgets -from app.hd_active import HdActive -from app.ui.forms.settings_ui import Ui_Dialog -from app.ui.log_dialog import LogDialog -from app.utils import get_asset +from src.hd_active.hd_active import HdActive +from src.hd_active.ui.forms.settings_ui import Ui_Dialog +from src.hd_active.ui.log_dialog import LogDialog +from src.hd_active.utils import get_asset class SettingsDialog(QtWidgets.QDialog): diff --git a/app/ui/system_tray_icon.py b/src/hd_active/ui/system_tray_icon.py similarity index 90% rename from app/ui/system_tray_icon.py rename to src/hd_active/ui/system_tray_icon.py index c27b4da..a48fc7b 100644 --- a/app/ui/system_tray_icon.py +++ b/src/hd_active/ui/system_tray_icon.py @@ -2,10 +2,10 @@ from PySide6 import QtWidgets -from app.hd_active import HdActive -from app.hd_active_config import HdActiveConfig -from app.ui.settings_dialog import SettingsDialog -from app.utils import is_truthy +from src.hd_active.hd_active import HdActive +from src.hd_active.hd_active_config import HdActiveConfig +from src.hd_active.ui.settings_dialog import SettingsDialog +from src.hd_active.utils import is_truthy HD_ACTION_DEBUG = is_truthy(os.getenv('HD_ACTION_DEBUG', 'True')) """ diff --git a/app/utils.py b/src/hd_active/utils.py similarity index 91% rename from app/utils.py rename to src/hd_active/utils.py index bf96a83..7965932 100644 --- a/app/utils.py +++ b/src/hd_active/utils.py @@ -1,7 +1,7 @@ from pathlib import Path from typing import Any -PROJECT_ROOT = Path(__file__).parents[1].resolve() +PROJECT_ROOT = Path(__file__).parents[2].resolve() ASSETS_ROOT = PROJECT_ROOT / 'assets' diff --git a/tasks.py b/tasks.py index 375e735..7654734 100644 --- a/tasks.py +++ b/tasks.py @@ -3,7 +3,7 @@ from invoke import Collection, Exit, task -from app.utils import get_asset +from src.hd_active.utils import get_asset os.environ.setdefault('INVOKE_RUN_ECHO', '1') # Show commands by default @@ -94,7 +94,7 @@ def ui_py(c, file=None): f'File "{file}" not found. Available files: ", ".join(p.stem for p in UI_FILES)' ) - py_file_path = PROJECT_ROOT / 'app/ui/forms' / f'{file_stem}_ui.py' + py_file_path = PROJECT_ROOT / 'src/hd_activehd_active/ui/forms' / f'{file_stem}_ui.py' c.run(f'pyside6-uic {ui_file_path} -o {py_file_path}') diff --git a/tests/test_hd_active.py b/tests/test_hd_active.py index d38594b..9670c30 100644 --- a/tests/test_hd_active.py +++ b/tests/test_hd_active.py @@ -6,8 +6,8 @@ import pytest -from app.hd_action_state import HdActionState -from app.hd_active import HdActive +from src.hd_active.hd_action_state import HdActionState +from src.hd_active.hd_active import HdActive WAIT = 0.1 WAIT_TEST = 2 * WAIT @@ -22,7 +22,7 @@ def __init__(self, drive_paths=None, run=False, wait=WAIT): super().__init__(drive_paths, run, wait=wait) -@patch('app.hd_active.HdActive._write_hd', return_value=1000) +@patch('src.hd_active.hd_active.HdActive._write_hd', return_value=1000) class TestHdActive: def test_instantiate_not_started(self, mock_write_hd): hd_active = HdActiveTest(drive_paths=['z'], run=False) diff --git a/tests/test_hd_active_config.py b/tests/test_hd_active_config.py index 4b112ad..40e4052 100644 --- a/tests/test_hd_active_config.py +++ b/tests/test_hd_active_config.py @@ -3,7 +3,7 @@ import pytest -from app.hd_active_config import HdActiveConfig +from src.hd_active.hd_active_config import HdActiveConfig @pytest.fixture @@ -19,7 +19,7 @@ def config_file(request, tmp_path) -> Tuple[str, List[str]]: return str(file), request.param[1] -@patch('app.hd_active_config.configparser.ConfigParser.read') +@patch('src.hd_active.hd_active_config.configparser.ConfigParser.read') def test_defaults(read_mock): """ Skip reading file (so defaults are not overwritten) and verify defaults. diff --git a/tests/test_utils.py b/tests/test_utils.py index 5b9a575..a558470 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,6 +1,14 @@ import pytest -from app.utils import get_asset, is_truthy +from src.hd_active.utils import get_asset, is_truthy, PROJECT_ROOT, ASSETS_ROOT + + +class TestGlobals: + def test_project_root(self): + assert PROJECT_ROOT.name == 'hd_active' + + def test_assets_root(self): + assert ASSETS_ROOT.name == 'assets' class TestGetAsset: