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.
Files changed (81) hide show
  1. plexdo-1.1.18/.github/workflows/ci.yml +60 -0
  2. plexdo-1.1.18/.github/workflows/publish.yml +120 -0
  3. plexdo-1.1.18/AI.prompt.md +666 -0
  4. plexdo-1.1.18/CHANGELOG.md +240 -0
  5. plexdo-1.1.18/CONTRIBUTING.md +71 -0
  6. plexdo-1.1.18/LICENSE +232 -0
  7. plexdo-1.1.18/MANIFEST.in +11 -0
  8. plexdo-1.1.18/Makefile +231 -0
  9. plexdo-1.1.18/PKG-INFO +601 -0
  10. plexdo-1.1.18/README.md +563 -0
  11. plexdo-1.1.18/SECURITY.md +35 -0
  12. plexdo-1.1.18/completions/_plexdo +359 -0
  13. plexdo-1.1.18/completions/plexdo.bash +597 -0
  14. plexdo-1.1.18/completions/plexdo.fish +317 -0
  15. plexdo-1.1.18/completions/plexdo.ps1 +371 -0
  16. plexdo-1.1.18/man/plexdo.1 +571 -0
  17. plexdo-1.1.18/pyproject.toml +68 -0
  18. plexdo-1.1.18/requirements.txt +6 -0
  19. plexdo-1.1.18/setup.cfg +4 -0
  20. plexdo-1.1.18/src/plexdo/__init__.py +26 -0
  21. plexdo-1.1.18/src/plexdo/__main__.py +24 -0
  22. plexdo-1.1.18/src/plexdo/accounts.py +253 -0
  23. plexdo-1.1.18/src/plexdo/airdates.py +136 -0
  24. plexdo-1.1.18/src/plexdo/cache.py +38 -0
  25. plexdo-1.1.18/src/plexdo/cli.py +157 -0
  26. plexdo-1.1.18/src/plexdo/commands/__init__.py +63 -0
  27. plexdo-1.1.18/src/plexdo/commands/auth.py +201 -0
  28. plexdo-1.1.18/src/plexdo/commands/build.py +194 -0
  29. plexdo-1.1.18/src/plexdo/commands/copy.py +169 -0
  30. plexdo-1.1.18/src/plexdo/commands/libraries.py +231 -0
  31. plexdo-1.1.18/src/plexdo/commands/metadata.py +135 -0
  32. plexdo-1.1.18/src/plexdo/commands/missing.py +234 -0
  33. plexdo-1.1.18/src/plexdo/commands/playlists.py +174 -0
  34. plexdo-1.1.18/src/plexdo/commands/rescan.py +95 -0
  35. plexdo-1.1.18/src/plexdo/commands/search.py +114 -0
  36. plexdo-1.1.18/src/plexdo/commands/status.py +245 -0
  37. plexdo-1.1.18/src/plexdo/commands/stream.py +138 -0
  38. plexdo-1.1.18/src/plexdo/commands/users.py +39 -0
  39. plexdo-1.1.18/src/plexdo/commands/watched.py +295 -0
  40. plexdo-1.1.18/src/plexdo/config.py +153 -0
  41. plexdo-1.1.18/src/plexdo/console.py +240 -0
  42. plexdo-1.1.18/src/plexdo/constants.py +111 -0
  43. plexdo-1.1.18/src/plexdo/convert.py +38 -0
  44. plexdo-1.1.18/src/plexdo/data/_plexdo +359 -0
  45. plexdo-1.1.18/src/plexdo/data/plexdo.1 +571 -0
  46. plexdo-1.1.18/src/plexdo/data/plexdo.bash +597 -0
  47. plexdo-1.1.18/src/plexdo/data/plexdo.fish +317 -0
  48. plexdo-1.1.18/src/plexdo/data/plexdo.ps1 +371 -0
  49. plexdo-1.1.18/src/plexdo/formats.py +181 -0
  50. plexdo-1.1.18/src/plexdo/gallery.py +190 -0
  51. plexdo-1.1.18/src/plexdo/identify.py +75 -0
  52. plexdo-1.1.18/src/plexdo/logs.py +21 -0
  53. plexdo-1.1.18/src/plexdo/m3u.py +34 -0
  54. plexdo-1.1.18/src/plexdo/paths.py +105 -0
  55. plexdo-1.1.18/src/plexdo/photos.py +74 -0
  56. plexdo-1.1.18/src/plexdo/playlists.py +174 -0
  57. plexdo-1.1.18/src/plexdo/py.typed +0 -0
  58. plexdo-1.1.18/src/plexdo/records.py +136 -0
  59. plexdo-1.1.18/src/plexdo/sections.py +58 -0
  60. plexdo-1.1.18/src/plexdo/security.py +65 -0
  61. plexdo-1.1.18/src/plexdo/sorting.py +50 -0
  62. plexdo-1.1.18/src/plexdo/throttle.py +59 -0
  63. plexdo-1.1.18/src/plexdo/titles.py +53 -0
  64. plexdo-1.1.18/src/plexdo/tokens.py +88 -0
  65. plexdo-1.1.18/src/plexdo.egg-info/PKG-INFO +601 -0
  66. plexdo-1.1.18/src/plexdo.egg-info/SOURCES.txt +79 -0
  67. plexdo-1.1.18/src/plexdo.egg-info/dependency_links.txt +1 -0
  68. plexdo-1.1.18/src/plexdo.egg-info/entry_points.txt +2 -0
  69. plexdo-1.1.18/src/plexdo.egg-info/requires.txt +10 -0
  70. plexdo-1.1.18/src/plexdo.egg-info/top_level.txt +1 -0
  71. plexdo-1.1.18/tests/conftest.py +96 -0
  72. plexdo-1.1.18/tests/test_airdates_misc.py +97 -0
  73. plexdo-1.1.18/tests/test_cli_and_config.py +247 -0
  74. plexdo-1.1.18/tests/test_console.py +151 -0
  75. plexdo-1.1.18/tests/test_formats.py +86 -0
  76. plexdo-1.1.18/tests/test_identify.py +68 -0
  77. plexdo-1.1.18/tests/test_paths_tokens.py +103 -0
  78. plexdo-1.1.18/tests/test_playlists.py +72 -0
  79. plexdo-1.1.18/tests/test_records_missing.py +201 -0
  80. plexdo-1.1.18/tests/test_throttle.py +73 -0
  81. 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