revvlink 3.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. revvlink-3.6.0/.antigravity/rules.md +259 -0
  2. revvlink-3.6.0/.github/CODEOWNERS +1 -0
  3. revvlink-3.6.0/.github/workflows/build_and_publish.yml +50 -0
  4. revvlink-3.6.0/.github/workflows/publish.yml +29 -0
  5. revvlink-3.6.0/.github/workflows/signoff.yaml +15 -0
  6. revvlink-3.6.0/.github/workflows/sonar_Analysis.yml +50 -0
  7. revvlink-3.6.0/.github/workflows/version_checks.yml +43 -0
  8. revvlink-3.6.0/.gitignore +168 -0
  9. revvlink-3.6.0/.pre-commit-config.yaml +7 -0
  10. revvlink-3.6.0/.readthedocs.yml +14 -0
  11. revvlink-3.6.0/LICENSE +21 -0
  12. revvlink-3.6.0/Makefile +96 -0
  13. revvlink-3.6.0/PKG-INFO +148 -0
  14. revvlink-3.6.0/README.md +103 -0
  15. revvlink-3.6.0/REVIVAL_PROGRESS.md +578 -0
  16. revvlink-3.6.0/changelogs/WAVELINK_YOUTUBE_FIX_WALKTHROUGH.md +1133 -0
  17. revvlink-3.6.0/changelogs/phase-1-dave-protocol.md +190 -0
  18. revvlink-3.6.0/changelogs/phase-1-youtube-fix.md +147 -0
  19. revvlink-3.6.0/docs/_static/js/custom.js +24 -0
  20. revvlink-3.6.0/docs/_static/logo.png +0 -0
  21. revvlink-3.6.0/docs/_static/styles/furo.css +2366 -0
  22. revvlink-3.6.0/docs/_static/wl_dark.png +0 -0
  23. revvlink-3.6.0/docs/conf.py +163 -0
  24. revvlink-3.6.0/docs/extensions/attributetable.py +324 -0
  25. revvlink-3.6.0/docs/extensions/details.py +69 -0
  26. revvlink-3.6.0/docs/extensions/exception_hierarchy.py +37 -0
  27. revvlink-3.6.0/docs/extensions/prettyversion.py +108 -0
  28. revvlink-3.6.0/docs/index.rst +80 -0
  29. revvlink-3.6.0/docs/installing.rst +24 -0
  30. revvlink-3.6.0/docs/logo.png +0 -0
  31. revvlink-3.6.0/docs/migrating.rst +314 -0
  32. revvlink-3.6.0/docs/recipes.rst +4 -0
  33. revvlink-3.6.0/docs/requirements.txt +10 -0
  34. revvlink-3.6.0/docs/rewavelink.rst +496 -0
  35. revvlink-3.6.0/examples/simple.py +213 -0
  36. revvlink-3.6.0/pyproject.toml +71 -0
  37. revvlink-3.6.0/requirements.txt +5 -0
  38. revvlink-3.6.0/rewavelink/__init__.py +42 -0
  39. revvlink-3.6.0/rewavelink/__main__.py +37 -0
  40. revvlink-3.6.0/rewavelink/backoff.py +83 -0
  41. revvlink-3.6.0/rewavelink/enums.py +151 -0
  42. revvlink-3.6.0/rewavelink/exceptions.py +159 -0
  43. revvlink-3.6.0/rewavelink/filters.py +1024 -0
  44. revvlink-3.6.0/rewavelink/lfu.py +196 -0
  45. revvlink-3.6.0/rewavelink/node.py +1319 -0
  46. revvlink-3.6.0/rewavelink/payloads.py +693 -0
  47. revvlink-3.6.0/rewavelink/player.py +1471 -0
  48. revvlink-3.6.0/rewavelink/queue.py +749 -0
  49. revvlink-3.6.0/rewavelink/tracks.py +754 -0
  50. revvlink-3.6.0/rewavelink/types/__init__.py +23 -0
  51. revvlink-3.6.0/rewavelink/types/filters.py +93 -0
  52. revvlink-3.6.0/rewavelink/types/request.py +71 -0
  53. revvlink-3.6.0/rewavelink/types/response.py +134 -0
  54. revvlink-3.6.0/rewavelink/types/state.py +81 -0
  55. revvlink-3.6.0/rewavelink/types/stats.py +44 -0
  56. revvlink-3.6.0/rewavelink/types/tracks.py +59 -0
  57. revvlink-3.6.0/rewavelink/types/websocket.py +136 -0
  58. revvlink-3.6.0/rewavelink/utils.py +64 -0
  59. revvlink-3.6.0/rewavelink/websocket.py +438 -0
  60. revvlink-3.6.0/setup.py +23 -0
  61. revvlink-3.6.0/sonar-project.properties +6 -0
  62. revvlink-3.6.0/tests/__init__.py +0 -0
  63. revvlink-3.6.0/tests/conftest.py +71 -0
  64. revvlink-3.6.0/tests/test_asyncio_compat.py +152 -0
  65. revvlink-3.6.0/tests/test_basic.py +99 -0
  66. revvlink-3.6.0/tests/test_dave_protocol.py +369 -0
  67. revvlink-3.6.0/tests/test_dave_voice.py +270 -0
  68. revvlink-3.6.0/tests/test_decode_tracks.py +331 -0
  69. revvlink-3.6.0/tests/test_filters.py +245 -0
  70. revvlink-3.6.0/tests/test_lfu.py +76 -0
  71. revvlink-3.6.0/tests/test_main.py +38 -0
  72. revvlink-3.6.0/tests/test_node.py +1279 -0
  73. revvlink-3.6.0/tests/test_payloads.py +259 -0
  74. revvlink-3.6.0/tests/test_player.py +1625 -0
  75. revvlink-3.6.0/tests/test_queue.py +389 -0
  76. revvlink-3.6.0/tests/test_routeplanner.py +413 -0
  77. revvlink-3.6.0/tests/test_track_exception_v410.py +216 -0
  78. revvlink-3.6.0/tests/test_tracks.py +215 -0
  79. revvlink-3.6.0/tests/test_utils.py +20 -0
  80. revvlink-3.6.0/tests/test_websocket.py +550 -0
