From b09327c39e0acc8e8e753efa0cc5d76dcea96fd9 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 15 Jul 2024 20:53:57 +0700 Subject: [PATCH] Setup github actions (#2) --- .github/workflows/test.yml | 40 +++++++++++++++++++ README.md | 1 + zapusk/client/__main__.py | 42 ++++++++++++++------ zapusk/client/command_manager.py | 4 +- zapusk/client/command_testcase.py | 15 +++++++ zapusk/services/scheduler_service/service.py | 3 +- 6 files changed, 88 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e69de29..921a101 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -0,0 +1,40 @@ +name: Test + +on: + push: + branches: + - '*' + - '!master' + +env: + PYTHON_VERSION: 3.12.4 + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.12'] + + name: Python ${{ matrix.python-version }} test + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: install poetry + run: pip install poetry + + - name: install deps + run: poetry install + + - name: test + run: poetry run pytest --cache-clear --cov=zapusk | tee pytest-coverage.txt + + - name: Pytest coverage comment + if: matrix.python-version == '3.12' + uses: MishaKav/pytest-coverage-comment@main + with: + pytest-coverage-path: ./pytest-coverage.txt diff --git a/README.md b/README.md index a68a3fe..6040459 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Zapusk is a job runner for desktop environments. It helps you manage background tasks with features like pre-configured job execution, background shell commands, scheduling with cron-like syntax, log tailing, and notifications. It also provides detailed JSON output for easy data manipulation and analysis. + ## Key Features - **Preconfigured Jobs:** Run jobs defined in your configuration files. diff --git a/zapusk/client/__main__.py b/zapusk/client/__main__.py index c5fcb5c..8cf790c 100644 --- a/zapusk/client/__main__.py +++ b/zapusk/client/__main__.py @@ -5,20 +5,20 @@ from zapusk.models.job import JOB_STATE_ENUM -doc = """zapusk-client +doc = """zapusk Usage: - zapusk-client -h | --help - zapusk-client --version - zapusk-client run [--colors|--no-colors] [--tail] - zapusk-client exec [--name=] [--group=] [--tail] [--schedule=] [--colors|--no-colors] - zapusk-client cancel [--scheduled] [--colors|--no-colors] - zapusk-client tail - zapusk-client list [--filter=|--scheduled] [--colors|--no-colors] - zapusk-client config_jobs [--colors|--no-colors] - zapusk-client config_groups [--colors|--no-colors] - zapusk-client waybar + zapusk -h | --help + zapusk --version + zapusk run [--colors|--no-colors] [--tail] + zapusk exec [--name=] [--group=] [--tail] [--schedule=] [--colors|--no-colors] + zapusk cancel [--scheduled] [--colors|--no-colors] + zapusk tail + zapusk list [--filter=|--scheduled] [--colors|--no-colors] + zapusk config_jobs [--colors|--no-colors] + zapusk config_groups [--colors|--no-colors] + zapusk waybar Options: @@ -32,8 +32,24 @@ -t --tail Tail logfile immediately Examples: - zapusk run upload_to_s3 - zapusk status + + # Execute npm i in background + zapusk exec "npm i" + + # Execute pytest and tail its log + zapusk exec "pytest -v" -t + + # Schedule command to run every minute + zapusk exec "pung -c4 google.com" --schedule "*/1 * * * *" + + # Run some job defined in ~/.config/zapusk/config.yaml + zapusk run youtube_dl + + # Cancel some job with id + zapusk cancel 42 + + # See logs with id of a job + zapusk tail 42 """ version = importlib.metadata.version("zapusk") diff --git a/zapusk/client/command_manager.py b/zapusk/client/command_manager.py index b83e9d4..6daa023 100644 --- a/zapusk/client/command_manager.py +++ b/zapusk/client/command_manager.py @@ -15,13 +15,13 @@ class CommandManager: def __init__( self, - config_service=ConfigService(), + config_service=None, output=Output(), colors=None, api_client: Optional[ApiClient] = None, ) -> None: self.output = output - self.config_service = config_service + self.config_service = config_service if config_service else ConfigService() config = self.config_service.get_config() self.api_client = ( diff --git a/zapusk/client/command_testcase.py b/zapusk/client/command_testcase.py index 3ae46e1..8a959c5 100644 --- a/zapusk/client/command_testcase.py +++ b/zapusk/client/command_testcase.py @@ -1,13 +1,26 @@ from unittest import TestCase from unittest.mock import MagicMock from zapusk.client.api_client import ApiClient +from testfixtures import TempDirectory + +from zapusk.services.config.service import ConfigService from .output import Output from .command_manager import CommandManager +CONFIG_DATA = "" + + class CommandTestCase(TestCase): def setUp(self) -> None: + self.temp_dir = TempDirectory() + self.config_file = self.temp_dir / "config.yml" + self.config_file.write_text(CONFIG_DATA) + self.config_service = ConfigService( + config_path=f"{self.temp_dir.path}/config.yml" + ) + self.printer = MagicMock() self.output = Output( printer=self.printer, @@ -18,9 +31,11 @@ def setUp(self) -> None: output=self.output, api_client=self.api_client, colors=False, + config_service=self.config_service, ) return super().setUp() def tearDown(self) -> None: + self.temp_dir.cleanup() self.printer.reset_mock() return super().tearDown() diff --git a/zapusk/services/scheduler_service/service.py b/zapusk/services/scheduler_service/service.py index 1d1e6cc..c7b37de 100644 --- a/zapusk/services/scheduler_service/service.py +++ b/zapusk/services/scheduler_service/service.py @@ -9,7 +9,6 @@ logger = logging.getLogger(__name__) -config_service = ConfigService() class SchedulerService: @@ -22,7 +21,7 @@ def __init__( interval: float = 1, ) -> None: self.__interval = interval - self.__config_service = config_service + self.__config_service = config_service if config_service else ConfigService() self.__executor_manager_service = executor_manager_service self.__scheduled_jobs = [j for j in config_service.list_jobs() if j.schedule] logger.info(f"Scheduled jobs detected {[i.id for i in self.__scheduled_jobs]}")