[BACKEND] Parallelize tests, remove track and artist source variables (#246)

This commit is contained in:
Jesse Bannon 2022-09-27 16:51:42 -07:00 committed by GitHub
parent 3d0ade1141
commit 1486acb421
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 260 additions and 171 deletions

View file

@ -8,30 +8,195 @@ on:
branches:
- master
jobs:
build:
test-build:
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ffmpeg
python -m pip install --upgrade pip
python -m venv /opt/env
source /opt/env/bin/activate
pip install -e .[lint,test]
- name: Save Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
test-lint:
runs-on: ubuntu-22.04
needs: test-build
permissions:
contents: read
steps:
- uses: actions/checkout@v3
- name: Restore Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
- name: Run linters
run: |
source /opt/env/bin/activate
./tools/linter check
- name: Run tests with coverage
test-unit:
runs-on: ubuntu-22.04
needs: test-build
permissions:
contents: read
steps:
- uses: actions/checkout@v3
- name: Restore Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
- name: Run unit tests with coverage
run: |
./tools/test xml
source /opt/env/bin/activate
coverage run -m pytest tests/unit && coverage xml -o /opt/coverage/unit/coverage.xml
- name: Save coverage
uses: actions/cache@v3
with:
path: /opt/coverage/unit
key: ${{github.sha}}-coverage-unit
test-soundcloud:
runs-on: ubuntu-22.04
needs: test-build
permissions:
contents: read
steps:
- uses: actions/checkout@v3
- name: Restore Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
- name: Run e2e soundcloud tests with coverage
run: |
sudo apt-get install -y ffmpeg
source /opt/env/bin/activate
coverage run -m pytest tests/e2e/soundcloud && coverage xml -o /opt/coverage/soundcloud/coverage.xml
- name: Save coverage
uses: actions/cache@v3
with:
path: /opt/coverage/soundcloud
key: ${{github.sha}}-coverage-soundcloud
test-youtube:
runs-on: ubuntu-22.04
needs: test-build
permissions:
contents: read
steps:
- uses: actions/checkout@v3
- name: Restore Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
- name: Run e2e youtube tests with coverage
run: |
sudo apt-get install -y ffmpeg
source /opt/env/bin/activate
coverage run -m pytest tests/e2e/youtube && coverage xml -o /opt/coverage/youtube/coverage.xml
- name: Save coverage
uses: actions/cache@v3
with:
path: /opt/coverage/youtube
key: ${{github.sha}}-coverage-youtube
test-plugins:
runs-on: ubuntu-22.04
needs: test-build
permissions:
contents: read
steps:
- uses: actions/checkout@v3
- name: Restore Python build cache
uses: actions/cache@v3
with:
path: /opt/env
key: ${{github.sha}}-env
- name: Run e2e plugin tests with coverage
run: |
sudo apt-get install -y ffmpeg
source /opt/env/bin/activate
coverage run -m pytest tests/e2e/plugins && coverage xml -o /opt/coverage/plugins/coverage.xml
- name: Save coverage
uses: actions/cache@v3
with:
path: /opt/coverage/plugins
key: ${{github.sha}}-coverage-plugins
codecov-upload:
runs-on: ubuntu-22.04
needs: [
test-unit,
test-soundcloud,
test-youtube,
test-plugins
]
permissions:
contents: read
steps:
- name: Restore unit test coverage
uses: actions/cache@v3
with:
path: /opt/coverage/unit
key: ${{github.sha}}-coverage-unit
- name: Restore soundcloud test coverage
uses: actions/cache@v3
with:
path: /opt/coverage/soundcloud
key: ${{github.sha}}-coverage-soundcloud
- name: Restore youtube test coverage
uses: actions/cache@v3
with:
path: /opt/coverage/youtube
key: ${{github.sha}}-coverage-youtube
- name: Restore plugins test coverage
uses: actions/cache@v3
with:
path: /opt/coverage/plugins
key: ${{github.sha}}-coverage-plugins
- name: Upload code coverage to codecov.io
uses: codecov/codecov-action@v3
with:
files: ./coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
files: /opt/coverage/unit/coverage.xml,/opt/coverage/soundcloud/coverage.xml,/opt/coverage/youtube/coverage.xml,/opt/coverage/plugins/coverage.xml

View file

@ -49,7 +49,7 @@ jobs:
key: ${{github.sha}}
# Build ARM64 container
# Build ARM64 container, only on master branch to save time testing
package-arm64:
runs-on: ubuntu-latest
needs: [
@ -59,6 +59,7 @@ jobs:
permissions:
contents: read
if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v') }}
steps:
- uses: actions/checkout@v3
@ -135,7 +136,8 @@ jobs:
key: ${{github.sha}}
# On master branch, build the docker manifest file from the cached docker builds and push to the registry
# On master branch, build the docker manifest file from the cached
# docker builds and push to the registry
deploy:
runs-on: ubuntu-latest
needs: [

View file

@ -55,9 +55,11 @@ presets:
# Overrides is a section where we can define our own variables, and use them in
# any other section. We define our music video directory and episode file name
# here, which gets reused above for the video, thumbnail, and NFO file.
# Recommended to override the artist variable.
overrides:
music_video_directory: "path/to/Music Videos"
music_video_name: "{artist_sanitized} - {title_sanitized}"
artist: "{channel}"
# It is not always ideal to download all of an artist's music videos.
# Maybe you only like one song of theirs. We can reuse our preset above

View file

@ -30,7 +30,7 @@ presets:
music_directory: "/path/to/music"
custom_track_name: "{title}"
custom_album_name: "Singles"
custom_artist_name: "{artist}"
custom_artist_name: "{channel}"
custom_track_number: "1"
# TODO: make a playlist of individual songs into an album. Need playlist_title

View file

@ -28,51 +28,6 @@ class YoutubeVideoVariables(EntryVariables):
"""
return sanitize_filename(self.channel)
@property
def track_title(self: BaseEntry) -> str:
"""
Returns
-------
str
The track title of a music video if it is available, otherwise it falls back to the
title. NOTE: Even if a video has music metadata, this variable does not always get
pulled via yt-dlp. Use with caution.
"""
# Try to get the track, fall back on title
return self.kwargs_get("track", super().title)
@property
def track_title_sanitized(self) -> str:
"""
Returns
-------
str
The sanitized track title.
"""
return sanitize_filename(self.track_title)
@property
def artist(self: BaseEntry) -> str:
"""
Returns
-------
str
The artist of a music video if it is available, otherwise it falls back to the channel.
NOTE: Even if a video has music metadata, this variable does not always get pulled via
yt-dlp. Use with caution.
"""
return self.kwargs_get("artist", self.kwargs("channel"))
@property
def artist_sanitized(self) -> str:
"""
Returns
-------
str
The sanitized artist name.
"""
return sanitize_filename(self.artist)
@property
def playlist_index(self) -> int:
"""

View file

@ -46,11 +46,6 @@ def regex_subscription_dict(output_directory):
"Second containing {in_regex_default}",
],
},
"artist": {
"match": ["Never (.*) capture"],
"capture_group_names": ["always_default"],
"capture_group_defaults": ["Always default"],
},
},
},
"nfo_tags": {
@ -60,8 +55,6 @@ def regex_subscription_dict(output_directory):
"title_cap_2": "{title_date}",
"desc_cap": "{description_website}",
"upload_date_both_caps": "{upload_captured_year} and {upload_captured_month}",
"artist_cap_always_default": "{always_default}",
"artist_cap_always_default_sanitized": "{always_default_sanitized}",
"override_with_capture_variable": "{contains_regex_default}",
"override_with_capture_variable_sanitized": "{contains_regex_sanitized_default}",
}

