Compare commits

...

6 Commits

Author SHA1 Message Date
Pim van Pelt
cf6d8712fb Simplify gitignore 2025-08-04 11:35:16 +02:00
Pim van Pelt
17c31ce6c9 Remove redundant pytest.ini 2025-08-04 11:33:37 +02:00
Pim van Pelt
d6ecb9e4c9 Simplify clean target 2025-08-04 11:27:02 +02:00
Pim van Pelt
65f732e497 Move run_tests.py directly to 'make test' 2025-08-04 11:24:46 +02:00
Pim van Pelt
4690d13cb4 Simplify clean 2025-08-03 14:51:43 +02:00
Pim van Pelt
41692b7dc1 Add kumacli version and link it into setup.py 2025-08-03 12:39:21 +02:00
9 changed files with 74 additions and 81 deletions

6
.gitignore vendored
View File

@@ -1,8 +1,4 @@
bin
include
lib
lib64
pyvenv.cfg
__pycache__ __pycache__
dist/ dist/
kumacli.egg-info kumacli.egg-info
.pytest_cache

View File

@@ -13,13 +13,8 @@ help:
# Clean build artifacts # Clean build artifacts
clean: clean:
@echo "Cleaning build artifacts..." @echo "Cleaning build artifacts..."
rm -rf build/ rm -rf build/ dist/ src/kumacli.egg-info/
rm -rf dist/ find . -name "*.pyc" -o -name "*.pyo" -delete
rm -rf src/kumacli.egg-info/
rm -rf src/kumacli/__pycache__/
rm -rf src/kumacli/cmd/__pycache__/
find . -name "*.pyc" -delete
find . -name "*.pyo" -delete
find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
@echo "Clean complete." @echo "Clean complete."
@@ -42,7 +37,7 @@ test-deps:
# Test the package # Test the package
test: test:
@echo "Running tests..." @echo "Running tests..."
python3 run_tests.py python3 -m pytest tests/ -v --tb=short
# Rebuild and reinstall (useful during development) # Rebuild and reinstall (useful during development)
dev: clean build dev: clean build

View File

@@ -1,14 +0,0 @@
[tool:pytest]
testpaths = tests
python_files = test_*.py
python_classes = Test*
python_functions = test_*
pythonpath = src
addopts =
-v
--tb=short
--strict-markers
--disable-warnings
filterwarnings =
ignore::DeprecationWarning
ignore::PendingDeprecationWarning

View File

@@ -1,50 +0,0 @@
#!/usr/bin/env python3
"""
Test runner script for kumacli
Usage:
python run_tests.py # Run all tests
python run_tests.py --cov # Run tests with coverage
python run_tests.py tests/test_info.py # Run specific test file
"""
import sys
import subprocess
def run_tests(args=None):
"""Run pytest with optional arguments"""
# Use python3 explicitly for compatibility
cmd = ["python3", "-m", "pytest"]
if args:
cmd.extend(args)
else:
cmd.extend(["tests/", "-v", "--tb=short"])
try:
result = subprocess.run(cmd, check=True)
return result.returncode
except subprocess.CalledProcessError as e:
print(f"Tests failed with exit code: {e.returncode}")
return e.returncode
except FileNotFoundError:
print("pytest not found. Install with: pip install pytest")
return 1
def main():
"""Main entry point"""
if len(sys.argv) > 1:
# Pass through command line arguments
args = sys.argv[1:]
else:
args = None
exit_code = run_tests(args)
sys.exit(exit_code)
if __name__ == "__main__":
main()

View File

