plexdo 1.1.18__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.
- plexdo-1.1.18/.github/workflows/ci.yml +60 -0
- plexdo-1.1.18/.github/workflows/publish.yml +120 -0
- plexdo-1.1.18/AI.prompt.md +666 -0
- plexdo-1.1.18/CHANGELOG.md +240 -0
- plexdo-1.1.18/CONTRIBUTING.md +71 -0
- plexdo-1.1.18/LICENSE +232 -0
- plexdo-1.1.18/MANIFEST.in +11 -0
- plexdo-1.1.18/Makefile +231 -0
- plexdo-1.1.18/PKG-INFO +601 -0
- plexdo-1.1.18/README.md +563 -0
- plexdo-1.1.18/SECURITY.md +35 -0
- plexdo-1.1.18/completions/_plexdo +359 -0
- plexdo-1.1.18/completions/plexdo.bash +597 -0
- plexdo-1.1.18/completions/plexdo.fish +317 -0
- plexdo-1.1.18/completions/plexdo.ps1 +371 -0
- plexdo-1.1.18/man/plexdo.1 +571 -0
- plexdo-1.1.18/pyproject.toml +68 -0
- plexdo-1.1.18/requirements.txt +6 -0
- plexdo-1.1.18/setup.cfg +4 -0
- plexdo-1.1.18/src/plexdo/__init__.py +26 -0
- plexdo-1.1.18/src/plexdo/__main__.py +24 -0
- plexdo-1.1.18/src/plexdo/accounts.py +253 -0
- plexdo-1.1.18/src/plexdo/airdates.py +136 -0
- plexdo-1.1.18/src/plexdo/cache.py +38 -0
- plexdo-1.1.18/src/plexdo/cli.py +157 -0
- plexdo-1.1.18/src/plexdo/commands/__init__.py +63 -0
- plexdo-1.1.18/src/plexdo/commands/auth.py +201 -0
- plexdo-1.1.18/src/plexdo/commands/build.py +194 -0
- plexdo-1.1.18/src/plexdo/commands/copy.py +169 -0
- plexdo-1.1.18/src/plexdo/commands/libraries.py +231 -0
- plexdo-1.1.18/src/plexdo/commands/metadata.py +135 -0
- plexdo-1.1.18/src/plexdo/commands/missing.py +234 -0
- plexdo-1.1.18/src/plexdo/commands/playlists.py +174 -0
- plexdo-1.1.18/src/plexdo/commands/rescan.py +95 -0
- plexdo-1.1.18/src/plexdo/commands/search.py +114 -0
- plexdo-1.1.18/src/plexdo/commands/status.py +245 -0
- plexdo-1.1.18/src/plexdo/commands/stream.py +138 -0
- plexdo-1.1.18/src/plexdo/commands/users.py +39 -0
- plexdo-1.1.18/src/plexdo/commands/watched.py +295 -0
- plexdo-1.1.18/src/plexdo/config.py +153 -0
- plexdo-1.1.18/src/plexdo/console.py +240 -0
- plexdo-1.1.18/src/plexdo/constants.py +111 -0
- plexdo-1.1.18/src/plexdo/convert.py +38 -0
- plexdo-1.1.18/src/plexdo/data/_plexdo +359 -0
- plexdo-1.1.18/src/plexdo/data/plexdo.1 +571 -0
- plexdo-1.1.18/src/plexdo/data/plexdo.bash +597 -0
- plexdo-1.1.18/src/plexdo/data/plexdo.fish +317 -0
- plexdo-1.1.18/src/plexdo/data/plexdo.ps1 +371 -0
- plexdo-1.1.18/src/plexdo/formats.py +181 -0
- plexdo-1.1.18/src/plexdo/gallery.py +190 -0
- plexdo-1.1.18/src/plexdo/identify.py +75 -0
- plexdo-1.1.18/src/plexdo/logs.py +21 -0
- plexdo-1.1.18/src/plexdo/m3u.py +34 -0
- plexdo-1.1.18/src/plexdo/paths.py +105 -0
- plexdo-1.1.18/src/plexdo/photos.py +74 -0
- plexdo-1.1.18/src/plexdo/playlists.py +174 -0
- plexdo-1.1.18/src/plexdo/py.typed +0 -0
- plexdo-1.1.18/src/plexdo/records.py +136 -0
- plexdo-1.1.18/src/plexdo/sections.py +58 -0
- plexdo-1.1.18/src/plexdo/security.py +65 -0
- plexdo-1.1.18/src/plexdo/sorting.py +50 -0
- plexdo-1.1.18/src/plexdo/throttle.py +59 -0
- plexdo-1.1.18/src/plexdo/titles.py +53 -0
- plexdo-1.1.18/src/plexdo/tokens.py +88 -0
- plexdo-1.1.18/src/plexdo.egg-info/PKG-INFO +601 -0
- plexdo-1.1.18/src/plexdo.egg-info/SOURCES.txt +79 -0
- plexdo-1.1.18/src/plexdo.egg-info/dependency_links.txt +1 -0
- plexdo-1.1.18/src/plexdo.egg-info/entry_points.txt +2 -0
- plexdo-1.1.18/src/plexdo.egg-info/requires.txt +10 -0
- plexdo-1.1.18/src/plexdo.egg-info/top_level.txt +1 -0
- plexdo-1.1.18/tests/conftest.py +96 -0
- plexdo-1.1.18/tests/test_airdates_misc.py +97 -0
- plexdo-1.1.18/tests/test_cli_and_config.py +247 -0
- plexdo-1.1.18/tests/test_console.py +151 -0
- plexdo-1.1.18/tests/test_formats.py +86 -0
- plexdo-1.1.18/tests/test_identify.py +68 -0
- plexdo-1.1.18/tests/test_paths_tokens.py +103 -0
- plexdo-1.1.18/tests/test_playlists.py +72 -0
- plexdo-1.1.18/tests/test_records_missing.py +201 -0
- plexdo-1.1.18/tests/test_throttle.py +73 -0
- plexdo-1.1.18/tests/test_watched.py +71 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
check:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: ${{ matrix.python-version }}
|
|
22
|
+
|
|
23
|
+
- name: Install
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install -e ".[dev]"
|
|
27
|
+
|
|
28
|
+
- name: Full check
|
|
29
|
+
run: make check
|
|
30
|
+
|
|
31
|
+
shells:
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
|
|
36
|
+
- name: Install shells and roff
|
|
37
|
+
run: sudo apt-get update && sudo apt-get install -y zsh fish groff-base
|
|
38
|
+
|
|
39
|
+
- name: Completions parse
|
|
40
|
+
run: |
|
|
41
|
+
bash -n completions/plexdo.bash
|
|
42
|
+
zsh -n completions/_plexdo
|
|
43
|
+
fish -n completions/plexdo.fish
|
|
44
|
+
|
|
45
|
+
- name: Manual page is clean
|
|
46
|
+
run: groff -man -Tutf8 -ww -z man/plexdo.1
|
|
47
|
+
|
|
48
|
+
powershell:
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
steps:
|
|
51
|
+
- uses: actions/checkout@v4
|
|
52
|
+
|
|
53
|
+
- name: PowerShell completion parses
|
|
54
|
+
shell: pwsh
|
|
55
|
+
run: |
|
|
56
|
+
$errs = $null
|
|
57
|
+
[System.Management.Automation.Language.Parser]::ParseFile(
|
|
58
|
+
"completions/plexdo.ps1", [ref]$null, [ref]$errs) | Out-Null
|
|
59
|
+
if ($errs) { $errs | ForEach-Object { $_.Message }; exit 1 }
|
|
60
|
+
Write-Host "no parse errors"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
# Publishes to PyPI through Trusted Publishing (OIDC), so no API token is
|
|
4
|
+
# stored anywhere. Configure the publisher once at
|
|
5
|
+
# https://pypi.org/manage/project/plexdo/settings/publishing/ with:
|
|
6
|
+
#
|
|
7
|
+
# owner: sidusnare
|
|
8
|
+
# repository: plexdo
|
|
9
|
+
# workflow: publish.yml
|
|
10
|
+
# environment: pypi (and test-pypi for the dry run)
|
|
11
|
+
#
|
|
12
|
+
# Publishing to TestPyPI is manual: run this workflow from the Actions tab.
|
|
13
|
+
# Publishing to PyPI happens when a GitHub release is published.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
release:
|
|
17
|
+
types: [published]
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
inputs:
|
|
20
|
+
target:
|
|
21
|
+
description: Where to publish
|
|
22
|
+
required: true
|
|
23
|
+
default: testpypi
|
|
24
|
+
type: choice
|
|
25
|
+
options: [testpypi, pypi]
|
|
26
|
+
|
|
27
|
+
# Nothing here needs write access to the repository itself; the two publish
|
|
28
|
+
# jobs raise only id-token, which is what OIDC needs.
|
|
29
|
+
permissions:
|
|
30
|
+
contents: read
|
|
31
|
+
|
|
32
|
+
jobs:
|
|
33
|
+
build:
|
|
34
|
+
name: Build and verify
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- uses: actions/setup-python@v5
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
|
|
43
|
+
- name: Install
|
|
44
|
+
run: |
|
|
45
|
+
python -m pip install --upgrade pip
|
|
46
|
+
pip install -e ".[dev]"
|
|
47
|
+
|
|
48
|
+
# Everything that gates a normal pull request also gates a release:
|
|
49
|
+
# version consistency across the three places it appears, packaged
|
|
50
|
+
# assets matching their sources, the smoke test, the suite, pylint,
|
|
51
|
+
# the build itself, and twine's metadata check.
|
|
52
|
+
- name: Full check
|
|
53
|
+
run: make check
|
|
54
|
+
|
|
55
|
+
# A release tagged v1.2.3 must contain version 1.2.3. Without this the
|
|
56
|
+
# wheel would upload under whatever version the source happened to
|
|
57
|
+
# carry, and PyPI would accept it: uploads are immutable, so the
|
|
58
|
+
# mistake could not be taken back.
|
|
59
|
+
- name: Tag matches package version
|
|
60
|
+
if: github.event_name == 'release'
|
|
61
|
+
run: |
|
|
62
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
63
|
+
version="$(python -c 'import plexdo; print(plexdo.__version__)')"
|
|
64
|
+
if [ "$tag" != "$version" ]; then
|
|
65
|
+
echo "::error::tag $GITHUB_REF_NAME does not match version $version"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
echo "tag $GITHUB_REF_NAME matches version $version"
|
|
69
|
+
|
|
70
|
+
- name: Upload distributions
|
|
71
|
+
uses: actions/upload-artifact@v4
|
|
72
|
+
with:
|
|
73
|
+
name: dist
|
|
74
|
+
path: dist/
|
|
75
|
+
if-no-files-found: error
|
|
76
|
+
|
|
77
|
+
testpypi:
|
|
78
|
+
name: Publish to TestPyPI
|
|
79
|
+
needs: build
|
|
80
|
+
if: github.event_name == 'workflow_dispatch' && inputs.target == 'testpypi'
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
environment:
|
|
83
|
+
name: test-pypi
|
|
84
|
+
url: https://test.pypi.org/p/plexdo
|
|
85
|
+
permissions:
|
|
86
|
+
id-token: write # the OIDC token trusted publishing exchanges
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/download-artifact@v4
|
|
89
|
+
with:
|
|
90
|
+
name: dist
|
|
91
|
+
path: dist/
|
|
92
|
+
|
|
93
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
94
|
+
with:
|
|
95
|
+
repository-url: https://test.pypi.org/legacy/
|
|
96
|
+
# TestPyPI often already holds this version from an earlier dry
|
|
97
|
+
# run, and that should not fail the workflow.
|
|
98
|
+
skip-existing: true
|
|
99
|
+
|
|
100
|
+
pypi:
|
|
101
|
+
name: Publish to PyPI
|
|
102
|
+
needs: build
|
|
103
|
+
if: >-
|
|
104
|
+
github.event_name == 'release' ||
|
|
105
|
+
(github.event_name == 'workflow_dispatch' && inputs.target == 'pypi')
|
|
106
|
+
runs-on: ubuntu-latest
|
|
107
|
+
environment:
|
|
108
|
+
name: pypi
|
|
109
|
+
url: https://pypi.org/p/plexdo
|
|
110
|
+
permissions:
|
|
111
|
+
id-token: write
|
|
112
|
+
steps:
|
|
113
|
+
- uses: actions/download-artifact@v4
|
|
114
|
+
with:
|
|
115
|
+
name: dist
|
|
116
|
+
path: dist/
|
|
117
|
+
|
|
118
|
+
# Signs the distributions and publishes the attestations alongside
|
|
119
|
+
# them, so PyPI can show they were built by this workflow.
|
|
120
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|