View file

@ -46,7 +46,7 @@ def yt_album_as_chapters_with_regex_preset_dict(yt_album_as_chapters_preset_dict
"captured_album",
],
"capture_group_defaults": [
"{artist}",
"{channel}",
"{title}",
],
},

View file

@ -1,12 +1,12 @@
{
".ytdl-sub-recent-download-archive.json": "23520634f7908081f3d1333a1441a578",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.info.json": "1f3a258a331dbec8513f07efb9311b4b",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.info.json": "200abe9cf0fbb96ef69698a633f7bebb",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.mp4": "82f6ee7253e1dbb83ae7215af08ffacc",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.nfo": "368d68db0cbe9eb4f43ece0517445e82",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "444c5c772742074552ca48bf1ff37e02",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "7d7f3ce72ed87faef5675af218cecb30",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.nfo": "d9114d43d87907b2afc06eb089a8ac0a",
"fanart.jpg": "129c6639b47299bc48062f0365e670ee",

View file

@ -2,7 +2,7 @@
".ytdl-sub-recent-download-archive.json": "3bbf72c014d055ecf672c8ea603140f7",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "444c5c772742074552ca48bf1ff37e02",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "7d7f3ce72ed87faef5675af218cecb30",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.nfo": "d9114d43d87907b2afc06eb089a8ac0a",
"fanart.jpg": "129c6639b47299bc48062f0365e670ee",

View file

@ -1,15 +1,15 @@
{
"01. Intro (Feat. Racheal Ofori & Barney Artist).info.json": "d6caed6a753a43d0b04631cef1a8dcb7",
"02. Answers (Feat. Rick David & Kaya Thomas - Dyke).info.json": "2bc497a07f620b2869737c91d4b2408e",
"03. Blaze (Feat. Kaya Thomas - Dyke).info.json": "50f1a853a78d17455f6b07283f13b77b",
"04. What If (Interlude).info.json": "59cfcb53a073943da369ff1e6ebdb3cb",
"05. No Peace (Feat. Tom Misch).info.json": "429ca06333d06d09ea5e958a98afa343",
"06. Closer (Feat. Lester Duval).info.json": "64fca065f1d01bb71cdff18b4e3526e3",
"07. Delusions Rumination (Interlude) (Feat. Racheal Ofori).info.json": "dccc927e7522642cca3b79c6c15a9c80",
"08. Dreams (Feat. Carmody).info.json": "18e9a4f4609c9110a9da1669debdaf90",
"09. Dreaming (Interlude) (Feat. Racheal Ofori).info.json": "5393cc84a1b48e365ea337c28a66b3ba",
"10. Hopeful (Feat. Jordan Rakei).info.json": "117df1e4cbb2e3d476bc7b2608c3a656",
"11. Sunrise (Pillows) (Feat. Emmavie).info.json": "4ec5967d4a77ef974325243c317b6c0f",
"01. Intro (Feat. Racheal Ofori & Barney Artist).info.json": "94a46b3263d7a0c144371e19107d3cf6",
"02. Answers (Feat. Rick David & Kaya Thomas - Dyke).info.json": "53748da13a12862098594051041a84d1",
"03. Blaze (Feat. Kaya Thomas - Dyke).info.json": "1dfe88b81ad1e6bd25b9ce3a94b0ce1e",
"04. What If (Interlude).info.json": "65b165b1d2ec5184fa7894350b4594e1",
"05. No Peace (Feat. Tom Misch).info.json": "c47761519802a1a9f2078c1ffa58ab05",
"06. Closer (Feat. Lester Duval).info.json": "0fa1a9de65f828e35825c0431c7fc72e",
"07. Delusions Rumination (Interlude) (Feat. Racheal Ofori).info.json": "fa8566864fd40d358f932a8e701f159e",
"08. Dreams (Feat. Carmody).info.json": "366b8c6d86ac3f4978916acf0f770f9a",
"09. Dreaming (Interlude) (Feat. Racheal Ofori).info.json": "79a5c6131e95d943f3ca8e97e9e3fcf3",
"10. Hopeful (Feat. Jordan Rakei).info.json": "a3b98eea72b55353fb05250beafe6634",
"11. Sunrise (Pillows) (Feat. Emmavie).info.json": "8d0ab69f6b93bed6737f3f04e51e9a24",
"Alfa Mist - Nocturne [Full Album]/01 - 01. Intro (Feat. Racheal Ofori & Barney Artist).mp3": "ddc24257729f24055bf1b8dc06f8224c",
"Alfa Mist - Nocturne [Full Album]/02 - 02. Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "10dd7f13c469bd51ffcf3f8ff3ed3d69",
"Alfa Mist - Nocturne [Full Album]/03 - 03. Blaze (Feat. Kaya Thomas - Dyke).mp3": "376722aaf08d1ef6dcba0aaf7a3b7a79",

View file

@ -1,5 +1,5 @@
{
"Oblivion Mod Falcor p.1.info.json": "1f0ddcab2854a515d27fba208ad23714",
"Oblivion Mod Falcor p.1.info.json": "5357a4ad737634396c577883ae586516",
"Oblivion Mod Falcor p.1/01 - Oblivion Mod Falcor p.1.mp3": "703ffb93964ac025ee66221b98ee4d49",
"Oblivion Mod Falcor p.1/folder.jpg": "fb95b510681676e81c321171fc23143e"
}

View file

@ -1,13 +1,13 @@
{
"Answers (Feat. Rick David & Kaya Thomas - Dyke).info.json": "02a0382fb418e279ae378ae6c79ba736",
"Blaze (Feat. Kaya Thomas - Dyke).info.json": "48ee2257b62a7e2d152bf6633105704a",
"Closer (Feat. Lester Duval).info.json": "4f3f15c93f5fbe5f9bf5154eb3da3ecd",
"Delusions Rumination (Interlude) (Feat. Racheal Ofori).info.json": "15e3184ac935672ef51ca0ffea44a25d",
"Dreaming (Interlude) (Feat. Racheal Ofori).info.json": "bf97ae0ddddd3dc6546a50ff42e9861e",
"Dreams (Feat. Carmody).info.json": "ab159ed943d1b5d41fe1efd98c94d973",
"Hopeful (Feat. Jordan Rakei).info.json": "05c32307125de1a28586be687c675cc1",
"Intro (Feat. Racheal Ofori & Barney Artist).info.json": "c5dcd31ecc441011f9de08a999f5b0da",
"No Peace (Feat. Tom Misch).info.json": "0f9f982f6e41c73f9925ef18f7c591c6",
"Answers (Feat. Rick David & Kaya Thomas - Dyke).info.json": "3cb3f1eec1813da1a09e2a2be0435fe3",
"Blaze (Feat. Kaya Thomas - Dyke).info.json": "a8600671c5c19683d405579185b51dbd",
"Closer (Feat. Lester Duval).info.json": "d46241bc3b6322838aa3634f5d4b74f4",
"Delusions Rumination (Interlude) (Feat. Racheal Ofori).info.json": "fdeb58df8b9d55f7ddbb52fa3ac274d5",
"Dreaming (Interlude) (Feat. Racheal Ofori).info.json": "e3d5795ea6c596d6d97244daadf55fe9",
"Dreams (Feat. Carmody).info.json": "bcc5e14e8a25a62dfe6ab014a1eb98be",
"Hopeful (Feat. Jordan Rakei).info.json": "5643583ca640949f95d5e9ca135048aa",
"Intro (Feat. Racheal Ofori & Barney Artist).info.json": "49ef8e8555483a57773ce4573c9adbe9",
"No Peace (Feat. Tom Misch).info.json": "2ed45e531fdc46712dc6db1a8cc05f94",
"Nocturne/01 - Intro (Feat. Racheal Ofori & Barney Artist).mp3": "15157be58e0f72485de1e7e10961321f",
"Nocturne/02 - Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "28ff5e2dda45771f1c6d5265dd03095e",
"Nocturne/03 - Blaze (Feat. Kaya Thomas - Dyke).mp3": "705d7fc1799c1a14aa0656bd6e2bf260",
@ -20,6 +20,6 @@
"Nocturne/10 - Hopeful (Feat. Jordan Rakei).mp3": "ef7e06690ac849e1dd35771936d6ddb6",
"Nocturne/11 - Sunrise (Pillows) (Feat. Emmavie).mp3": "56293fb70edc1ef7decc2d417d87ff1d",
"Nocturne/folder.jpg": "bd3685acc53072e591bae2505ecb0648",
"Sunrise (Pillows) (Feat. Emmavie).info.json": "d90c8d11cd2cf7ec20c2b992c74bb93d",
"What If (Interlude).info.json": "c7f78947b22f8ebd838bd4df076944b2"
"Sunrise (Pillows) (Feat. Emmavie).info.json": "c2671abc8c942b8a6eac6f46f80be93f",
"What If (Interlude).info.json": "2df295486a3265b73979984f815f7983"
}

View file

@ -1,8 +1,8 @@
{
"Jesse's Minecraft Server [Trailer - Feb.1].info.json": "15940eb703b80f718f8b23b98259ddff",
"Jesse's Minecraft Server [Trailer - Feb.1].info.json": "c80b80fa2ba893d54b1468cdabd223d8",
"Jesse's Minecraft Server [Trailer - Feb.1].ogg": "16f66f1d81541a1f18b62bc08ad01d16",
"Jesse's Minecraft Server [Trailer - Feb.27].info.json": "84a6b6484a68179dac72ec2247a3eb22",
"Jesse's Minecraft Server [Trailer - Feb.27].info.json": "55cd6350a21653ff7b988e665b3ea923",
"Jesse's Minecraft Server [Trailer - Feb.27].ogg": "6f322d842a1e43b4c9981b42423d9b4c",
"Jesse's Minecraft Server [Trailer - Mar.21].info.json": "7913fbea2ad4d5ea748342559a1a4d82",
"Jesse's Minecraft Server [Trailer - Mar.21].info.json": "5dd992c1dc201e83870af317e12cdd43",
"Jesse's Minecraft Server [Trailer - Mar.21].ogg": "fe1dc3361a102661c27020d5b95a2a81"
}

View file

@ -1,4 +1,4 @@
{
"YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "1ed6876a5e9d78654667a33ff71b2ea3",
"YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "6ef6fd3f6b1b0f4f7736d85e618777ac",
"YouTube Rewind 2019 For the Record #YouTubeRewind.mp3": "3a156b122bd79c956cce5079d3530cc3"
}

View file

@ -1,6 +1,6 @@
{
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case-thumb.jpg": "b5353a824a4800cc26f884e3025ed969",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "f6ccef77e006c1c6c9ef5c94df5e38f2",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "2d40822bf4c0527f9080f00357b26ce0",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "d5e2788100b6f0578fb0d7111e422785",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "7e53f29dcc257882d947dd4728407745",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.nfo": "b9bd35e4f260c728774d8dd31f83637c"
}

View file

@ -1,6 +1,6 @@
{
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case-thumb.jpg": "b5353a824a4800cc26f884e3025ed969",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "e49ee50fbe88e7d1415f2df84e9c85cb",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "6f0bac1c364ff3bb13d3e8a955aaa002",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "a242fdeba2d172c8bc359298c7329f27",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "a1f8b2973eb7c703e08baf85d9a26ac9",
"JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.nfo": "b9bd35e4f260c728774d8dd31f83637c"
}

View file

@ -1,6 +1,6 @@
{
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "d34427224f4dbc62a0c6b48dbd10ec01",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "c476aae219a3d3fa7a78b4afb145e8b5",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.mp4": "8562853314b75c1e47abd4f5ba97315c",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48"
}

View file

@ -2,7 +2,7 @@
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.de.srt": "b343c3bb9257b7ee7ba38f570a115b37",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.en.srt": "fe8c6ee92cae6e059fd80fd61691adbe",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "9cdc849168fbc91724fe6fe6e4b72fed",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.info.json": "083591b51f393cd2d426fa9828d2e6fa",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.mp4": "8562853314b75c1e47abd4f5ba97315c",
"JMC - YouTube Rewind 2019 For the Record #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48"
}

View file

@ -1,32 +1,32 @@
{
".ytdl-sub-jb-download-archive.json": "1114f07090dfb35eea6848efeaf9755a",
"j_b/[2021] Baby Santana's Dorian Groove/01 - Baby Santana's Dorian Groove.info.json": "5eb47f40cb9de8fd324d66c31995f934",
"j_b/[2021] Baby Santana's Dorian Groove/01 - Baby Santana's Dorian Groove.info.json": "dd5596c895aa015734548b0012644ddd",
"j_b/[2021] Baby Santana's Dorian Groove/01 - Baby Santana's Dorian Groove.mp3": "bffbd558e12c6a9e029dc136a88342c4",
"j_b/[2021] Baby Santana's Dorian Groove/folder.jpg": "967892be44b8c47e1be73f055a7c6f08",
"j_b/[2021] Purple Clouds/01 - Purple Clouds.info.json": "3301ac86ee70a05abe0588277d1e4a6c",
"j_b/[2021] Purple Clouds/01 - Purple Clouds.info.json": "86aaba3d72d84a54c3f1f9e0f1bb54e7",
"j_b/[2021] Purple Clouds/01 - Purple Clouds.mp3": "038db58aebe2ba875b733932b42a94d6",
"j_b/[2021] Purple Clouds/folder.jpg": "967892be44b8c47e1be73f055a7c6f08",
"j_b/[2022] Acoustic Treats/01 - 20160426 184214.info.json": "6d5cc99d594bd5b7183a37b005225400",
"j_b/[2022] Acoustic Treats/01 - 20160426 184214.info.json": "7cc6f9db8e623861534c78de7aa1147c",
"j_b/[2022] Acoustic Treats/01 - 20160426 184214.mp3": "e145f0a2f6012768280c38655ca58065",
"j_b/[2022] Acoustic Treats/02 - 20160502 123150.info.json": "6d73a0fc77aa8b718857236d9f7c6cbd",
"j_b/[2022] Acoustic Treats/02 - 20160502 123150.info.json": "501cf469c5be8317e2be04bc2243d404",
"j_b/[2022] Acoustic Treats/02 - 20160502 123150.mp3": "60c8b8817a197a13e4bb90903af612c5",
"j_b/[2022] Acoustic Treats/03 - 20160504 143832.info.json": "4e6fc80669ee79572182d3066575a6a7",
"j_b/[2022] Acoustic Treats/03 - 20160504 143832.info.json": "bf80d5682e4a060c1e32ee7d88899894",
"j_b/[2022] Acoustic Treats/03 - 20160504 143832.mp3": "8265b7e4f79878af877bc6ecd9757efe",
"j_b/[2022] Acoustic Treats/04 - 20160601 221234.info.json": "80aef642112e661d6eb30e0038cc7aed",
"j_b/[2022] Acoustic Treats/04 - 20160601 221234.info.json": "8ae1746c6dc67cebf1e3df36584238f5",
"j_b/[2022] Acoustic Treats/04 - 20160601 221234.mp3": "accf46b76891d2954b893d0f91d82816",
"j_b/[2022] Acoustic Treats/05 - 20160601 222440.info.json": "25e5abf44f3bdb57c045c82121f7d11c",
"j_b/[2022] Acoustic Treats/05 - 20160601 222440.info.json": "ca3e17cdde4709f265fcab0df8c96259",
"j_b/[2022] Acoustic Treats/05 - 20160601 222440.mp3": "e1f584f523336160d5c1104a61de77f3",
"j_b/[2022] Acoustic Treats/06 - 20170604 190236.info.json": "4524f03ec40823085bc08294b108bfa9",
"j_b/[2022] Acoustic Treats/06 - 20170604 190236.info.json": "7109c43eca4316aa0b18151b7480d8da",
"j_b/[2022] Acoustic Treats/06 - 20170604 190236.mp3": "f6885b25901177f0357649afe97328cc",
"j_b/[2022] Acoustic Treats/07 - 20170612 193646.info.json": "83e5d1403994a9ecd20a9dcb545a4cb6",
"j_b/[2022] Acoustic Treats/07 - 20170612 193646.info.json": "5419304bbd7c27ac5b12e1a56bd6a504",
"j_b/[2022] Acoustic Treats/07 - 20170612 193646.mp3": "fa057f221cbe4cf2442cd2fdb960743e",
"j_b/[2022] Acoustic Treats/08 - 20170628 215206.info.json": "5bccfb88c2441af51294cefb988ef131",
"j_b/[2022] Acoustic Treats/08 - 20170628 215206.info.json": "139549303915d2bc35addd1ecdd5cd4a",
"j_b/[2022] Acoustic Treats/08 - 20170628 215206.mp3": "7794ae812c64580e2ac8fc457d5cc85f",
"j_b/[2022] Acoustic Treats/09 - Finding Home.info.json": "84347cdbfb61ed1e2c21d3cab7325966",
"j_b/[2022] Acoustic Treats/09 - Finding Home.info.json": "85a11cc5860bdfbd6577601043f6aa9b",
"j_b/[2022] Acoustic Treats/09 - Finding Home.mp3": "adbf02eddb2090c008eb497d13ff84b9",
"j_b/[2022] Acoustic Treats/10 - Shallow Water WIP.info.json": "1eacf5411e7e7041609c9d194013c78d",
"j_b/[2022] Acoustic Treats/10 - Shallow Water WIP.info.json": "7317859f8b458a22a51e2aef2a4418f5",
"j_b/[2022] Acoustic Treats/10 - Shallow Water WIP.mp3": "65bb10c84366c71498161734f953e93d",
"j_b/[2022] Acoustic Treats/11 - Untold History.info.json": "0ab0eb6aa6e8b3f38076aeed0fae2a13",
"j_b/[2022] Acoustic Treats/11 - Untold History.info.json": "d240bb16200eb688a46bc746af74dbc9",
"j_b/[2022] Acoustic Treats/11 - Untold History.mp3": "6904b2918e5dc38d9a9f72d967eb74bf",
"j_b/[2022] Acoustic Treats/folder.jpg": "967892be44b8c47e1be73f055a7c6f08"
}

View file

@ -1,52 +1,52 @@
{
".ytdl-sub-pz-download-archive.json": "70615451318cdb5e018e007c77893a39",
"Season 2010/s2010.e0813 - Oblivion Mod Falcor p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
"Season 2010/s2010.e0813 - Oblivion Mod Falcor p.1.info.json": "321813dd5598303d5fc91c7aa302f1b5",
"Season 2010/s2010.e0813 - Oblivion Mod Falcor p.1.info.json": "5a73e1a5de066b11b8c228f8881d790c",
"Season 2010/s2010.e0813 - Oblivion Mod Falcor p.1.mp4": "931a705864c57d21d6fedebed4af6bbc",
"Season 2010/s2010.e0813 - Oblivion Mod Falcor p.1.nfo": "2d0738094d8e649eaebbab16fd647da1",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2-thumb.jpg": "8b32ee9c037fa669e444a0ac181525a1",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2.info.json": "461c98e86a4c3848fd89671a78900131",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2.mp4": "d3469b4dca7139cb3dbc38712b6796bf",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2.info.json": "a43092fc871ab2f6697adc8f60a14dd2",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2.mp4": "0b11a785addfac82a6c1dbc897c0a8f9",
"Season 2010/s2010.e1202 - Oblivion Mod Falcor p.2.nfo": "5c258f9e54854ef292ce3c58331da110",
"Season 2011/s2011.e0201 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d",
"Season 2011/s2011.e0201 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "ccb88e48fa500e74f7a51fcac5d4934d",
"Season 2011/s2011.e0201 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "d3d7c8b13a89b461c748f6239efb450f",
"Season 2011/s2011.e0201 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "e66287b9832277b6a4d1554e29d9fdcc",
"Season 2011/s2011.e0201 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "abb3ac33366cc3b86d0467c8fb80a323",
"Season 2011/s2011.e0227 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb",
"Season 2011/s2011.e0227 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "157d3cb2fdb0f47d924fbab5a07bbe9e",
"Season 2011/s2011.e0227 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "25824e1e019ba1ac3ad37167bc476d05",
"Season 2011/s2011.e0227 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "04ab5cb3cc12325d0c96a7cd04a8b91d",
"Season 2011/s2011.e0227 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "46190954652c9d9812e061fc0c9e1d92",
"Season 2011/s2011.e0321 - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530",
"Season 2011/s2011.e0321 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "9660710f3aab66cbfaaa485eac55db13",
"Season 2011/s2011.e0321 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "5650cf47773fa4f8236e6fe62957759b",
"Season 2011/s2011.e0321 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "025de6099a5c98e6397153c7a62d517d",
"Season 2011/s2011.e0321 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "30993fa8e00a0e370b4db244f3da8f7d",
"Season 2011/s2011.e0529 - Project Zombie Official Trailer (IP mc.projectzombie.beastnode.net)-thumb.jpg": "c956192a379b3661595c9920972d4819",
"Season 2011/s2011.e0529 - Project Zombie Official Trailer (IP mc.projectzombie.beastnode.net).info.json": "d43ca09cff753e13c4d4badaad8b8cf3",
"Season 2011/s2011.e0529 - Project Zombie Official Trailer (IP mc.projectzombie.beastnode.net).info.json": "23878cc3a8db1d836ec72261e4d7a95f",
"Season 2011/s2011.e0529 - Project Zombie Official Trailer (IP mc.projectzombie.beastnode.net).mp4": "3d9c19835b03355d6fd5d00cd59dbe5b",
"Season 2011/s2011.e0529 - Project Zombie Official Trailer (IP mc.projectzombie.beastnode.net).nfo": "11a0e8754c414875bcd454358683da5f",
"Season 2011/s2011.e0630 - Project Zombie Fin-thumb.jpg": "00ed383591779ffe98291de60f198fe9",
"Season 2011/s2011.e0630 - Project Zombie Fin.info.json": "351c14be8af8b7811515533f778252af",
"Season 2011/s2011.e0630 - Project Zombie Fin.info.json": "e6f93de0450c83fdd90ba3f6cade5d07",
"Season 2011/s2011.e0630 - Project Zombie Fin.mp4": "4971cb2d4fa29460361031f3fa8e1ea9",
"Season 2011/s2011.e0630 - Project Zombie Fin.nfo": "a464b9c8c48a9a5d4776436d8108f8f5",
"Season 2011/s2011.e1121 - Skyrim 'Ultra HD wMods' [PC]-thumb.jpg": "1718599d5189c65f7d8cf6acfa5ea851",
"Season 2011/s2011.e1121 - Skyrim 'Ultra HD wMods' [PC].info.json": "a46366e7be54d3cb755a8a2994a55d3e",
"Season 2011/s2011.e1121 - Skyrim 'Ultra HD wMods' [PC].info.json": "c1a04de7bc628b88b32a774f656e890a",
"Season 2011/s2011.e1121 - Skyrim 'Ultra HD wMods' [PC].mp4": "55e9b0add08c48c9c66105da0def2426",
"Season 2011/s2011.e1121 - Skyrim 'Ultra HD wMods' [PC].nfo": "3562934ab9a5e802d955eda24ad355de",
"Season 2012/s2012.e0123 - Project Zombie Map Trailer-thumb.jpg": "54ebe9df801b278fdd17b21afa8373a6",
"Season 2012/s2012.e0123 - Project Zombie Map Trailer.info.json": "64857d41adcad52bf97611e4fcae292d",
"Season 2012/s2012.e0123 - Project Zombie Map Trailer.info.json": "7daa381b23f0cbb14d84661b706bd424",
"Season 2012/s2012.e0123 - Project Zombie Map Trailer.mp4": "65e4ce53ed5ec4139995469f99477a50",
"Season 2012/s2012.e0123 - Project Zombie Map Trailer.nfo": "5e810d839be90dab579400a6177f90b3",
"Season 2013/s2013.e0719 - Project Zombie Rewind Trailer-thumb.jpg": "e29d49433175de8a761af35c5307791f",
"Season 2013/s2013.e0719 - Project Zombie Rewind Trailer.info.json": "8d18bb9557625b910dd044f158969d05",
"Season 2013/s2013.e0719 - Project Zombie Rewind Trailer.info.json": "23bb9520f84cfb759f23b5dd4e820b21",
"Season 2013/s2013.e0719 - Project Zombie Rewind Trailer.mp4": "18620a8257a686beda65e54add4d4cd1",
"Season 2013/s2013.e0719 - Project Zombie Rewind Trailer.nfo": "83772bec917bb5d71e1ca0c061c1ec78",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.info.json": "d9088a723ce5445c88bf72cb5a39b933",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.info.json": "2a0033e6f81b3a186241c3274b17c520",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.mp4": "82f6ee7253e1dbb83ae7215af08ffacc",
"Season 2018/s2018.e1029 - Jesse's Minecraft Server Teaser Trailer.nfo": "368d68db0cbe9eb4f43ece0517445e82",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "7907cf957d8de4d4036af60d686061f5",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.info.json": "8708fa01466ce60aa3a405c8aad08ac1",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e",
"Season 2018/s2018.e1102 - Jesse's Minecraft Server IP mc.jesse.id.nfo": "d9114d43d87907b2afc06eb089a8ac0a",
"fanart.jpg": "129c6639b47299bc48062f0365e670ee",

View file

@ -1,6 +1,6 @@
{
"JMC - Jesse's Minecraft Server-thumb.jpg": "a3f1910f9c51f6442f845a528e190829",
"JMC - Jesse's Minecraft Server.info.json": "5f54afde1f0965c2ede30291d978c7bf",
"JMC - Jesse's Minecraft Server.info.json": "5d521fdb7b735e69080ac31fb67eaa99",
"JMC - Jesse's Minecraft Server.mkv": "21f246b1c922e11add509ea26c43c53d",
"JMC - Jesse's Minecraft Server.nfo": "d16396c60b63c06a4f2c9239553bdf61"
}

View file

@ -1,16 +1,16 @@
{
".ytdl-sub-music_video_playlist_test-download-archive.json": "25b8e44961343116436584e341c7fe9b",
"JMC - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d",
"JMC - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "a1763e5afb49be0935d932334336f62f",
"JMC - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "2c8bf622feb28760376c76afe4a9f7b5",
"JMC - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "e66287b9832277b6a4d1554e29d9fdcc",
"JMC - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "f8fd72bb97ed03938487494ad9094ca0",
"JMC - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb",
"JMC - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "2d3b4299450776edd822514d071671a4",
"JMC - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "009323eb966a7ad9b47abcbe499fc6e2",
"JMC - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "04ab5cb3cc12325d0c96a7cd04a8b91d",
"JMC - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "6de4d997cfb300356072b4ebb09cbe38",
"JMC - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530",
"JMC - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "17a942919cb951d7cfd0dcc502bf4499",
"JMC - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "4bcc266ee276d45da869c37cd8caa084",
"JMC - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "025de6099a5c98e6397153c7a62d517d",
"JMC - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "f000a6ed8caacb62a134a6ca81e3f308",
"tvshow.nfo": "792b0594defdfd6642086b76fcc6a91b"
"tvshow.nfo": "e4123860532466ed5e0ebf2c9e44eb18"
}

View file

@ -1,6 +1,6 @@
{
"JMC - Oblivion Mod Falcor p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
"JMC - Oblivion Mod Falcor p.1.info.json": "9ded1b3bd37e1d8d04a417dfb8291810",
"JMC - Oblivion Mod Falcor p.1.info.json": "a1f343b06752c39dfdf07a26c836f5e9",
"JMC - Oblivion Mod Falcor p.1.mp4": "28c14cdac05c803efe71abb9454ab306",
"JMC - Oblivion Mod Falcor p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e"
}

View file

@ -1,8 +1,8 @@
Files created in '{output_directory}'
----------------------------------------
Rick Beato - Can you hear the difference 🎸🔥 #shorts-thumb.jpg
Rick Beato - Can you hear the difference 🎸🔥 #shorts.3gp
Rick Beato - Can you hear the difference 🎸🔥 #shorts.info.json
Rick Beato - Can you hear the difference 🎸🔥 #shorts.mp4
Rick Beato - Can you hear the difference 🎸🔥 #shorts.nfo
NFO tags:
musicvideo:

View file

@ -1,8 +1,8 @@
Files created in '{output_directory}'
----------------------------------------
Rick Beato - Can you hear the difference 🎸🔥 #shorts-thumb.jpg
Rick Beato - Can you hear the difference 🎸🔥 #shorts.3gp
Rick Beato - Can you hear the difference 🎸🔥 #shorts.info.json
Rick Beato - Can you hear the difference 🎸🔥 #shorts.mp4
Rick Beato - Can you hear the difference 🎸🔥 #shorts.nfo
NFO tags:
musicvideo:

View file

@ -9,8 +9,6 @@ Project Zombie - Jesse's Minecraft Server [Trailer - Feb.1].nfo
musicvideo:
album: Music Videos
artist: Project Zombie
artist_cap_always_default: Always default
artist_cap_always_default_sanitized: Always default
desc_cap: www.jesseminecraft.webs
override_with_capture_variable: contains Trailer
override_with_capture_variable_sanitized: contains Trailer
@ -28,8 +26,6 @@ Project Zombie - Jesse's Minecraft Server [Trailer - Feb.27].nfo
musicvideo:
album: Music Videos
artist: Project Zombie
artist_cap_always_default: Always default
artist_cap_always_default_sanitized: Always default
desc_cap: jesseminecraft.webs
override_with_capture_variable: contains Trailer
override_with_capture_variable_sanitized: contains Trailer

View file

@ -34,6 +34,6 @@ JMC - Jesse's Minecraft Server [Trailer - Mar.21].nfo
tvshow.nfo
NFO tags:
test:
source_description: Trailers, Updates, etc
source_title: Jesse's Minecraft Server
source_uploader: Project Zombie
playlist_description: Trailers, Updates, etc
playlist_title: Jesse's Minecraft Server
playlist_uploader: Project Zombie

View file

@ -1,12 +1,8 @@
from unittest.mock import patch
import pytest
from conftest import assert_debug_log
from e2e.expected_download import assert_expected_downloads
from e2e.expected_transaction_log import assert_transaction_log_matches
from ytdl_sub.subscriptions.subscription import Subscription
from ytdl_sub.utils.retry import logger as retry_logger
@pytest.fixture
@ -28,7 +24,7 @@ def channel_preset_dict(output_directory):
},
"output_directory_nfo_tags": {
"tags": {
"source_uploader": "{source_uploader}",
"source_uploader": "{playlist_uploader}",
}
},
"overrides": {"tv_show_name": "Project / Zombie"},

View file

@ -23,9 +23,9 @@ def playlist_preset_dict(output_directory):
"nfo_name": "tvshow.nfo",
"nfo_root": "test",
"tags": {
"source_title": "{source_title}",
"source_uploader": "{source_uploader}",
"source_description": "{source_description}",
"playlist_title": "{playlist_title}",
"playlist_uploader": "{playlist_uploader}",
"playlist_description": "{playlist_description}",
},
},
"subtitles": {

View file

@ -20,19 +20,7 @@ def channel():
@pytest.fixture
def track_title():
return "not the title!"
@pytest.fixture
def artist():
return "not the channel"
@pytest.fixture
def mock_youtube_video_to_dict(
mock_entry_to_dict, playlist_index, playlist_size, channel, track_title, artist
):
def mock_youtube_video_to_dict(mock_entry_to_dict, playlist_index, playlist_size, channel):
return dict(
mock_entry_to_dict,
**{
@ -40,26 +28,18 @@ def mock_youtube_video_to_dict(
"playlist_size": playlist_size,
"channel": channel,
"channel_sanitized": channel,
"track_title": track_title,
"track_title_sanitized": track_title,
"artist": artist,
"artist_sanitized": artist,
}
)
@pytest.fixture
def mock_youtube_video_kwargs(
mock_entry_kwargs, playlist_index, playlist_size, channel, track_title, artist
):
def mock_youtube_video_kwargs(mock_entry_kwargs, playlist_index, playlist_size, channel):
return dict(
mock_entry_kwargs,
**{
"playlist_index": playlist_index,
"playlist_count": playlist_size,
"channel": channel,
"track": track_title,
"artist": artist,
}
)