@@ -1,13 +1,27 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import re
from setuptools import setup, find_packages from setuptools import setup, find_packages
# Read version directly from version.py file without importing
def get_version():
version_file = os.path.join(os.path.dirname(__file__), 'src', 'kumacli', 'cmd', 'version.py')
with open(version_file, 'r', encoding='utf-8') as f:
content = f.read()
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", content, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")
__version__ = get_version()
with open("README.md", "r", encoding="utf-8") as fh: with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read() long_description = fh.read()
setup( setup(
name="kumacli", name="kumacli",
version="1.3.0", version=__version__,
author="Uptime Kuma CLI", author="Uptime Kuma CLI",
description="A command-line interface for Uptime Kuma", description="A command-line interface for Uptime Kuma",
long_description=long_description, long_description=long_description,

View File

@@ -2,10 +2,10 @@
KumaCLI - A command-line interface for Uptime Kuma KumaCLI - A command-line interface for Uptime Kuma
""" """
__version__ = "1.0.0" from kumacli.kumacli import main
from kumacli.cmd.version import __version__
__author__ = "KumaCLI Team" __author__ = "KumaCLI Team"
__email__ = "info@kumacli.com" __email__ = "info@kumacli.com"
from kumacli.kumacli import main
__all__ = ["main"] __all__ = ["main"]

View File

@@ -0,0 +1,16 @@
#!/usr/bin/env python3
"""Version command implementations for Uptime Kuma CLI."""
__version__ = "1.4.0"
def setup_version_parser(subparsers):
"""Setup version command parser"""
version_parser = subparsers.add_parser("version", help="Show version information")
return version_parser
def handle_version_command(args, client): # pylint: disable=unused-argument
"""Handle version command execution"""
print(f"kumacli {__version__}")
return True

View File

@@ -11,6 +11,7 @@ try:
from .cmd.monitor import setup_monitor_parser, handle_monitor_command from .cmd.monitor import setup_monitor_parser, handle_monitor_command
from .cmd.maintenance import setup_maintenance_parser, handle_maintenance_command from .cmd.maintenance import setup_maintenance_parser, handle_maintenance_command
from .cmd.info import setup_info_parser, handle_info_command from .cmd.info import setup_info_parser, handle_info_command
from .cmd.version import setup_version_parser, handle_version_command
except ImportError: except ImportError:
# Running directly, add parent directory to path # Running directly, add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -21,6 +22,7 @@ except ImportError:
handle_maintenance_command, handle_maintenance_command,
) )
from kumacli.cmd.info import setup_info_parser, handle_info_command from kumacli.cmd.info import setup_info_parser, handle_info_command
from kumacli.cmd.version import setup_version_parser, handle_version_command
def main(): def main():
@@ -44,6 +46,7 @@ def main():
setup_monitor_parser(subparsers) setup_monitor_parser(subparsers)
setup_maintenance_parser(subparsers) setup_maintenance_parser(subparsers)
setup_info_parser(subparsers) setup_info_parser(subparsers)
setup_version_parser(subparsers)
args = parser.parse_args() args = parser.parse_args()
@@ -75,6 +78,8 @@ def main():
success = handle_maintenance_command(args, client) success = handle_maintenance_command(args, client)
elif args.resource == "info": elif args.resource == "info":
success = handle_info_command(args, client) success = handle_info_command(args, client)
elif args.resource == "version":
success = handle_version_command(args, client)
else: else:
parser.print_help() parser.print_help()
sys.exit(1) sys.exit(1)

31
tests/test_version.py Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env python3
import pytest
from unittest.mock import Mock
from kumacli.cmd.version import handle_version_command, __version__
class TestVersionCommand:
def test_handle_version_command(self, mock_client, capsys):
"""Test version command handler"""
# Setup
mock_args = Mock()
# Execute
result = handle_version_command(mock_args, mock_client)
# Verify
assert result is True
captured = capsys.readouterr()
assert f"kumacli {__version__}" in captured.out
def test_version_is_defined(self):
"""Test that version is properly defined"""
assert __version__ is not None
assert isinstance(__version__, str)
assert len(__version__) > 0
# Version should follow semantic versioning pattern (e.g., "1.4.0")
parts = __version__.split(".")
assert len(parts) >= 2 # At least major.minor
assert all(part.isdigit() for part in parts) # All parts should be numeric