Skip to content

Commit a4f144c

Browse files
committed
v1.2.1
1 parent 7f32981 commit a4f144c

48 files changed

Lines changed: 523 additions & 835 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.auth_dummy.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
artist

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,4 @@ What have you already tried to fix this?
7070
- [ ] I've included the full error message
7171
- [ ] I've redacted all credentials from logs
7272
- [ ] I've tested with the latest version
73-
- [ ] I've included relevant configuration details
73+
- [ ] I've included relevant configuration details

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ Add any other context, screenshots, or examples about the feature request.
3737
## Checklist
3838
- [ ] I've checked existing issues for duplicates
3939
- [ ] I've considered alternative approaches
40-
- [ ] This aligns with the project's goals
40+
- [ ] This aligns with the project's goals

.gitignore

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,37 @@
33
# ============================================================
44

55
# OAuth credentials
6-
auth/*.json
6+
auth/
77
!auth/README.md
88

99
# Environment variables
10-
.env
11-
.env.local
12-
.env.*.local
10+
.env*
11+
!.env.example
1312

1413
# API keys (if accidentally created as files)
1514
*api_keys*
1615
*secrets*
1716
*.key
1817

18+
1919
# ============================================================
2020
# CACHE AND OUTPUT (GENERATED DATA)
2121
# ============================================================
2222

2323
# Playlist caches
24-
cache/*.json
24+
cache/
2525
!cache/README.md
2626

2727
# Discovery output
28-
out/*.json
29-
out/*
28+
out/
3029
!out/README.md
3130

3231
# Logs
33-
logs/**/
32+
logs/
3433
*.log
3534
!logs/README.md
3635

36+
3737
# ============================================================
3838
# PYTHON
3939
# ============================================================
@@ -94,7 +94,6 @@ coverage.xml
9494
*.pot
9595

9696
# Django stuff:
97-
*.log
9897
local_settings.py
9998
db.sqlite3
10099
db.sqlite3-journal
@@ -161,6 +160,7 @@ dmypy.json
161160
# Pyre type checker
162161
.pyre/
163162

163+
164164
# ============================================================
165165
# IDE / EDITOR
166166
# ============================================================
@@ -189,6 +189,7 @@ dmypy.json
189189
/.emacs.desktop.lock
190190
*.elc
191191

192+
192193
# ============================================================
193194
# OPERATING SYSTEM
194195
# ============================================================
@@ -213,6 +214,7 @@ $RECYCLE.BIN/
213214
.directory
214215
.Trash-*
215216

217+
216218
# ============================================================
217219
# PROJECT-SPECIFIC
218220
# ============================================================
@@ -228,7 +230,7 @@ temp/
228230
test_data/
229231
!tests/fixtures/
230232

231-
# Local configuration overrides (if you create them)
233+
# Local configuration overrides
232234
config.local.py
233235
config_override.py
234236

@@ -241,7 +243,9 @@ config_override.py
241243
*.tar.gz
242244
*.rar
243245

246+
# Compiled python leftovers
244247
*.pyc
245248

249+
# Project docs generated during refactors/releases
246250
REFACTORING_SUMMARY.md
247251
V1_RELEASE_SUMMARY.md

.pre-commit-config.yaml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
repos:
2+
# ----------------------------
3+
# Formatting
4+
# ----------------------------
5+
- repo: https://github.com/psf/black
6+
rev: 24.4.2
7+
hooks:
8+
- id: black
9+
language_version: python3.10
10+
11+
# ----------------------------
12+
# Linting (hard errors only)
13+
# ----------------------------
14+
- repo: https://github.com/PyCQA/flake8
15+
rev: 6.1.0
16+
hooks:
17+
- id: flake8
18+
args:
19+
- --count
20+
- --select=E9,F63,F7,F82
21+
- --show-source
22+
- --statistics
23+
24+
# ----------------------------
25+
# Generic hygiene
26+
# ----------------------------
27+
- repo: https://github.com/pre-commit/pre-commit-hooks
28+
rev: v4.6.0
29+
hooks:
30+
- id: trailing-whitespace
31+
- id: end-of-file-fixer
32+
- id: check-yaml
33+
- id: check-json
34+
- id: check-added-large-files
35+
args: ["--maxkb=100"]
36+
37+
# ----------------------------
38+
# Project-specific hooks
39+
# ----------------------------
40+
- repo: local
41+
hooks:
42+
- id: pytest
43+
name: pytest
44+
entry: pytest -q
45+
language: system
46+
pass_filenames: false
47+
48+
- id: secret-scan
49+
name: simple secret scan
50+
entry: |
51+
python - <<'EOF'
52+
import sys, re, pathlib
53+
54+
patterns = [
55+
re.compile(r"AIzaSy[A-Za-z0-9_-]{33}"),
56+
re.compile(r"client_secrets\.json"),
57+
re.compile(r"oauth", re.I),
58+
]
59+
60+
bad = False
61+
62+
for p in pathlib.Path(".").rglob("*"):
63+
if not p.is_file():
64+
continue
65+
if p.suffix in {".pyc", ".png", ".jpg", ".jpeg", ".gif"}:
66+
continue
67+
68+
try:
69+
text = p.read_text(errors="ignore")
70+
except Exception:
71+
continue
72+
73+
for pat in patterns:
74+
if pat.search(text):
75+
print(f"Secret pattern found in {p}")
76+
bad = True
77+
78+
sys.exit(1 if bad else 0)
79+
EOF
80+
language: system
81+
pass_filenames: false

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,4 +292,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
292292

293293
---
294294

295-
**For complete details, see [V1_RELEASE_SUMMARY.md](V1_RELEASE_SUMMARY.md)**
295+
**For complete details, see [V1_RELEASE_SUMMARY.md](V1_RELEASE_SUMMARY.md)**

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
# **Playlistarr**
22

3-
**Version:** 1.2
3+
---
4+
![CI](https://github.com/zdhoward/playlistarr/actions/workflows/ci.yml/badge.svg)
5+
![Python](https://img.shields.io/badge/python-3.10%2B-blue)
6+
![License](https://img.shields.io/github/license/zdhoward/playlistarr)
7+
![Last Commit](https://img.shields.io/github/last-commit/zdhoward/playlistarr)
8+
![Status](https://img.shields.io/badge/status-beta-yellow)
9+
10+
### **Version:** 1.2.1
411

512
Playlistarr is a **production-grade YouTube playlist automation engine** for homelabbers and self-hosters.
613

7-
It discovers official music videos for artists, applies deterministic filtering rules, and keeps YouTube playlists continuously in sync **while being fully quota-aware, resumable, and log-driven**.
14+
It discovers official music videos for artists, applies deterministic filtering rules, and keeps YouTube playlists continuously in sync - **while being fully quota-aware, resumable, and log-driven**.
815

916
This is not a “download everything” scraper.
1017
It is a **self-healing playlist maintenance system** designed to run safely over time with minimal supervision.
@@ -303,4 +310,4 @@ PRs that reduce safety guarantees will be rejected.
303310

304311
## **License**
305312

306-
MIT
313+
MIT

cache/auth_dummy.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
artist

config/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ LOG_FORMAT=json # json or text
3232

3333
# Development settings (optional)
3434
# DEVELOPMENT_MODE=true
35-
# DRY_RUN_DEFAULT=true
35+
# DRY_RUN_DEFAULT=true

0 commit comments

Comments
 (0)