@@ -0,0 +1,259 @@
1
+ # ReWaveLink Antigravity Rules
2
+
3
+ > **Version:** 1.0.0
4
+ > **Last Updated:** March 8, 2026
5
+
6
+ This file defines the development rules and pre-commit checks for the ReWaveLink project.
7
+
8
+ ---
9
+
10
+ ## 🎯 Overview
11
+
12
+ ReWaveLink uses a multi-layered code quality system:
13
+
14
+ 1. **Pre-commit hooks** - Automated checks that run before each commit
15
+ 2. **Linting** - Code style and quality enforcement
16
+ 3. **Type checking** - Static type analysis
17
+ 4. **Testing** - Automated test suite
18
+
19
+ ---
20
+
21
+ ## ✅ Pre-commit Checks
22
+
23
+ Before committing, ensure all checks pass:
24
+
25
+ ### 1. Ruff Linting (Required)
26
+ ```bash
27
+ ruff check .
28
+ ```
29
+ - Fixes automatically: `ruff check . --fix`
30
+ - Strict configuration in `pyproject.toml`
31
+ - Target: Python 3.10+
32
+
33
+ ### 2. Ruff Formatting (Required)
34
+ ```bash
35
+ ruff format .
36
+ ```
37
+ - Enforces Black-compatible formatting
38
+ - Line length: 100 characters
39
+
40
+ ### 3. Pyright Type Checking (Required)
41
+ ```bash
42
+ pyright rewavelink/
43
+ ```
44
+ - Strict mode enabled
45
+ - Python 3.10 type checking
46
+ - Configured in `pyproject.toml`
47
+
48
+ ### 4. Test Suite (Required)
49
+ ```bash
50
+ pytest tests/ -v
51
+ ```
52
+ - 355+ tests covering all modules
53
+ - 3 skipped (Python version specific)
54
+
55
+ ---
56
+
57
+ ## 🚀 Quick Start
58
+
59
+ ### Install Pre-commit Hooks
60
+ ```bash
61
+ # Install pre-commit
62
+ pip install pre-commit
63
+
64
+ # Install hooks
65
+ pre-commit install
66
+ ```
67
+
68
+ ### Run All Checks Manually
69
+ ```bash
70
+ # From project root
71
+ make checks
72
+
73
+ # Or manually:
74
+ ruff check . --fix
75
+ ruff format .
76
+ pyright rewavelink/
77
+ pytest tests/ -v
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 📋 Git Hook Configuration
83
+
84
+ ### Manual Setup
85
+ Create a pre-commit hook at `.git/hooks/pre-commit`:
86
+
87
+ ```bash
88
+ #!/bin/bash
89
+ # ReWaveLink pre-commit hook
90
+
91
+ echo "Running pre-commit checks..."
92
+
93
+ # Run ruff
94
+ echo "Running ruff..."
95
+ ruff check . --fix
96
+ if [ $? -ne 0 ]; then
97
+ echo "Ruff check failed!"
98
+ exit 1
99
+ fi
100
+
101
+ # Run ruff format
102
+ echo "Running ruff format..."
103
+ ruff format .
104
+ if [ $? -ne 0 ]; then
105
+ echo "Ruff format failed!"
106
+ exit 1
107
+ fi
108
+
109
+ # Run pyright
110
+ echo "Running pyright..."
111
+ pyright rewavelink/
112
+ if [ $? -ne 0 ]; then
113
+ echo "Pyright type checking failed!"
114
+ exit 1
115
+ fi
116
+
117
+ # Run tests
118
+ echo "Running tests..."
119
+ pytest tests/ -v --tb=short
120
+ if [ $? -ne 0 ]; then
121
+ echo "Tests failed!"
122
+ exit 1
123
+ fi
124
+
125
+ echo "All checks passed!"
126
+ exit 0
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 🔧 Makefile Commands
132
+
133
+ Add this to your `Makefile`:
134
+
135
+ ```makefile
136
+ .PHONY: checks format lint type test clean
137
+
138
+ checks: format lint type test
139
+
140
+ format:
141
+ @echo "Running ruff format..."
142
+ ruff format .
143
+
144
+ lint:
145
+ @echo "Running ruff lint..."
146
+ ruff check . --fix
147
+
148
+ type:
149
+ @echo "Running pyright..."
150
+ pyright rewavelink/
151
+
152
+ test:
153
+ @echo "Running pytest..."
154
+ pytest tests/ -v --tb=short
155
+
156
+ clean:
157
+ @echo "Cleaning..."
158
+ find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
159
+ find . -type f -name "*.pyc" -delete 2>/dev/null || true
160
+ rm -rf .pytest_cache/ .ruff_cache/
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 🎨 Code Style Rules
166
+
167
+ ### Ruff Configuration
168
+ Located in `pyproject.toml`:
169
+
170
+ ```toml
171
+ [tool.ruff]
172
+ target-version = "py310"
173
+ line-length = 100
174
+
175
+ [tool.ruff.lint]
176
+ select = ["E", "W", "F", "I", "UP", "ASYNC", "PYI", "RUF", "TC", "PTH"]
177
+ ```
178
+
179
+ ### Pyright Configuration
180
+ Located in `pyproject.toml`:
181
+
182
+ ```toml
183
+ [tool.pyright]
184
+ pythonVersion = "3.10"
185
+ typeCheckingMode = "strict"
186
+ reportMissingImports = true
187
+ ```
188
+
189
+ ---
190
+
191
+ ## 📝 Commit Message Format
192
+
193
+ Follow conventional commits:
194
+
195
+ ```
196
+ <type>(<scope>): <description>
197
+
198
+ [optional body]
199
+
200
+ [optional footer]
201
+ ```
202
+
203
+ ### Types
204
+ - `feat`: New feature
205
+ - `fix`: Bug fix
206
+ - `docs`: Documentation
207
+ - `style`: Code style (formatting)
208
+ - `refactor`: Code refactoring
209
+ - `test`: Tests
210
+ - `chore`: Maintenance
211
+
212
+ ### Example
213
+ ```
214
+ feat(player): add DAVE protocol E2EE support
215
+
216
+ - Added davey optional dependency
217
+ - Implemented MLS handshake handlers
218
+ - Added is_e2ee property
219
+
220
+ Closes #123
221
+ ```
222
+
223
+ ---
224
+
225
+ ## 🐛 Troubleshooting
226
+
227
+ ### Pre-commit Fails
228
+
229
+ 1. **Ruff errors**: Run `ruff check . --fix` to auto-fix
230
+ 2. **Type errors**: Check pyright output for missing imports/types
231
+ 3. **Test failures**: Fix failing tests before committing
232
+
233
+ ### Installation Issues
234
+
235
+ ```bash
236
+ # Reinstall dependencies
237
+ pip install -e ".[dev]"
238
+
239
+ # Update pre-commit
240
+ pre-commit clean
241
+ pre-commit install -f
242
+ ```
243
+
244
+ ---
245
+
246
+ ## 📚 Related Files
247
+
248
+ - [`pyproject.toml`](../pyproject.toml) - Project configuration
249
+ - [`.pre-commit-config.yaml`](../.pre-commit-config.yaml) - Pre-commit hooks
250
+ - [`changelogs/`](changelogs/) - Change documentation
251
+ - [`REVIVAL_PROGRESS.md`](../REVIVAL_PROGRESS.md) - Project progress
252
+
253
+ ---
254
+
255
+ ## 🔗 References
256
+
257
+ - [Ruff Documentation](https://docs.astral.sh/ruff/)
258
+ - [Pyright Documentation](https://microsoft.github.io/pyright/)
259
+ - [Pre-commit Documentation](https://pre-commit.com/)
@@ -0,0 +1 @@
1
+ * @justnixx
@@ -0,0 +1,50 @@
1
+ name: Publish to PyPi @ Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build distribution
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Set up Python
15
+ uses: actions/setup-python@v4
16
+ with:
17
+ python-version: "3.x"
18
+ - name: Install pypa/build
19
+ run: >-
20
+ python3 -m
21
+ pip install
22
+ build
23
+ --user
24
+ - name: Build source and wheels
25
+ run: python3 -m build
26
+ - name: Store the distribution packages
27
+ uses: actions/upload-artifact@v3
28
+ with:
29
+ name: python-package-distributions
30
+ path: dist/
31
+
32
+ publish-to-pypi:
33
+ name: Upload to PyPi
34
+ needs:
35
+ - build
36
+ runs-on: ubuntu-latest
37
+ environment:
38
+ name: pypi
39
+ url: https://pypi.org/p/ReWaveLink
40
+ permissions:
41
+ id-token: write
42
+
43
+ steps:
44
+ - name: Download all the dists
45
+ uses: actions/download-artifact@v3
46
+ with:
47
+ name: python-package-distributions
48
+ path: dist/
49
+ - name: Publish distribution to PyPi
50
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,29 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build_and_publish:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ id-token: write
12
+ contents: read
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - name: Set up Python
16
+ uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.10"
19
+ - name: Install build tool
20
+ run: pip install build
21
+ - name: Build package
22
+ run: python -m build
23
+ - name: Publish package distributions to TestPyPI
24
+ uses: pypa/gh-action-pypi-publish@v1
25
+ with:
26
+ repository-url: https://test.pypi.org/legacy/
27
+ skip-existing: true
28
+ - name: Publish package distributions to PyPI
29
+ uses: pypa/gh-action-pypi-publish@v1
@@ -0,0 +1,15 @@
1
+ name: validate-signoff
2
+ on:
3
+ pull_request:
4
+ types:
5
+ - opened
6
+ - edited
7
+
8
+ jobs:
9
+ validate:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: PR Description Check
13
+ uses: pythonistaguild/pr-description-check@v1.0
14
+ with:
15
+ content: "[x] I have read and agree to the [Developer Certificate of Origin]"
@@ -0,0 +1,50 @@
1
+ name: Sonar Analysis
2
+ run-name: Sonar Analysis - ${{ github.ref_name }} by @${{ github.actor }}
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ - nixx
9
+ pull_request:
10
+ branches:
11
+ - main
12
+ - nixx
13
+ workflow_dispatch:
14
+
15
+
16
+ jobs:
17
+ build:
18
+ name: Build and analyze
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: "3.10"
29
+ - name: Install dependencies
30
+ run: |
31
+ pip install uv
32
+ uv pip install --system -e ".[dev]"
33
+ - name: Run tests with coverage
34
+ run: pytest --cov=rewavelink --cov-report=xml --cov-report=term-missing
35
+ - uses: SonarSource/sonarqube-scan-action@v6
36
+ with:
37
+ args: >
38
+ -Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
39
+ -Dsonar.pullrequest.branch=${{ github.head_ref }}
40
+ -Dsonar.pullrequest.base=${{ github.base_ref }}
41
+ -Dsonar.python.coverage.reportPaths=coverage.xml
42
+ env:
43
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
44
+ SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
45
+ - name: SonarQube Quality Gate check
46
+ uses: sonarsource/sonarqube-quality-gate-action@v1
47
+ timeout-minutes: 5
48
+ env:
49
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
50
+
@@ -0,0 +1,43 @@
1
+ name: Version Checks
2
+ run-name: Py Version checks - ${{ github.ref_name }} by @${{ github.actor }}
3
+
4
+
5
+ on:
6
+ push:
7
+ branches:
8
+ - main
9
+ - dev
10
+ - nixx
11
+ pull_request:
12
+ branches:
13
+ - main
14
+ - dev
15
+ - nixx
16
+
17
+ jobs:
18
+ check:
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - name: Set up Python ${{ matrix.python-version }}
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ - name: Install dependencies
31
+ run: |
32
+ pip install uv
33
+ uv pip install --system -e ".[dev]"
34
+ - name: Ruff Check
35
+ run: ruff check .
36
+ - name: Ruff Format Check
37
+ run: ruff format --check .
38
+ - name: Pyright
39
+ run: pyright
40
+ - name: Run tests with coverage
41
+ run: pytest --cov
42
+ - name: Upload coverage
43
+ uses: codecov/codecov-action@v4
@@ -0,0 +1,168 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ #.idea/
161
+
162
+ .vscode/
163
+
164
+ # Linting & Editor caches
165
+ .ruff_cache/
166
+ .DS_Store
167
+ node_modules/
168
+ *roadmap.html
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.3.0
4
+ hooks:
5
+ - id: ruff
6
+ args: [ --fix ]
7
+ - id: ruff-format
@@ -0,0 +1,14 @@
1
+ formats: []
2
+
3
+ version: 2
4
+
5
+ build:
6
+ os: ubuntu-20.04
7
+ tools: {"python": "3.10"}
8
+
9
+ python:
10
+ install:
11
+ - requirements: requirements.txt
12
+ - requirements: docs/requirements.txt
13
+ - method: pip
14
+ path: .
revvlink-3.6.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026-Present @JustNixx and @IamGroot
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.