refactor: modernize to Python 3 with OOP structure and comprehensive tests (#2)

* feat: full upgrade to python3, tests, etc.

* chore: saving the wip state

* chore(lint): fixed pyright errors, tests

* chore(ci): install deps

* chore(lint): fix linting

* chore(lint): more linting fixes

* chore(ci): upgrade workflows

* fix(test): fix tests, tweak editorconfig

* test: add helper path test and stub requests (#4)

* fix: update paths and workflow (#5)

* fix: update python version and improve cross-platform paths (#6)

* fix: resolve MegaLinter YAML and markdown lint failures (#7)

* fix: implement all CodeRabbit review comments (#8)

* fix: apply CodeRabbit auto-fixes

Fixed 3 file(s) based on 3 unresolved review comments.

* fix: resolve MegaLinter editorconfig and pylint/pyright failures (#9)

* feat: migrate to uv-managed project (#10)

* feat: migrate to uv-managed project

* fix: align Python version in pyproject.toml and CI setup-uv config

* fix: ignore uv.lock in editorconfig, disable PYTHON_PYLINT/PYRIGHT in mega-linter, use uv for dep install (#11)

* fix: ignore uv.lock in editorconfig and disable PYTHON_PYLINT/PYRIGHT in mega-linter

* fix: update outdated comment in mega-linter config

* fix: use uv instead of pip to install deps in mega-linter config

* chore(deps): upgrade workflows

* chore(ci): mega-linter config tweaks

* chore(ci): mega-linter config tweaks

* feat(deps): add pyright and pylint with non-overlapping config

Add pyright>=1.1.0 and pylint>=3.0.0 as dev dependencies. Configure
pyright for basic type checking (py3.13) and refine pylint message
disables to avoid overlap with ruff's enabled rule sets.

* feat(ci): re-enable pyright and pylint in mega-linter

Remove PYTHON_PYLINT and PYTHON_PYRIGHT from DISABLE_LINTERS so
mega-linter runs all three linters: ruff, pyright, and pylint.

* fix: resolve pyright/pylint findings and apply ruff formatting

Add encoding="utf-8" to read_text() calls in tests (pylint W1514).
Apply ruff-format double-quote style consistently across both files.

* chore(hooks): add editorconfig-checker and fix lines exceeding 80 chars

Add editorconfig-checker pre-commit hook to catch line-length
violations locally. Shorten docstrings in aeonview.py and
aeonview_test.py that exceeded the 80-character editorconfig limit.
Remove double-quote-string-fixer hook that conflicted with ruff-format.

* fix(ci): configure mega-linter to use project configs for pyright/pylint

Point mega-linter at pyproject.toml for both linters so they use our
config instead of mega-linter's defaults. Add venvPath/venv to pyright
so it resolves imports from the uv-created .venv. Disable pylint
import-error since import checking is handled by pyright.
This commit is contained in:
2026-03-13 15:31:04 +02:00
committed by GitHub
parent 6aa17ba957
commit 2b68767f0d
20 changed files with 2628 additions and 238 deletions

57
.github/CODE_OF_CONDUCT.md vendored Normal file
View File

@@ -0,0 +1,57 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation
in our community a harassment-free experience for everyone, regardless
of age, body size, visible or invisible disability, ethnicity, sex
characteristics, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance,
race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open,
welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment:
- Demonstrating empathy and kindness
- Being respectful of differing opinions
- Gracefully accepting constructive feedback
- Focusing on what is best for the community
Examples of unacceptable behavior:
- The use of sexualized language or imagery
- Trolling, insulting or derogatory comments
- Harassment of any kind
- Publishing others private information
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our
standards and will take appropriate and fair corrective action in
response to any behavior they deem inappropriate.
## Scope
This Code of Conduct applies within all community spaces and also
applies when an individual is officially representing the project.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior
may be reported to the project owner @ivuorinen.
All complaints will be reviewed and investigated and will result in a
response that is deemed necessary and appropriate to the circumstances.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][cc],
version 2.1.
[cc]: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
<!-- vim: ft=md sw=2 ts=2 tw=72 fo=cqt wm=0 et : -->

90
.github/CONTRIBUTING.md vendored Normal file
View File

@@ -0,0 +1,90 @@
# Contributing to aeonview
Thanks for your interest in contributing to **aeonview**!
This guide will help you get started.
## 🛠 Project Setup
1. Clone the repository:
```bash
git clone https://github.com/ivuorinen/aeonview.git
cd aeonview
```
2. Set up your environment:
```bash
uv sync --all-groups
```
3. Install pre-commit hooks:
```bash
uv run pre-commit install
```
## ✅ Development Workflow
- Make sure your changes are **well-tested**.
- Use `make check` to run linting and tests.
- Follow the existing coding style (Ruff will enforce it).
- All new features must include documentation.
## 🧪 Running Tests
```bash
make test
```
## 🧹 Formatting & Linting
```bash
make format # auto-format code
make lint # check for lint errors
```
## ✅ Submitting a Pull Request
1. Create a feature branch:
```bash
git checkout -b feature/my-new-feature
```
2. Commit your changes:
```bash
git add .
git commit -m "feat: add support for X"
```
3. Push and open a pull request:
```bash
git push origin feature/my-new-feature
```
4. Follow the PR template and link any relevant issues.
## 📋 Commit Message Guidelines
Use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/):
Examples:
- `feat: add monthly video generation`
- `fix: handle invalid date error`
- `docs: update usage instructions`
## 🙏 Code of Conduct
We expect contributors to follow our [Code of Conduct](CODE_OF_CONDUCT.md).
## Questions?
Feel free to open an issue or start a discussion!
Thanks for helping make Aeonview better 💜
<!-- vim: ft=md sw=2 ts=2 tw=72 fo=cqt wm=0 et :-->

16
.github/renovate.json vendored Normal file
View File

@@ -0,0 +1,16 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"github>ivuorinen/renovate-config"
],
"packageRules": [
{
"managers": [
"github-actions"
],
"schedule": [
"daily"
]
}
]
}

33
.github/workflows/pr-lint.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
---
# yamllint disable rule:line-length
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
# yamllint enable rule:line-length
name: PR Lint
# yamllint disable-line rule:truthy
on:
push:
branches: [master, main]
pull_request:
branches: [master, main]
permissions: read-all
env:
TRIVY_SEVERITY: CRITICAL,HIGH
DISABLE_LINTERS: GO_GOLANGCI_LINT
jobs:
Linter:
name: PR Lint
runs-on: ubuntu-latest
permissions:
contents: write # only for delete-branch option
issues: write
pull-requests: write
statuses: write
steps:
# yamllint disable rule:line-length
- uses: ivuorinen/actions/pr-lint@7f6a23b59316795c4b3cb3b3b28dd53e53655a33 # v2026.03.11
# yamllint enable rule:line-length

39
.github/workflows/python-tests.yml vendored Normal file
View File

@@ -0,0 +1,39 @@
---
name: Python tests
# yamllint disable-line rule:truthy
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
permissions: read-all
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
# yamllint disable-line rule:line-length
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install uv
# yamllint disable-line rule:line-length
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
with:
python-version-file: ".python-version"
- name: Install dependencies
shell: bash
run: uv sync --all-groups
- name: Run Ruff linting
shell: bash
run: uv run ruff check .
- name: Run tests with coverage
shell: bash
run: |
uv run pytest --cov=aeonview --cov-report=term-missing