* Initial plan
* feat(cli): implement task subcommand with cross-platform scheduler support
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* docs(cli): add task subcommand documentation
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(cli,task): address review feedback - move task handler to cli, remove defaults, improve fallback status checking
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(task): convert TaskManager class to functions and handle task commands entirely in CLI
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(cli,tests): remove handle_task_command from exports and rename test file
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* feat(task): add enable and disable commands for scheduled tasks
* add task tests
* refactor(task): simplify task command handling and update status retrieval
* update task
* test(task): update subcommand tests to assert exit codes and rename delete to uninstall
* Add unit tests for DDNS task subcommand functionality and enhance existing tests
- Introduced comprehensive unit tests for the DDNS task subcommand, covering help, status, install, enable, disable, delete, and argument handling.
- Added tests for file I/O operations in the ddns.util.fileio module, ensuring proper directory creation, file reading/writing, and error handling.
- Enhanced test coverage for task scheduling functions, including systemd and cron installations, with additional checks for argument handling.
- Updated existing tests to improve compatibility and reliability across different operating systems, particularly for path handling on Windows.
- Refactored task command building tests to ensure correct command generation with various argument types, including lists and boolean flags.
* refactor(task): improve command execution and path handling for DDNS tasks
* remove DEVNULL
* fix(task): ensure proper task interval handling and add sudo for task commands in test script
* add and fix tests
* fix lint
* refactor(cli): organize DDNS arguments into groups and improve task subcommand handling
* fix tests
* +x
* fix py2 and types
* rm sudo
* fix(tests): use sudo for task installation and uninstallation in test script
* update test command
* always force
* fix format
* docs: add task management parameters and usage examples to CLI documentation
* update log
* docs: update CLI task management instructions and examples
* fix py2
* fix task in python2
* fix lint
* refactor tasks
* update tests
* add schtasks-based task scheduler implementation and unit tests
* Enhance scheduler functionality and improve error handling
- Added a 60-second timeout to subprocess calls in BaseScheduler to prevent hanging.
- Improved error logging in BaseScheduler to capture command failures.
- Refactored CronScheduler to remove unnecessary variable initialization.
- Updated SystemdScheduler to handle PermissionError and provide user feedback for permission issues.
- Enhanced file I/O functions in fileio.py to return default values on exceptions.
- Improved unit tests for scheduler classes to ensure robust testing of functionality and error handling.
- Added lifecycle operation tests for SystemdScheduler to validate install, enable, disable, and uninstall processes.
- Ensured consistent status reporting across multiple calls in SystemdScheduler.
- Cleaned up test code for better readability and maintainability.
* fix lint
* Refactor scheduler command execution and enhance error handling in BaseScheduler and LaunchdScheduler tests
* fix tests
* Add unittest configuration to settings and improve SchtasksScheduler error handling
* Refactor code for improved readability and maintainability in various test files and the DnspodProvider class
* Refactor LaunchdScheduler tests for improved readability and error handling
* fix py2
* fix mac launchd test
* fix lint
* fix macos tests
* fix windows test
* patch readme
* update doc
* Update tests/test_scheduler_cron.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Initial plan
* feat(config): add remote HTTP(S) configuration loading support
- Add URL detection in load_config() function to support remote configuration files
- Leverage existing ddns.util.http module for HTTP requests with proxy, SSL, and auth support
- Support embedded authentication in URLs (https://user:pass@host/config.json)
- Maintain full backward compatibility with local file loading
- Skip file existence check for URLs in config path validation
- Add comprehensive test suite with 16 test cases covering various scenarios
- Support all existing configuration formats including v4.1 providers format
- Pass proxy and SSL settings from CLI/environment to HTTP requests
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(config): address code review feedback for remote config loading
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* docs(config): add remote HTTP(S) configuration examples and update README
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(config): Python 2 compatibility and code structure improvements
- Fix Python 2.7 compatibility in test_config_file_remote.py:
- Remove encoding parameter from open() function
- Add proper try/except import for URLError (Python 2/3 compatibility)
- Extract proxy and SSL parameter extraction outside function call in config/__init__.py
- Move remote config example from main README list to CLI usage examples section
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(config,docs): address PR feedback and lint issues
- Remove remote config from README feature list, add as example code instead
- Fix proxy_settings fallback chain in config/__init__.py
- Add HTTP response body logging in config/file.py and fix line length
- Add real integration test for https://ddns.newfuture.cc/tests/config/debug.json
- Fix all flake8 lint issues: remove unused imports, clean whitespace
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* Update ddns/config/file.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix(docs,test,build): update README.en.md, add real remote tests, and improve test skipping logic
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* feat(http): add default user-agent and fix lint issues
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* feat(http): implement default user-agent handling and update related tests
* feat(http): add default User-Agent handling in request function and enhance related tests
* fix(tests): update proxy handling in multi-config tests and improve user agent type check
* fix(http): add retry logic to remote config loading and improve error messages
* chore(tests): update test structure for multi-config functionality
* fix(tests): remove unnecessary CLI argument mock in multi-config test
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat(http): implement proxy list support with fallback mechanism
- Add proxies parameter to request() function for proxy list support
- Maintain backward compatibility with single proxy parameter
- Implement proxy fallback logic that tries each proxy in order
- Update provider base classes to use proxy lists directly
- Add comprehensive tests for proxy list functionality
- Support None in proxy list to represent direct connection
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(http): handle empty proxy list edge case and remove duplicate function definition
- Fix empty proxy list to default to direct connection
- Remove duplicate function definition in request()
- Add test case for empty proxy list scenario
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(tests): correct provider proxy list test mocking
- Fix provider test mocking to use HttpResponse objects
- All proxy list tests now pass correctly
- Provider integration tests verify proxy list functionality
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* fix(lint): resolve flake8 issues - remove whitespace and fix indentation
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(http): remove proxy parameter and implement ProxiesHandler
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(http): implement ProxiesHandler based on ProxyHandler with proxy_open override
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(http): remove proxy wrapper class and string compatibility per feedback
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(http): implement ProxiesHandler with proxy_open override as requested
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
* refactor(http): update endpoint URLs to use HTTP instead of HTTPS for testing
* feat: Add support for proxy settings in configuration
- Introduced a new "proxy" property in the schema to allow HTTP proxy settings in various formats.
- Updated tests to validate the handling of proxy settings, including special values and array formats.
- Enhanced environment variable loading to support proxy configurations, ensuring precedence rules are respected.
- Added tests for multi-provider configurations with independent proxy settings and global proxy overrides.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: New Future <NewFuture@users.noreply.github.com>