Merge branch 'source/bandcamp' into experimental
This commit is contained in:
commit
ae905b5fbf
@ -1,81 +0,0 @@
|
|||||||
# Details
|
|
||||||
|
|
||||||
Date : 2023-03-28 16:46:52
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 66 files, 4673 codes, 1082 comments, 1358 blanks, all 7113 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/__init__.py](/src/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| [src/donwload.py](/src/donwload.py) | Python | 9 | 0 | 6 | 15 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 24 | 7 | 14 | 45 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 3 | 2 | 3 | 8 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| [src/music_kraken/not_used_anymore/__init__.py](/src/music_kraken/not_used_anymore/__init__.py) | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_audio.py](/src/music_kraken/not_used_anymore/fetch_audio.py) | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_source.py](/src/music_kraken/not_used_anymore/fetch_source.py) | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/__init__.py](/src/music_kraken/not_used_anymore/metadata/__init__.py) | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_fetch.py](/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py) | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_search.py](/src/music_kraken/not_used_anymore/metadata/metadata_search.py) | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/__init__.py](/src/music_kraken/not_used_anymore/metadata/sources/__init__.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py](/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py) | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/__init__.py](/src/music_kraken/not_used_anymore/sources/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/genius.py](/src/music_kraken/not_used_anymore/sources/genius.py) | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/local_files.py](/src/music_kraken/not_used_anymore/sources/local_files.py) | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/musify.py](/src/music_kraken/not_used_anymore/sources/musify.py) | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/source.py](/src/music_kraken/not_used_anymore/sources/source.py) | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/youtube.py](/src/music_kraken/not_used_anymore/sources/youtube.py) | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 28 | 0 | 8 | 36 |
|
|
||||||
| [src/music_kraken/objects/album.py](/src/music_kraken/objects/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 85 | 30 | 37 | 152 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 259 | 62 | 60 | 381 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 66 | 31 | 31 | 128 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 445 | 83 | 95 | 623 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 118 | 17 | 40 | 175 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 29 | 7 | 9 | 45 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 180 | 32 | 53 | 265 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | 14 | 0 | 6 | 20 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | 98 | 8 | 42 | 148 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 441 | 86 | 111 | 638 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 500 | 248 | 135 | 883 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| [src/music_kraken/static_files/new_db.sql](/src/music_kraken/static_files/new_db.sql) | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| [src/music_kraken/static_files/temp_database_structure.sql](/src/music_kraken/static_files/temp_database_structure.sql) | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| [src/music_kraken/tagging/__init__.py](/src/music_kraken/tagging/__init__.py) | Python | 8 | 0 | 2 | 10 |
|
|
||||||
| [src/music_kraken/tagging/id3.py](/src/music_kraken/tagging/id3.py) | Python | 51 | 4 | 20 | 75 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| [src/music_kraken/utils/functions.py](/src/music_kraken/utils/functions.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/object_handeling.py](/src/music_kraken/utils/object_handeling.py) | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| [src/music_kraken/utils/phonetic_compares.py](/src/music_kraken/utils/phonetic_compares.py) | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 62 | 3 | 10 | 75 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 2 | 5 | 2 | 9 |
|
|
||||||
| [src/music_kraken_cli.py](/src/music_kraken_cli.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken_gtk.py](/src/music_kraken_gtk.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| [src/python.py](/src/python.py) | Python | 12 | 43 | 6 | 61 |
|
|
||||||
| [src/test.db](/src/test.db) | Database | 91 | 0 | 1 | 92 |
|
|
||||||
| [src/test.py](/src/test.py) | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| [src/tests/__init__.py](/src/tests/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/tests/conftest.py](/src/tests/conftest.py) | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| [src/try-programming-interface.py](/src/try-programming-interface.py) | Python | 14 | 98 | 22 | 134 |
|
|
||||||
| [src/try.py](/src/try.py) | Python | 1 | 0 | 3 | 4 |
|
|
||||||
| [src/try_python.py](/src/try_python.py) | Python | 13 | 20 | 9 | 42 |
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,55 +0,0 @@
|
|||||||
# Diff Details
|
|
||||||
|
|
||||||
Date : 2023-03-28 16:46:52
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 40 files, 523 codes, 22 comments, 130 blanks, all 675 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | -22 | -3 | -12 | -37 |
|
|
||||||
| [src/donwload.py](/src/donwload.py) | Python | 9 | 0 | 6 | 15 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | -18 | -4 | -3 | -25 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | -33 | -1 | -11 | -45 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | -18 | 0 | -4 | -22 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | -1 | 1 | 0 | 0 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 20 | -1 | 12 | 31 |
|
|
||||||
| [src/music_kraken/database/object_cache.py](/src/music_kraken/database/object_cache.py) | Python | -35 | -56 | -16 | -107 |
|
|
||||||
| [src/music_kraken/database/old_database.py](/src/music_kraken/database/old_database.py) | Python | -432 | -154 | -115 | -701 |
|
|
||||||
| [src/music_kraken/database/read.py](/src/music_kraken/database/read.py) | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| [src/music_kraken/database/temp_database.py](/src/music_kraken/database/temp_database.py) | Python | -12 | 0 | -8 | -20 |
|
|
||||||
| [src/music_kraken/database/write.py](/src/music_kraken/database/write.py) | Python | -210 | -62 | -63 | -335 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| [src/music_kraken/objects/album.py](/src/music_kraken/objects/album.py) | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| [src/music_kraken/objects/artist.py](/src/music_kraken/objects/artist.py) | Python | -18 | 0 | -5 | -23 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 33 | 15 | 13 | 61 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | -3 | -47 | -1 | -51 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 4 | 0 | 0 | 4 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | -3 | -6 | -3 | -12 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 44 | 16 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 108 | 2 | 5 | 115 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 2 | -21 | -1 | -20 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 7 | 0 | 2 | 9 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 107 | -36 | 26 | 97 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | 14 | 0 | 6 | 20 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | 98 | 8 | 42 | 148 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 100 | 20 | 20 | 140 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 500 | 248 | 135 | 883 |
|
|
||||||
| [src/music_kraken/target/__init__.py](/src/music_kraken/target/__init__.py) | Python | -4 | 0 | -2 | -6 |
|
|
||||||
| [src/music_kraken/target/set_target.py](/src/music_kraken/target/set_target.py) | Python | -37 | -7 | -18 | -62 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| [src/python.py](/src/python.py) | Python | 12 | 43 | 6 | 61 |
|
|
||||||
| [src/test.py](/src/test.py) | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| [src/tests/example_data_objects.py](/src/tests/example_data_objects.py) | Python | -36 | -5 | -6 | -47 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
@ -1,42 +0,0 @@
|
|||||||
"filename", "language", "Python", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", -22, -3, -12, -37
|
|
||||||
"/home/lars/Projects/music-downloader/src/donwload.py", "Python", 9, 0, 6, 15
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", -18, -4, -3, -25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", -33, -1, -11, -45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", -18, 0, -4, -22
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", -1, 1, 0, 0
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 20, -1, 12, 31
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/object_cache.py", "Python", -35, -56, -16, -107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/old_database.py", "Python", -432, -154, -115, -701
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/read.py", "Python", 0, 0, -1, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/temp_database.py", "Python", -12, 0, -8, -20
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/write.py", "Python", -210, -62, -63, -335
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 4, 0, 1, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/album.py", "Python", 1, 0, 0, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/artist.py", "Python", -18, 0, -5, -23
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 33, 15, 13, 61
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", -3, -47, -1, -51
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 4, 0, 0, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", -3, -6, -3, -12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 23, 0, 11, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 44, 16, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 108, 2, 5, 115
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 2, -21, -1, -20
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 7, 0, 2, 9
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", -1, 0, 0, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 107, -36, 26, 97
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", 2, 0, 2, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", 14, 0, 6, 20
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", 98, 8, 42, 148
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 100, 20, 20, 140
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 500, 248, 135, 883
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/target/__init__.py", "Python", -4, 0, -2, -6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/target/set_target.py", "Python", -37, -7, -18, -62
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 26, 0, 11, 37
|
|
||||||
"/home/lars/Projects/music-downloader/src/python.py", "Python", 12, 43, 6, 61
|
|
||||||
"/home/lars/Projects/music-downloader/src/test.py", "Python", 1, 0, 0, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/example_data_objects.py", "Python", -36, -5, -6, -47
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 15, 51, 239
|
|
||||||
"Total", "-", 523, 22, 130, 675
|
|
|
@ -1,31 +0,0 @@
|
|||||||
# Diff Summary
|
|
||||||
|
|
||||||
Date : 2023-03-28 16:46:52
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 40 files, 523 codes, 22 comments, 130 blanks, all 675 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 40 | 523 | 22 | 130 | 675 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 40 | 523 | 22 | 130 | 675 |
|
|
||||||
| . (Files) | 6 | 8 | 36 | 8 | 52 |
|
|
||||||
| music_kraken | 31 | 297 | -25 | 64 | 336 |
|
|
||||||
| music_kraken (Files) | 1 | -33 | -1 | -11 | -45 |
|
|
||||||
| music_kraken/database | 8 | -688 | -272 | -195 | -1,155 |
|
|
||||||
| music_kraken/objects | 13 | 239 | 15 | 59 | 313 |
|
|
||||||
| music_kraken/pages | 7 | 820 | 240 | 231 | 1,291 |
|
|
||||||
| music_kraken/pages (Files) | 4 | 706 | 232 | 181 | 1,119 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 114 | 8 | 50 | 172 |
|
|
||||||
| music_kraken/target | 2 | -41 | -7 | -20 | -68 |
|
|
||||||
| tests | 3 | 218 | 11 | 58 | 287 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
@ -1,74 +0,0 @@
|
|||||||
Date : 2023-03-28 16:46:52
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 40 files, 523 codes, 22 comments, 130 blanks, all 675 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 40 | 523 | 22 | 130 | 675 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 40 | 523 | 22 | 130 | 675 |
|
|
||||||
| . (Files) | 6 | 8 | 36 | 8 | 52 |
|
|
||||||
| music_kraken | 31 | 297 | -25 | 64 | 336 |
|
|
||||||
| music_kraken (Files) | 1 | -33 | -1 | -11 | -45 |
|
|
||||||
| music_kraken/database | 8 | -688 | -272 | -195 | -1,155 |
|
|
||||||
| music_kraken/objects | 13 | 239 | 15 | 59 | 313 |
|
|
||||||
| music_kraken/pages | 7 | 820 | 240 | 231 | 1,291 |
|
|
||||||
| music_kraken/pages (Files) | 4 | 706 | 232 | 181 | 1,119 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 114 | 8 | 50 | 172 |
|
|
||||||
| music_kraken/target | 2 | -41 | -7 | -20 | -68 |
|
|
||||||
| tests | 3 | 218 | 11 | 58 | 287 |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | -22 | -3 | -12 | -37 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/donwload.py | Python | 9 | 0 | 6 | 15 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | -18 | -4 | -3 | -25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | -33 | -1 | -11 | -45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | -18 | 0 | -4 | -22 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | -1 | 1 | 0 | 0 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 20 | -1 | 12 | 31 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/object_cache.py | Python | -35 | -56 | -16 | -107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/old_database.py | Python | -432 | -154 | -115 | -701 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/read.py | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/temp_database.py | Python | -12 | 0 | -8 | -20 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/write.py | Python | -210 | -62 | -63 | -335 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/album.py | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/artist.py | Python | -18 | 0 | -5 | -23 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 33 | 15 | 13 | 61 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | -3 | -47 | -1 | -51 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 4 | 0 | 0 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | -3 | -6 | -3 | -12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 44 | 16 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 108 | 2 | 5 | 115 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 2 | -21 | -1 | -20 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 7 | 0 | 2 | 9 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 107 | -36 | 26 | 97 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | 14 | 0 | 6 | 20 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | 98 | 8 | 42 | 148 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 100 | 20 | 20 | 140 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 500 | 248 | 135 | 883 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/target/__init__.py | Python | -4 | 0 | -2 | -6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/target/set_target.py | Python | -37 | -7 | -18 | -62 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/python.py | Python | 12 | 43 | 6 | 61 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/test.py | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/example_data_objects.py | Python | -36 | -5 | -6 | -47 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| Total | | 523 | 22 | 130 | 675 |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,68 +0,0 @@
|
|||||||
"filename", "language", "Python", "SQLite", "Database", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/__init__.py", "Python", 0, 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", 58, 0, 0, 0, 6, 64
|
|
||||||
"/home/lars/Projects/music-downloader/src/donwload.py", "Python", 9, 0, 0, 0, 6, 15
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", 30, 0, 0, 0, 12, 42
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 24, 0, 0, 7, 14, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 3, 0, 0, 2, 3, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", 0, 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", 122, 0, 0, 24, 52, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 104, 0, 0, 47, 38, 189
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py", "Python", 0, 0, 0, 0, 3, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py", "Python", 75, 0, 0, 12, 20, 107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py", "Python", 54, 0, 0, 1, 16, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py", "Python", 6, 0, 0, 0, 2, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py", "Python", 257, 0, 0, 24, 65, 346
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py", "Python", 253, 0, 0, 40, 72, 365
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py", "Python", 3, 0, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py", "Python", 42, 0, 0, 6, 12, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py", "Python", 0, 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py", "Python", 115, 0, 0, 16, 42, 173
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py", "Python", 40, 0, 0, 0, 18, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py", "Python", 136, 0, 0, 9, 37, 182
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py", "Python", 11, 0, 0, 5, 8, 24
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py", "Python", 71, 0, 0, 4, 24, 99
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 28, 0, 0, 0, 8, 36
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/album.py", "Python", 16, 0, 0, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 0, 0, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 85, 0, 0, 30, 37, 152
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", 50, 0, 0, 10, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 25, 0, 0, 0, 7, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 259, 0, 0, 62, 60, 381
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 23, 0, 0, 0, 11, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 66, 0, 0, 31, 31, 128
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 445, 0, 0, 83, 95, 623
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 118, 0, 0, 17, 40, 175
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 29, 0, 0, 7, 9, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 6, 0, 0, 0, 5, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 180, 0, 0, 32, 53, 265
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", 2, 0, 0, 0, 2, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", 14, 0, 0, 0, 6, 20
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", 98, 0, 0, 8, 42, 148
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 441, 0, 0, 86, 111, 638
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 500, 0, 0, 248, 135, 883
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 25, 0, 0, 16, 6, 47
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql", "SQLite", 0, 72, 0, 0, 10, 82
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql", "SQLite", 0, 135, 0, 0, 10, 145
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py", "Python", 8, 0, 0, 0, 2, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py", "Python", 51, 0, 0, 4, 20, 75
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 1, 0, 0, 1, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py", "Python", 3, 0, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py", "Python", 19, 0, 0, 0, 6, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py", "Python", 39, 0, 0, 2, 17, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 62, 0, 0, 3, 10, 75
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 2, 0, 0, 5, 2, 9
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_cli.py", "Python", 3, 0, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_gtk.py", "Python", 3, 0, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 26, 0, 0, 0, 11, 37
|
|
||||||
"/home/lars/Projects/music-downloader/src/python.py", "Python", 12, 0, 0, 43, 6, 61
|
|
||||||
"/home/lars/Projects/music-downloader/src/test.db", "Database", 0, 0, 91, 0, 1, 92
|
|
||||||
"/home/lars/Projects/music-downloader/src/test.py", "Python", 1, 0, 0, 0, 0, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/__init__.py", "Python", 0, 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/conftest.py", "Python", 3, 0, 0, 1, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 0, 0, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 0, 0, 15, 51, 239
|
|
||||||
"/home/lars/Projects/music-downloader/src/try-programming-interface.py", "Python", 14, 0, 0, 98, 22, 134
|
|
||||||
"/home/lars/Projects/music-downloader/src/try.py", "Python", 1, 0, 0, 0, 3, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/try_python.py", "Python", 13, 0, 0, 20, 9, 42
|
|
||||||
"Total", "-", 4375, 207, 91, 1082, 1358, 7113
|
|
|
File diff suppressed because one or more lines are too long
@ -1,41 +0,0 @@
|
|||||||
# Summary
|
|
||||||
|
|
||||||
Date : 2023-03-28 16:46:52
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 66 files, 4673 codes, 1082 comments, 1358 blanks, all 7113 lines
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 63 | 4,375 | 1,082 | 1,337 | 6,794 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| Database | 1 | 91 | 0 | 1 | 92 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 66 | 4,673 | 1,082 | 1,358 | 7,113 |
|
|
||||||
| . (Files) | 13 | 261 | 161 | 82 | 504 |
|
|
||||||
| music_kraken | 49 | 4,155 | 904 | 1,209 | 6,268 |
|
|
||||||
| music_kraken (Files) | 2 | 27 | 9 | 17 | 53 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,181 | 302 | 340 | 1,823 |
|
|
||||||
| music_kraken/pages | 8 | 1,266 | 390 | 360 | 2,016 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,152 | 382 | 310 | 1,844 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 114 | 8 | 50 | 172 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 59 | 4 | 22 | 85 |
|
|
||||||
| music_kraken/utils | 6 | 126 | 11 | 37 | 174 |
|
|
||||||
| tests | 4 | 257 | 17 | 67 | 341 |
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,110 +0,0 @@
|
|||||||
Date : 2023-03-28 16:46:52
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 66 files, 4673 codes, 1082 comments, 1358 blanks, all 7113 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 63 | 4,375 | 1,082 | 1,337 | 6,794 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| Database | 1 | 91 | 0 | 1 | 92 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 66 | 4,673 | 1,082 | 1,358 | 7,113 |
|
|
||||||
| . (Files) | 13 | 261 | 161 | 82 | 504 |
|
|
||||||
| music_kraken | 49 | 4,155 | 904 | 1,209 | 6,268 |
|
|
||||||
| music_kraken (Files) | 2 | 27 | 9 | 17 | 53 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,181 | 302 | 340 | 1,823 |
|
|
||||||
| music_kraken/pages | 8 | 1,266 | 390 | 360 | 2,016 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,152 | 382 | 310 | 1,844 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 114 | 8 | 50 | 172 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 59 | 4 | 22 | 85 |
|
|
||||||
| music_kraken/utils | 6 | 126 | 11 | 37 | 174 |
|
|
||||||
| tests | 4 | 257 | 17 | 67 | 341 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/donwload.py | Python | 9 | 0 | 6 | 15 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 24 | 7 | 14 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 3 | 2 | 3 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 28 | 0 | 8 | 36 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 85 | 30 | 37 | 152 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 259 | 62 | 60 | 381 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 66 | 31 | 31 | 128 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 445 | 83 | 95 | 623 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 118 | 17 | 40 | 175 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 29 | 7 | 9 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 180 | 32 | 53 | 265 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | 14 | 0 | 6 | 20 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | 98 | 8 | 42 | 148 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 441 | 86 | 111 | 638 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 500 | 248 | 135 | 883 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py | Python | 8 | 0 | 2 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py | Python | 51 | 4 | 20 | 75 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 62 | 3 | 10 | 75 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 2 | 5 | 2 | 9 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_cli.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_gtk.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/python.py | Python | 12 | 43 | 6 | 61 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/test.db | Database | 91 | 0 | 1 | 92 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/test.py | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/conftest.py | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try-programming-interface.py | Python | 14 | 98 | 22 | 134 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try.py | Python | 1 | 0 | 3 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try_python.py | Python | 13 | 20 | 9 | 42 |
|
|
||||||
| Total | | 4,673 | 1,082 | 1,358 | 7,113 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,77 +0,0 @@
|
|||||||
# Details
|
|
||||||
|
|
||||||
Date : 2023-03-30 12:56:39
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 62 files, 4737 codes, 921 comments, 1383 blanks, all 7041 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/__init__.py](/src/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 21 | 0 | 12 | 33 |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 48 | 7 | 19 | 74 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| [src/music_kraken/not_used_anymore/__init__.py](/src/music_kraken/not_used_anymore/__init__.py) | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_audio.py](/src/music_kraken/not_used_anymore/fetch_audio.py) | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_source.py](/src/music_kraken/not_used_anymore/fetch_source.py) | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/__init__.py](/src/music_kraken/not_used_anymore/metadata/__init__.py) | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_fetch.py](/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py) | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_search.py](/src/music_kraken/not_used_anymore/metadata/metadata_search.py) | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/__init__.py](/src/music_kraken/not_used_anymore/metadata/sources/__init__.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py](/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py) | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/__init__.py](/src/music_kraken/not_used_anymore/sources/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/genius.py](/src/music_kraken/not_used_anymore/sources/genius.py) | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/local_files.py](/src/music_kraken/not_used_anymore/sources/local_files.py) | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/musify.py](/src/music_kraken/not_used_anymore/sources/musify.py) | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/source.py](/src/music_kraken/not_used_anymore/sources/source.py) | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/youtube.py](/src/music_kraken/not_used_anymore/sources/youtube.py) | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 28 | 0 | 8 | 36 |
|
|
||||||
| [src/music_kraken/objects/album.py](/src/music_kraken/objects/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 84 | 30 | 37 | 151 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 259 | 62 | 60 | 381 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 66 | 31 | 31 | 128 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 445 | 83 | 95 | 623 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 120 | 17 | 41 | 178 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 29 | 7 | 9 | 45 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 203 | 32 | 61 | 296 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| [src/music_kraken/pages/download_center/download.py](/src/music_kraken/pages/download_center/download.py) | Python | 33 | 0 | 12 | 45 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | 24 | 1 | 9 | 34 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | 136 | 8 | 54 | 198 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 455 | 86 | 116 | 657 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 509 | 248 | 137 | 894 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| [src/music_kraken/static_files/new_db.sql](/src/music_kraken/static_files/new_db.sql) | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| [src/music_kraken/static_files/temp_database_structure.sql](/src/music_kraken/static_files/temp_database_structure.sql) | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| [src/music_kraken/tagging/__init__.py](/src/music_kraken/tagging/__init__.py) | Python | 8 | 0 | 2 | 10 |
|
|
||||||
| [src/music_kraken/tagging/id3.py](/src/music_kraken/tagging/id3.py) | Python | 51 | 4 | 20 | 75 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| [src/music_kraken/utils/functions.py](/src/music_kraken/utils/functions.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/object_handeling.py](/src/music_kraken/utils/object_handeling.py) | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| [src/music_kraken/utils/phonetic_compares.py](/src/music_kraken/utils/phonetic_compares.py) | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 62 | 3 | 10 | 75 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 2 | 5 | 2 | 9 |
|
|
||||||
| [src/music_kraken_cli.py](/src/music_kraken_cli.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken_gtk.py](/src/music_kraken_gtk.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| [src/tests/__init__.py](/src/tests/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/tests/conftest.py](/src/tests/conftest.py) | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_download.py](/src/tests/test_download.py) | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,35 +0,0 @@
|
|||||||
# Diff Details
|
|
||||||
|
|
||||||
Date : 2023-03-30 12:56:39
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 20 files, 64 codes, -161 comments, 25 blanks, all -72 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 21 | 0 | 12 | 33 |
|
|
||||||
| [src/donwload.py](/src/donwload.py) | Python | -9 | 0 | -6 | -15 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 24 | 0 | 5 | 29 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 0 | -2 | 0 | -2 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 23 | 0 | 8 | 31 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| [src/music_kraken/pages/download_center/download.py](/src/music_kraken/pages/download_center/download.py) | Python | 33 | 0 | 12 | 45 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | 10 | 1 | 3 | 14 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | 38 | 0 | 12 | 50 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 9 | 0 | 2 | 11 |
|
|
||||||
| [src/python.py](/src/python.py) | Python | -12 | -43 | -6 | -61 |
|
|
||||||
| [src/test.db](/src/test.db) | Database | -91 | 0 | -1 | -92 |
|
|
||||||
| [src/test.py](/src/test.py) | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| [src/tests/test_download.py](/src/tests/test_download.py) | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| [src/try-programming-interface.py](/src/try-programming-interface.py) | Python | -14 | -98 | -22 | -134 |
|
|
||||||
| [src/try.py](/src/try.py) | Python | -1 | 0 | -3 | -4 |
|
|
||||||
| [src/try_python.py](/src/try_python.py) | Python | -13 | -20 | -9 | -42 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
@ -1,22 +0,0 @@
|
|||||||
"filename", "language", "Python", "Database", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 21, 0, 0, 12, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/donwload.py", "Python", -9, 0, 0, -6, -15
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 24, 0, 0, 5, 29
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 0, 0, -2, 0, -2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", -1, 0, 0, 0, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 2, 0, 0, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 23, 0, 0, 8, 31
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", 2, 0, 0, 0, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py", "Python", 33, 0, 0, 12, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", 10, 0, 1, 3, 14
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", 38, 0, 0, 12, 50
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 14, 0, 0, 5, 19
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 9, 0, 0, 2, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/python.py", "Python", -12, 0, -43, -6, -61
|
|
||||||
"/home/lars/Projects/music-downloader/src/test.db", "Database", 0, -91, 0, -1, -92
|
|
||||||
"/home/lars/Projects/music-downloader/src/test.py", "Python", -1, 0, 0, 0, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_download.py", "Python", 30, 0, 1, 12, 43
|
|
||||||
"/home/lars/Projects/music-downloader/src/try-programming-interface.py", "Python", -14, 0, -98, -22, -134
|
|
||||||
"/home/lars/Projects/music-downloader/src/try.py", "Python", -1, 0, 0, -3, -4
|
|
||||||
"/home/lars/Projects/music-downloader/src/try_python.py", "Python", -13, 0, -20, -9, -42
|
|
||||||
"Total", "-", 155, -91, -161, 25, -72
|
|
|
@ -1,30 +0,0 @@
|
|||||||
# Diff Summary
|
|
||||||
|
|
||||||
Date : 2023-03-30 12:56:39
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 20 files, 64 codes, -161 comments, 25 blanks, all -72 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 19 | 155 | -161 | 26 | 20 |
|
|
||||||
| Database | 1 | -91 | 0 | -1 | -92 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 20 | 64 | -161 | 25 | -72 |
|
|
||||||
| . (Files) | 8 | -120 | -161 | -35 | -316 |
|
|
||||||
| music_kraken | 11 | 154 | -1 | 48 | 201 |
|
|
||||||
| music_kraken (Files) | 2 | 24 | -2 | 5 | 27 |
|
|
||||||
| music_kraken/objects | 2 | 1 | 0 | 1 | 2 |
|
|
||||||
| music_kraken/pages | 7 | 129 | 1 | 42 | 172 |
|
|
||||||
| music_kraken/pages (Files) | 3 | 46 | 0 | 15 | 61 |
|
|
||||||
| music_kraken/pages/download_center | 4 | 83 | 1 | 27 | 111 |
|
|
||||||
| tests | 1 | 30 | 1 | 12 | 43 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
@ -1,53 +0,0 @@
|
|||||||
Date : 2023-03-30 12:56:39
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 20 files, 64 codes, -161 comments, 25 blanks, all -72 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 19 | 155 | -161 | 26 | 20 |
|
|
||||||
| Database | 1 | -91 | 0 | -1 | -92 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 20 | 64 | -161 | 25 | -72 |
|
|
||||||
| . (Files) | 8 | -120 | -161 | -35 | -316 |
|
|
||||||
| music_kraken | 11 | 154 | -1 | 48 | 201 |
|
|
||||||
| music_kraken (Files) | 2 | 24 | -2 | 5 | 27 |
|
|
||||||
| music_kraken/objects | 2 | 1 | 0 | 1 | 2 |
|
|
||||||
| music_kraken/pages | 7 | 129 | 1 | 42 | 172 |
|
|
||||||
| music_kraken/pages (Files) | 3 | 46 | 0 | 15 | 61 |
|
|
||||||
| music_kraken/pages/download_center | 4 | 83 | 1 | 27 | 111 |
|
|
||||||
| tests | 1 | 30 | 1 | 12 | 43 |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 21 | 0 | 12 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/donwload.py | Python | -9 | 0 | -6 | -15 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 24 | 0 | 5 | 29 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 0 | -2 | 0 | -2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 23 | 0 | 8 | 31 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py | Python | 33 | 0 | 12 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | 10 | 1 | 3 | 14 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | 38 | 0 | 12 | 50 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 9 | 0 | 2 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/python.py | Python | -12 | -43 | -6 | -61 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/test.db | Database | -91 | 0 | -1 | -92 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/test.py | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_download.py | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try-programming-interface.py | Python | -14 | -98 | -22 | -134 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try.py | Python | -1 | 0 | -3 | -4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/try_python.py | Python | -13 | -20 | -9 | -42 |
|
|
||||||
| Total | | 64 | -161 | 25 | -72 |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,64 +0,0 @@
|
|||||||
"filename", "language", "Python", "SQLite", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 21, 0, 0, 12, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", 58, 0, 0, 6, 64
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", 30, 0, 0, 12, 42
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 48, 0, 7, 19, 74
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", 122, 0, 24, 52, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 104, 0, 47, 38, 189
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py", "Python", 0, 0, 0, 3, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py", "Python", 75, 0, 12, 20, 107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py", "Python", 54, 0, 1, 16, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py", "Python", 6, 0, 0, 2, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py", "Python", 257, 0, 24, 65, 346
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py", "Python", 253, 0, 40, 72, 365
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py", "Python", 42, 0, 6, 12, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py", "Python", 115, 0, 16, 42, 173
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py", "Python", 40, 0, 0, 18, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py", "Python", 136, 0, 9, 37, 182
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py", "Python", 11, 0, 5, 8, 24
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py", "Python", 71, 0, 4, 24, 99
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 28, 0, 0, 8, 36
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/album.py", "Python", 16, 0, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 0, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 84, 0, 30, 37, 151
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", 50, 0, 10, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 25, 0, 0, 7, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 259, 0, 62, 60, 381
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 23, 0, 0, 11, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 66, 0, 31, 31, 128
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 445, 0, 83, 95, 623
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 120, 0, 17, 41, 178
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 29, 0, 7, 9, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 6, 0, 0, 5, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 203, 0, 32, 61, 296
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", 4, 0, 0, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py", "Python", 33, 0, 0, 12, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", 24, 0, 1, 9, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", 136, 0, 8, 54, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 455, 0, 86, 116, 657
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 509, 0, 248, 137, 894
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 25, 0, 16, 6, 47
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql", "SQLite", 0, 72, 0, 10, 82
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql", "SQLite", 0, 135, 0, 10, 145
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py", "Python", 8, 0, 0, 2, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py", "Python", 51, 0, 4, 20, 75
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 1, 0, 1, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py", "Python", 19, 0, 0, 6, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py", "Python", 39, 0, 2, 17, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 62, 0, 3, 10, 75
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 2, 0, 5, 2, 9
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_cli.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_gtk.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 26, 0, 0, 11, 37
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/conftest.py", "Python", 3, 0, 1, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 0, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_download.py", "Python", 30, 0, 1, 12, 43
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 0, 15, 51, 239
|
|
||||||
"Total", "-", 4530, 207, 921, 1383, 7041
|
|
|
File diff suppressed because one or more lines are too long
@ -1,40 +0,0 @@
|
|||||||
# Summary
|
|
||||||
|
|
||||||
Date : 2023-03-30 12:56:39
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 62 files, 4737 codes, 921 comments, 1383 blanks, all 7041 lines
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 60 | 4,530 | 921 | 1,363 | 6,814 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 62 | 4,737 | 921 | 1,383 | 7,041 |
|
|
||||||
| . (Files) | 7 | 141 | 0 | 47 | 188 |
|
|
||||||
| music_kraken | 50 | 4,309 | 903 | 1,257 | 6,469 |
|
|
||||||
| music_kraken (Files) | 2 | 51 | 7 | 22 | 80 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,182 | 302 | 341 | 1,825 |
|
|
||||||
| music_kraken/pages | 9 | 1,395 | 391 | 402 | 2,188 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,198 | 382 | 325 | 1,905 |
|
|
||||||
| music_kraken/pages/download_center | 4 | 197 | 9 | 77 | 283 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 59 | 4 | 22 | 85 |
|
|
||||||
| music_kraken/utils | 6 | 126 | 11 | 37 | 174 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,105 +0,0 @@
|
|||||||
Date : 2023-03-30 12:56:39
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 62 files, 4737 codes, 921 comments, 1383 blanks, all 7041 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 60 | 4,530 | 921 | 1,363 | 6,814 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 62 | 4,737 | 921 | 1,383 | 7,041 |
|
|
||||||
| . (Files) | 7 | 141 | 0 | 47 | 188 |
|
|
||||||
| music_kraken | 50 | 4,309 | 903 | 1,257 | 6,469 |
|
|
||||||
| music_kraken (Files) | 2 | 51 | 7 | 22 | 80 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,182 | 302 | 341 | 1,825 |
|
|
||||||
| music_kraken/pages | 9 | 1,395 | 391 | 402 | 2,188 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,198 | 382 | 325 | 1,905 |
|
|
||||||
| music_kraken/pages/download_center | 4 | 197 | 9 | 77 | 283 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 59 | 4 | 22 | 85 |
|
|
||||||
| music_kraken/utils | 6 | 126 | 11 | 37 | 174 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 21 | 0 | 12 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 48 | 7 | 19 | 74 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 28 | 0 | 8 | 36 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 84 | 30 | 37 | 151 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 259 | 62 | 60 | 381 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 66 | 31 | 31 | 128 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 445 | 83 | 95 | 623 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 120 | 17 | 41 | 178 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 29 | 7 | 9 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 203 | 32 | 61 | 296 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py | Python | 33 | 0 | 12 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | 24 | 1 | 9 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | 136 | 8 | 54 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 455 | 86 | 116 | 657 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 509 | 248 | 137 | 894 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py | Python | 8 | 0 | 2 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py | Python | 51 | 4 | 20 | 75 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 62 | 3 | 10 | 75 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 2 | 5 | 2 | 9 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_cli.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_gtk.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 26 | 0 | 11 | 37 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/conftest.py | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_download.py | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| Total | | 4,737 | 921 | 1,383 | 7,041 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,81 +0,0 @@
|
|||||||
# Details
|
|
||||||
|
|
||||||
Date : 2023-04-05 09:31:17
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 66 files, 5256 codes, 1000 comments, 1543 blanks, all 7799 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/__init__.py](/src/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 37 | 0 | 17 | 54 |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 86 | 12 | 28 | 126 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| [src/music_kraken/not_used_anymore/__init__.py](/src/music_kraken/not_used_anymore/__init__.py) | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_audio.py](/src/music_kraken/not_used_anymore/fetch_audio.py) | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_source.py](/src/music_kraken/not_used_anymore/fetch_source.py) | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/__init__.py](/src/music_kraken/not_used_anymore/metadata/__init__.py) | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_fetch.py](/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py) | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_search.py](/src/music_kraken/not_used_anymore/metadata/metadata_search.py) | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/__init__.py](/src/music_kraken/not_used_anymore/metadata/sources/__init__.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py](/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py) | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/__init__.py](/src/music_kraken/not_used_anymore/sources/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/genius.py](/src/music_kraken/not_used_anymore/sources/genius.py) | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/local_files.py](/src/music_kraken/not_used_anymore/sources/local_files.py) | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/musify.py](/src/music_kraken/not_used_anymore/sources/musify.py) | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/source.py](/src/music_kraken/not_used_anymore/sources/source.py) | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/youtube.py](/src/music_kraken/not_used_anymore/sources/youtube.py) | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 29 | 0 | 8 | 37 |
|
|
||||||
| [src/music_kraken/objects/album.py](/src/music_kraken/objects/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 261 | 62 | 61 | 384 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 62 | 31 | 31 | 124 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 436 | 93 | 99 | 628 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 120 | 17 | 41 | 178 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 58 | 11 | 21 | 90 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 428 | 44 | 103 | 575 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| [src/music_kraken/pages/download_center/download.py](/src/music_kraken/pages/download_center/download.py) | Python | 33 | 0 | 13 | 46 |
|
|
||||||
| [src/music_kraken/pages/download_center/multiple_options.py](/src/music_kraken/pages/download_center/multiple_options.py) | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | 24 | 1 | 9 | 34 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | 85 | 23 | 38 | 146 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 451 | 83 | 117 | 651 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 564 | 259 | 155 | 978 |
|
|
||||||
| [src/music_kraken/pages/support_classes/__init__.py](/src/music_kraken/pages/support_classes/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/pages/support_classes/default_target.py](/src/music_kraken/pages/support_classes/default_target.py) | Python | 55 | 0 | 15 | 70 |
|
|
||||||
| [src/music_kraken/pages/support_classes/download_result.py](/src/music_kraken/pages/support_classes/download_result.py) | Python | 51 | 0 | 15 | 66 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| [src/music_kraken/static_files/new_db.sql](/src/music_kraken/static_files/new_db.sql) | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| [src/music_kraken/static_files/temp_database_structure.sql](/src/music_kraken/static_files/temp_database_structure.sql) | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| [src/music_kraken/tagging/__init__.py](/src/music_kraken/tagging/__init__.py) | Python | 5 | 0 | 2 | 7 |
|
|
||||||
| [src/music_kraken/tagging/id3.py](/src/music_kraken/tagging/id3.py) | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| [src/music_kraken/utils/functions.py](/src/music_kraken/utils/functions.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/object_handeling.py](/src/music_kraken/utils/object_handeling.py) | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| [src/music_kraken/utils/phonetic_compares.py](/src/music_kraken/utils/phonetic_compares.py) | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 75 | 27 | 17 | 119 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 10 | 5 | 7 | 22 |
|
|
||||||
| [src/music_kraken_cli.py](/src/music_kraken_cli.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken_gtk.py](/src/music_kraken_gtk.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| [src/tests/__init__.py](/src/tests/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/tests/conftest.py](/src/tests/conftest.py) | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_download.py](/src/tests/test_download.py) | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,37 +0,0 @@
|
|||||||
# Diff Details
|
|
||||||
|
|
||||||
Date : 2023-04-05 09:31:17
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 22 files, 519 codes, 79 comments, 160 blanks, all 758 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 16 | 0 | 5 | 21 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 38 | 5 | 9 | 52 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 7 | 1 | 2 | 10 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | -4 | 0 | 0 | -4 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | -9 | 10 | 4 | 5 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 29 | 4 | 12 | 45 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 225 | 12 | 42 | 279 |
|
|
||||||
| [src/music_kraken/pages/download_center/download.py](/src/music_kraken/pages/download_center/download.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/pages/download_center/multiple_options.py](/src/music_kraken/pages/download_center/multiple_options.py) | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | -51 | 15 | -16 | -52 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | -4 | -3 | 1 | -6 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 55 | 11 | 18 | 84 |
|
|
||||||
| [src/music_kraken/pages/support_classes/__init__.py](/src/music_kraken/pages/support_classes/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/pages/support_classes/default_target.py](/src/music_kraken/pages/support_classes/default_target.py) | Python | 55 | 0 | 15 | 70 |
|
|
||||||
| [src/music_kraken/pages/support_classes/download_result.py](/src/music_kraken/pages/support_classes/download_result.py) | Python | 51 | 0 | 15 | 66 |
|
|
||||||
| [src/music_kraken/tagging/__init__.py](/src/music_kraken/tagging/__init__.py) | Python | -3 | 0 | 0 | -3 |
|
|
||||||
| [src/music_kraken/tagging/id3.py](/src/music_kraken/tagging/id3.py) | Python | 9 | 0 | 4 | 13 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 13 | 24 | 7 | 44 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 8 | 0 | 5 | 13 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 12 | 0 | 3 | 15 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
@ -1,24 +0,0 @@
|
|||||||
"filename", "language", "Python", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 16, 0, 5, 21
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 38, 5, 9, 52
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 1, 0, 0, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 7, 1, 2, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 2, 0, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", -4, 0, 0, -4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", -9, 10, 4, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 29, 4, 12, 45
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 225, 12, 42, 279
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py", "Python", 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py", "Python", 69, 0, 31, 100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", -51, 15, -16, -52
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", -4, -3, 1, -6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 55, 11, 18, 84
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py", "Python", 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py", "Python", 55, 0, 15, 70
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py", "Python", 51, 0, 15, 66
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py", "Python", -3, 0, 0, -3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py", "Python", 9, 0, 4, 13
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 13, 24, 7, 44
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 8, 0, 5, 13
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 12, 0, 3, 15
|
|
||||||
"Total", "-", 519, 79, 160, 758
|
|
|
@ -1,31 +0,0 @@
|
|||||||
# Diff Summary
|
|
||||||
|
|
||||||
Date : 2023-04-05 09:31:17
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 22 files, 519 codes, 79 comments, 160 blanks, all 758 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 22 | 519 | 79 | 160 | 758 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 22 | 519 | 79 | 160 | 758 |
|
|
||||||
| . (Files) | 2 | 28 | 0 | 8 | 36 |
|
|
||||||
| music_kraken | 20 | 491 | 79 | 152 | 722 |
|
|
||||||
| music_kraken (Files) | 1 | 38 | 5 | 9 | 52 |
|
|
||||||
| music_kraken/objects | 6 | 26 | 15 | 19 | 60 |
|
|
||||||
| music_kraken/pages | 9 | 400 | 35 | 108 | 543 |
|
|
||||||
| music_kraken/pages (Files) | 3 | 276 | 20 | 61 | 357 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 18 | 15 | 16 | 49 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | 106 | 0 | 31 | 137 |
|
|
||||||
| music_kraken/tagging | 2 | 6 | 0 | 4 | 10 |
|
|
||||||
| music_kraken/utils | 2 | 21 | 24 | 12 | 57 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
@ -1,56 +0,0 @@
|
|||||||
Date : 2023-04-05 09:31:17
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 22 files, 519 codes, 79 comments, 160 blanks, all 758 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 22 | 519 | 79 | 160 | 758 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 22 | 519 | 79 | 160 | 758 |
|
|
||||||
| . (Files) | 2 | 28 | 0 | 8 | 36 |
|
|
||||||
| music_kraken | 20 | 491 | 79 | 152 | 722 |
|
|
||||||
| music_kraken (Files) | 1 | 38 | 5 | 9 | 52 |
|
|
||||||
| music_kraken/objects | 6 | 26 | 15 | 19 | 60 |
|
|
||||||
| music_kraken/pages | 9 | 400 | 35 | 108 | 543 |
|
|
||||||
| music_kraken/pages (Files) | 3 | 276 | 20 | 61 | 357 |
|
|
||||||
| music_kraken/pages/download_center | 3 | 18 | 15 | 16 | 49 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | 106 | 0 | 31 | 137 |
|
|
||||||
| music_kraken/tagging | 2 | 6 | 0 | 4 | 10 |
|
|
||||||
| music_kraken/utils | 2 | 21 | 24 | 12 | 57 |
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 16 | 0 | 5 | 21 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 38 | 5 | 9 | 52 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 7 | 1 | 2 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | -4 | 0 | 0 | -4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | -9 | 10 | 4 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 29 | 4 | 12 | 45 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 225 | 12 | 42 | 279 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | -51 | 15 | -16 | -52 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | -4 | -3 | 1 | -6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 55 | 11 | 18 | 84 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py | Python | 55 | 0 | 15 | 70 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py | Python | 51 | 0 | 15 | 66 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py | Python | -3 | 0 | 0 | -3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py | Python | 9 | 0 | 4 | 13 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 13 | 24 | 7 | 44 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 8 | 0 | 5 | 13 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 12 | 0 | 3 | 15 |
|
|
||||||
| Total | | 519 | 79 | 160 | 758 |
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,68 +0,0 @@
|
|||||||
"filename", "language", "Python", "SQLite", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 37, 0, 0, 17, 54
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", 58, 0, 0, 6, 64
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", 30, 0, 0, 12, 42
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 86, 0, 12, 28, 126
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", 122, 0, 24, 52, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 104, 0, 47, 38, 189
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py", "Python", 0, 0, 0, 3, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py", "Python", 75, 0, 12, 20, 107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py", "Python", 54, 0, 1, 16, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py", "Python", 6, 0, 0, 2, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py", "Python", 257, 0, 24, 65, 346
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py", "Python", 253, 0, 40, 72, 365
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py", "Python", 42, 0, 6, 12, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py", "Python", 115, 0, 16, 42, 173
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py", "Python", 40, 0, 0, 18, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py", "Python", 136, 0, 9, 37, 182
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py", "Python", 11, 0, 5, 8, 24
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py", "Python", 71, 0, 4, 24, 99
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 29, 0, 0, 8, 37
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/album.py", "Python", 16, 0, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 0, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 91, 0, 31, 39, 161
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", 50, 0, 10, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 25, 0, 0, 7, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 261, 0, 62, 61, 384
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 23, 0, 0, 11, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 62, 0, 31, 31, 124
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 436, 0, 93, 99, 628
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 120, 0, 17, 41, 178
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 58, 0, 11, 21, 90
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 6, 0, 0, 5, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 428, 0, 44, 103, 575
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", 4, 0, 0, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py", "Python", 33, 0, 0, 13, 46
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py", "Python", 69, 0, 0, 31, 100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", 24, 0, 1, 9, 34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", 85, 0, 23, 38, 146
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 451, 0, 83, 117, 651
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 564, 0, 259, 155, 978
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py", "Python", 55, 0, 0, 15, 70
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py", "Python", 51, 0, 0, 15, 66
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 25, 0, 16, 6, 47
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql", "SQLite", 0, 72, 0, 10, 82
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql", "SQLite", 0, 135, 0, 10, 145
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py", "Python", 5, 0, 0, 2, 7
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py", "Python", 60, 0, 4, 24, 88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 1, 0, 1, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py", "Python", 19, 0, 0, 6, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py", "Python", 39, 0, 2, 17, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 75, 0, 27, 17, 119
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 10, 0, 5, 7, 22
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_cli.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_gtk.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 38, 0, 0, 14, 52
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/conftest.py", "Python", 3, 0, 1, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 0, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_download.py", "Python", 30, 0, 1, 12, 43
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 0, 15, 51, 239
|
|
||||||
"Total", "-", 5049, 207, 1000, 1543, 7799
|
|
|
File diff suppressed because one or more lines are too long
@ -1,41 +0,0 @@
|
|||||||
# Summary
|
|
||||||
|
|
||||||
Date : 2023-04-05 09:31:17
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 66 files, 5256 codes, 1000 comments, 1543 blanks, all 7799 lines
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 64 | 5,049 | 1,000 | 1,523 | 7,572 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 66 | 5,256 | 1,000 | 1,543 | 7,799 |
|
|
||||||
| . (Files) | 7 | 169 | 0 | 55 | 224 |
|
|
||||||
| music_kraken | 54 | 4,800 | 982 | 1,409 | 7,191 |
|
|
||||||
| music_kraken (Files) | 2 | 89 | 12 | 31 | 132 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,208 | 317 | 360 | 1,885 |
|
|
||||||
| music_kraken/pages | 13 | 1,795 | 426 | 510 | 2,731 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,474 | 402 | 386 | 2,262 |
|
|
||||||
| music_kraken/pages/download_center | 5 | 215 | 24 | 93 | 332 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | 106 | 0 | 31 | 137 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 65 | 4 | 26 | 95 |
|
|
||||||
| music_kraken/utils | 6 | 147 | 35 | 49 | 231 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,110 +0,0 @@
|
|||||||
Date : 2023-04-05 09:31:17
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 66 files, 5256 codes, 1000 comments, 1543 blanks, all 7799 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 64 | 5,049 | 1,000 | 1,523 | 7,572 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 66 | 5,256 | 1,000 | 1,543 | 7,799 |
|
|
||||||
| . (Files) | 7 | 169 | 0 | 55 | 224 |
|
|
||||||
| music_kraken | 54 | 4,800 | 982 | 1,409 | 7,191 |
|
|
||||||
| music_kraken (Files) | 2 | 89 | 12 | 31 | 132 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 12 | 1,208 | 317 | 360 | 1,885 |
|
|
||||||
| music_kraken/pages | 13 | 1,795 | 426 | 510 | 2,731 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 1,474 | 402 | 386 | 2,262 |
|
|
||||||
| music_kraken/pages/download_center | 5 | 215 | 24 | 93 | 332 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | 106 | 0 | 31 | 137 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/tagging | 2 | 65 | 4 | 26 | 95 |
|
|
||||||
| music_kraken/utils | 6 | 147 | 35 | 49 | 231 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 37 | 0 | 17 | 54 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 86 | 12 | 28 | 126 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 29 | 0 | 8 | 37 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 261 | 62 | 61 | 384 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 23 | 0 | 11 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 62 | 31 | 31 | 124 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 436 | 93 | 99 | 628 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 120 | 17 | 41 | 178 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 58 | 11 | 21 | 90 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 6 | 0 | 5 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 428 | 44 | 103 | 575 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py | Python | 33 | 0 | 13 | 46 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | 24 | 1 | 9 | 34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | 85 | 23 | 38 | 146 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 451 | 83 | 117 | 651 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 564 | 259 | 155 | 978 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py | Python | 55 | 0 | 15 | 70 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py | Python | 51 | 0 | 15 | 66 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py | Python | 5 | 0 | 2 | 7 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 1 | 1 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 75 | 27 | 17 | 119 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 10 | 5 | 7 | 22 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_cli.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_gtk.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/conftest.py | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_download.py | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| Total | | 5,256 | 1,000 | 1,543 | 7,799 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,104 +0,0 @@
|
|||||||
# Details
|
|
||||||
|
|
||||||
Date : 2023-05-24 11:17:57
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 89 files, 6536 codes, 1157 comments, 1980 blanks, all 9673 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/__init__.py](/src/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 43 | 2 | 18 | 63 |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 189 | 21 | 60 | 270 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 88 | 3 | 21 | 112 |
|
|
||||||
| [src/music_kraken/audio/__init__.py](/src/music_kraken/audio/__init__.py) | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| [src/music_kraken/audio/codec.py](/src/music_kraken/audio/codec.py) | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| [src/music_kraken/audio/metadata.py](/src/music_kraken/audio/metadata.py) | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| [src/music_kraken/connection/__init__.py](/src/music_kraken/connection/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/connection/connection.py](/src/music_kraken/connection/connection.py) | Python | 162 | 1 | 30 | 193 |
|
|
||||||
| [src/music_kraken/connection/rotating.py](/src/music_kraken/connection/rotating.py) | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| [src/music_kraken/download/__init__.py](/src/music_kraken/download/__init__.py) | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| [src/music_kraken/download/download.py](/src/music_kraken/download/download.py) | Python | 35 | 0 | 14 | 49 |
|
|
||||||
| [src/music_kraken/download/multiple_options.py](/src/music_kraken/download/multiple_options.py) | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| [src/music_kraken/download/page_attributes.py](/src/music_kraken/download/page_attributes.py) | Python | 21 | 1 | 10 | 32 |
|
|
||||||
| [src/music_kraken/download/search.py](/src/music_kraken/download/search.py) | Python | 130 | 24 | 56 | 210 |
|
|
||||||
| [src/music_kraken/not_used_anymore/__init__.py](/src/music_kraken/not_used_anymore/__init__.py) | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_audio.py](/src/music_kraken/not_used_anymore/fetch_audio.py) | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_source.py](/src/music_kraken/not_used_anymore/fetch_source.py) | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/__init__.py](/src/music_kraken/not_used_anymore/metadata/__init__.py) | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_fetch.py](/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py) | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_search.py](/src/music_kraken/not_used_anymore/metadata/metadata_search.py) | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/__init__.py](/src/music_kraken/not_used_anymore/metadata/sources/__init__.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py](/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py) | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/__init__.py](/src/music_kraken/not_used_anymore/sources/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/genius.py](/src/music_kraken/not_used_anymore/sources/genius.py) | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/local_files.py](/src/music_kraken/not_used_anymore/sources/local_files.py) | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/musify.py](/src/music_kraken/not_used_anymore/sources/musify.py) | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/source.py](/src/music_kraken/not_used_anymore/sources/source.py) | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/youtube.py](/src/music_kraken/not_used_anymore/sources/youtube.py) | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 261 | 62 | 61 | 384 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 28 | 0 | 13 | 41 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 65 | 33 | 33 | 131 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 473 | 113 | 115 | 701 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 90 | 16 | 32 | 138 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 63 | 15 | 23 | 101 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 357 | 34 | 103 | 494 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 432 | 90 | 127 | 649 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 629 | 289 | 187 | 1,105 |
|
|
||||||
| [src/music_kraken/pages/preset.py](/src/music_kraken/pages/preset.py) | Python | 43 | 1 | 16 | 60 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| [src/music_kraken/static_files/new_db.sql](/src/music_kraken/static_files/new_db.sql) | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| [src/music_kraken/static_files/temp_database_structure.sql](/src/music_kraken/static_files/temp_database_structure.sql) | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 2 | 1 | 2 | 5 |
|
|
||||||
| [src/music_kraken/utils/config/__init__.py](/src/music_kraken/utils/config/__init__.py) | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| [src/music_kraken/utils/config/audio.py](/src/music_kraken/utils/config/audio.py) | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| [src/music_kraken/utils/config/base_classes.py](/src/music_kraken/utils/config/base_classes.py) | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| [src/music_kraken/utils/config/config.py](/src/music_kraken/utils/config/config.py) | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| [src/music_kraken/utils/config/connection.py](/src/music_kraken/utils/config/connection.py) | Python | 81 | 2 | 15 | 98 |
|
|
||||||
| [src/music_kraken/utils/config/logging.py](/src/music_kraken/utils/config/logging.py) | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| [src/music_kraken/utils/config/misc.py](/src/music_kraken/utils/config/misc.py) | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| [src/music_kraken/utils/config/paths.py](/src/music_kraken/utils/config/paths.py) | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| [src/music_kraken/utils/enums/__init__.py](/src/music_kraken/utils/enums/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/utils/enums/album.py](/src/music_kraken/utils/enums/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/utils/enums/source.py](/src/music_kraken/utils/enums/source.py) | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| [src/music_kraken/utils/exception/__init__.py](/src/music_kraken/utils/exception/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/utils/exception/config.py](/src/music_kraken/utils/exception/config.py) | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| [src/music_kraken/utils/functions.py](/src/music_kraken/utils/functions.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/object_handeling.py](/src/music_kraken/utils/object_handeling.py) | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| [src/music_kraken/utils/path_manager/__init__.py](/src/music_kraken/utils/path_manager/__init__.py) | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| [src/music_kraken/utils/path_manager/config_directory.py](/src/music_kraken/utils/path_manager/config_directory.py) | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| [src/music_kraken/utils/path_manager/locations.py](/src/music_kraken/utils/path_manager/locations.py) | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| [src/music_kraken/utils/path_manager/music_directory.py](/src/music_kraken/utils/path_manager/music_directory.py) | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| [src/music_kraken/utils/phonetic_compares.py](/src/music_kraken/utils/phonetic_compares.py) | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| [src/music_kraken/utils/regex.py](/src/music_kraken/utils/regex.py) | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 63 | 22 | 21 | 106 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 16 | 5 | 11 | 32 |
|
|
||||||
| [src/music_kraken/utils/support_classes/__init__.py](/src/music_kraken/utils/support_classes/__init__.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/support_classes/default_target.py](/src/music_kraken/utils/support_classes/default_target.py) | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| [src/music_kraken/utils/support_classes/download_result.py](/src/music_kraken/utils/support_classes/download_result.py) | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| [src/music_kraken/utils/support_classes/query.py](/src/music_kraken/utils/support_classes/query.py) | Python | 24 | 0 | 9 | 33 |
|
|
||||||
| [src/music_kraken_cli.py](/src/music_kraken_cli.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken_gtk.py](/src/music_kraken_gtk.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| [src/tests/__init__.py](/src/tests/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/tests/conftest.py](/src/tests/conftest.py) | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_download.py](/src/tests/test_download.py) | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,76 +0,0 @@
|
|||||||
# Diff Details
|
|
||||||
|
|
||||||
Date : 2023-05-24 11:17:57
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 61 files, 1280 codes, 157 comments, 437 blanks, all 1874 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 6 | 2 | 1 | 9 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 103 | 9 | 32 | 144 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 85 | 3 | 18 | 106 |
|
|
||||||
| [src/music_kraken/audio/__init__.py](/src/music_kraken/audio/__init__.py) | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| [src/music_kraken/audio/codec.py](/src/music_kraken/audio/codec.py) | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| [src/music_kraken/audio/metadata.py](/src/music_kraken/audio/metadata.py) | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| [src/music_kraken/connection/__init__.py](/src/music_kraken/connection/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/connection/connection.py](/src/music_kraken/connection/connection.py) | Python | 162 | 1 | 30 | 193 |
|
|
||||||
| [src/music_kraken/connection/rotating.py](/src/music_kraken/connection/rotating.py) | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| [src/music_kraken/download/__init__.py](/src/music_kraken/download/__init__.py) | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| [src/music_kraken/download/download.py](/src/music_kraken/download/download.py) | Python | 35 | 0 | 14 | 49 |
|
|
||||||
| [src/music_kraken/download/multiple_options.py](/src/music_kraken/download/multiple_options.py) | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| [src/music_kraken/download/page_attributes.py](/src/music_kraken/download/page_attributes.py) | Python | 21 | 1 | 10 | 32 |
|
|
||||||
| [src/music_kraken/download/search.py](/src/music_kraken/download/search.py) | Python | 130 | 24 | 56 | 210 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | -15 | 0 | -3 | -18 |
|
|
||||||
| [src/music_kraken/objects/album.py](/src/music_kraken/objects/album.py) | Python | -16 | -6 | -5 | -27 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 5 | 0 | 2 | 7 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 3 | 2 | 2 | 7 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 37 | 20 | 16 | 73 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | -30 | -1 | -9 | -40 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 5 | 4 | 2 | 11 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | -3 | 0 | -4 | -7 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | -71 | -10 | 0 | -81 |
|
|
||||||
| [src/music_kraken/pages/download_center/__init__.py](/src/music_kraken/pages/download_center/__init__.py) | Python | -4 | 0 | -2 | -6 |
|
|
||||||
| [src/music_kraken/pages/download_center/download.py](/src/music_kraken/pages/download_center/download.py) | Python | -33 | 0 | -13 | -46 |
|
|
||||||
| [src/music_kraken/pages/download_center/multiple_options.py](/src/music_kraken/pages/download_center/multiple_options.py) | Python | -69 | 0 | -31 | -100 |
|
|
||||||
| [src/music_kraken/pages/download_center/page_attributes.py](/src/music_kraken/pages/download_center/page_attributes.py) | Python | -24 | -1 | -9 | -34 |
|
|
||||||
| [src/music_kraken/pages/download_center/search.py](/src/music_kraken/pages/download_center/search.py) | Python | -85 | -23 | -38 | -146 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | -19 | 7 | 10 | -2 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 65 | 30 | 32 | 127 |
|
|
||||||
| [src/music_kraken/pages/preset.py](/src/music_kraken/pages/preset.py) | Python | 43 | 1 | 16 | 60 |
|
|
||||||
| [src/music_kraken/pages/support_classes/__init__.py](/src/music_kraken/pages/support_classes/__init__.py) | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| [src/music_kraken/pages/support_classes/default_target.py](/src/music_kraken/pages/support_classes/default_target.py) | Python | -55 | 0 | -15 | -70 |
|
|
||||||
| [src/music_kraken/pages/support_classes/download_result.py](/src/music_kraken/pages/support_classes/download_result.py) | Python | -51 | 0 | -15 | -66 |
|
|
||||||
| [src/music_kraken/tagging/__init__.py](/src/music_kraken/tagging/__init__.py) | Python | -5 | 0 | -2 | -7 |
|
|
||||||
| [src/music_kraken/tagging/id3.py](/src/music_kraken/tagging/id3.py) | Python | -60 | -4 | -24 | -88 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/utils/config/__init__.py](/src/music_kraken/utils/config/__init__.py) | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| [src/music_kraken/utils/config/audio.py](/src/music_kraken/utils/config/audio.py) | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| [src/music_kraken/utils/config/base_classes.py](/src/music_kraken/utils/config/base_classes.py) | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| [src/music_kraken/utils/config/config.py](/src/music_kraken/utils/config/config.py) | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| [src/music_kraken/utils/config/connection.py](/src/music_kraken/utils/config/connection.py) | Python | 81 | 2 | 15 | 98 |
|
|
||||||
| [src/music_kraken/utils/config/logging.py](/src/music_kraken/utils/config/logging.py) | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| [src/music_kraken/utils/config/misc.py](/src/music_kraken/utils/config/misc.py) | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| [src/music_kraken/utils/config/paths.py](/src/music_kraken/utils/config/paths.py) | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| [src/music_kraken/utils/enums/__init__.py](/src/music_kraken/utils/enums/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/utils/enums/album.py](/src/music_kraken/utils/enums/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/utils/enums/source.py](/src/music_kraken/utils/enums/source.py) | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| [src/music_kraken/utils/exception/__init__.py](/src/music_kraken/utils/exception/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/utils/exception/config.py](/src/music_kraken/utils/exception/config.py) | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| [src/music_kraken/utils/path_manager/__init__.py](/src/music_kraken/utils/path_manager/__init__.py) | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| [src/music_kraken/utils/path_manager/config_directory.py](/src/music_kraken/utils/path_manager/config_directory.py) | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| [src/music_kraken/utils/path_manager/locations.py](/src/music_kraken/utils/path_manager/locations.py) | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| [src/music_kraken/utils/path_manager/music_directory.py](/src/music_kraken/utils/path_manager/music_directory.py) | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| [src/music_kraken/utils/regex.py](/src/music_kraken/utils/regex.py) | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | -12 | -5 | 4 | -13 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 6 | 0 | 4 | 10 |
|
|
||||||
| [src/music_kraken/utils/support_classes/__init__.py](/src/music_kraken/utils/support_classes/__init__.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/support_classes/default_target.py](/src/music_kraken/utils/support_classes/default_target.py) | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| [src/music_kraken/utils/support_classes/download_result.py](/src/music_kraken/utils/support_classes/download_result.py) | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| [src/music_kraken/utils/support_classes/query.py](/src/music_kraken/utils/support_classes/query.py) | Python | 24 | 0 | 9 | 33 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
@ -1,63 +0,0 @@
|
|||||||
"filename", "language", "Python", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 6, 2, 1, 9
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 103, 9, 32, 144
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 85, 3, 18, 106
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py", "Python", 7, 0, 3, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py", "Python", 25, 0, 8, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py", "Python", 60, 4, 24, 88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py", "Python", 1, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py", "Python", 162, 1, 30, 193
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py", "Python", 27, 3, 14, 44
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py", "Python", 2, 0, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/download.py", "Python", 35, 0, 14, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py", "Python", 69, 0, 31, 100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py", "Python", 21, 1, 10, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/search.py", "Python", 130, 24, 56, 210
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", -15, 0, -3, -18
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/album.py", "Python", -16, -6, -5, -27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 5, 0, 2, 7
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 3, 2, 2, 7
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 37, 20, 16, 73
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", -30, -1, -9, -40
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 5, 4, 2, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", -3, 0, -4, -7
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", -71, -10, 0, -81
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py", "Python", -4, 0, -2, -6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py", "Python", -33, 0, -13, -46
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py", "Python", -69, 0, -31, -100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py", "Python", -24, -1, -9, -34
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py", "Python", -85, -23, -38, -146
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", -19, 7, 10, -2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 65, 30, 32, 127
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py", "Python", 43, 1, 16, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py", "Python", 0, 0, -1, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py", "Python", -55, 0, -15, -70
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py", "Python", -51, 0, -15, -66
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py", "Python", -5, 0, -2, -7
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py", "Python", -60, -4, -24, -88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 1, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py", "Python", 7, 0, 4, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py", "Python", 152, 15, 28, 195
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py", "Python", 136, 35, 61, 232
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py", "Python", 92, 16, 30, 138
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py", "Python", 81, 2, 15, 98
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py", "Python", 104, 4, 17, 125
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py", "Python", 40, 0, 9, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py", "Python", 40, 0, 13, 53
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py", "Python", 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py", "Python", 16, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py", "Python", 40, 1, 8, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py", "Python", 1, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py", "Python", 14, 8, 7, 29
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py", "Python", 2, 0, 2, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py", "Python", 4, 0, 4, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py", "Python", 16, 0, 9, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py", "Python", 36, 9, 14, 59
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py", "Python", 1, 0, 2, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", -12, -5, 4, -13
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 6, 0, 4, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py", "Python", 3, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py", "Python", 56, 0, 15, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py", "Python", 69, 0, 21, 90
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py", "Python", 24, 0, 9, 33
|
|
||||||
"Total", "-", 1280, 157, 437, 1874
|
|
|
@ -1,40 +0,0 @@
|
|||||||
# Diff Summary
|
|
||||||
|
|
||||||
Date : 2023-05-24 11:17:57
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 61 files, 1280 codes, 157 comments, 437 blanks, all 1874 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 61 | 1,280 | 157 | 437 | 1,874 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 61 | 1,280 | 157 | 437 | 1,874 |
|
|
||||||
| . (Files) | 1 | 6 | 2 | 1 | 9 |
|
|
||||||
| music_kraken | 60 | 1,274 | 155 | 436 | 1,865 |
|
|
||||||
| music_kraken (Files) | 2 | 188 | 12 | 50 | 250 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/connection | 3 | 190 | 4 | 45 | 239 |
|
|
||||||
| music_kraken/download | 5 | 257 | 25 | 112 | 394 |
|
|
||||||
| music_kraken/objects | 7 | -11 | 19 | 5 | 13 |
|
|
||||||
| music_kraken/pages | 13 | -306 | 4 | -70 | -372 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 15 | 28 | 54 | 97 |
|
|
||||||
| music_kraken/pages/download_center | 5 | -215 | -24 | -93 | -332 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | -106 | 0 | -31 | -137 |
|
|
||||||
| music_kraken/tagging | 2 | -65 | -4 | -26 | -95 |
|
|
||||||
| music_kraken/utils | 25 | 929 | 91 | 285 | 1,305 |
|
|
||||||
| music_kraken/utils (Files) | 4 | -4 | -5 | 11 | 2 |
|
|
||||||
| music_kraken/utils/config | 8 | 652 | 72 | 177 | 901 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 2 | 15 | 8 | 8 | 31 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 4 | 152 | 0 | 46 | 198 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
@ -1,104 +0,0 @@
|
|||||||
Date : 2023-05-24 11:17:57
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 61 files, 1280 codes, 157 comments, 437 blanks, all 1874 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 61 | 1,280 | 157 | 437 | 1,874 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 61 | 1,280 | 157 | 437 | 1,874 |
|
|
||||||
| . (Files) | 1 | 6 | 2 | 1 | 9 |
|
|
||||||
| music_kraken | 60 | 1,274 | 155 | 436 | 1,865 |
|
|
||||||
| music_kraken (Files) | 2 | 188 | 12 | 50 | 250 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/connection | 3 | 190 | 4 | 45 | 239 |
|
|
||||||
| music_kraken/download | 5 | 257 | 25 | 112 | 394 |
|
|
||||||
| music_kraken/objects | 7 | -11 | 19 | 5 | 13 |
|
|
||||||
| music_kraken/pages | 13 | -306 | 4 | -70 | -372 |
|
|
||||||
| music_kraken/pages (Files) | 5 | 15 | 28 | 54 | 97 |
|
|
||||||
| music_kraken/pages/download_center | 5 | -215 | -24 | -93 | -332 |
|
|
||||||
| music_kraken/pages/support_classes | 3 | -106 | 0 | -31 | -137 |
|
|
||||||
| music_kraken/tagging | 2 | -65 | -4 | -26 | -95 |
|
|
||||||
| music_kraken/utils | 25 | 929 | 91 | 285 | 1,305 |
|
|
||||||
| music_kraken/utils (Files) | 4 | -4 | -5 | 11 | 2 |
|
|
||||||
| music_kraken/utils/config | 8 | 652 | 72 | 177 | 901 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 2 | 15 | 8 | 8 | 31 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 4 | 152 | 0 | 46 | 198 |
|
|
||||||
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 6 | 2 | 1 | 9 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 103 | 9 | 32 | 144 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 85 | 3 | 18 | 106 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py | Python | 162 | 1 | 30 | 193 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/download.py | Python | 35 | 0 | 14 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py | Python | 21 | 1 | 10 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/search.py | Python | 130 | 24 | 56 | 210 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | -15 | 0 | -3 | -18 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/album.py | Python | -16 | -6 | -5 | -27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 5 | 0 | 2 | 7 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 3 | 2 | 2 | 7 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 37 | 20 | 16 | 73 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | -30 | -1 | -9 | -40 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 5 | 4 | 2 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | -3 | 0 | -4 | -7 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | -71 | -10 | 0 | -81 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/__init__.py | Python | -4 | 0 | -2 | -6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/download.py | Python | -33 | 0 | -13 | -46 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/multiple_options.py | Python | -69 | 0 | -31 | -100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/page_attributes.py | Python | -24 | -1 | -9 | -34 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/download_center/search.py | Python | -85 | -23 | -38 | -146 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | -19 | 7 | 10 | -2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 65 | 30 | 32 | 127 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py | Python | 43 | 1 | 16 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/__init__.py | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/default_target.py | Python | -55 | 0 | -15 | -70 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/support_classes/download_result.py | Python | -51 | 0 | -15 | -66 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/__init__.py | Python | -5 | 0 | -2 | -7 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/tagging/id3.py | Python | -60 | -4 | -24 | -88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py | Python | 81 | 2 | 15 | 98 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | -12 | -5 | 4 | -13 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 6 | 0 | 4 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py | Python | 24 | 0 | 9 | 33 |
|
|
||||||
| Total | | 1,280 | 157 | 437 | 1,874 |
|
|
||||||
+-------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,91 +0,0 @@
|
|||||||
"filename", "language", "Python", "SQLite", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 43, 0, 2, 18, 63
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", 58, 0, 0, 6, 64
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", 30, 0, 0, 12, 42
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 189, 0, 21, 60, 270
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 88, 0, 3, 21, 112
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py", "Python", 7, 0, 0, 3, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py", "Python", 25, 0, 0, 8, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py", "Python", 60, 0, 4, 24, 88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py", "Python", 1, 0, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py", "Python", 162, 0, 1, 30, 193
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py", "Python", 27, 0, 3, 14, 44
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", 122, 0, 24, 52, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 104, 0, 47, 38, 189
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py", "Python", 2, 0, 0, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/download.py", "Python", 35, 0, 0, 14, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py", "Python", 69, 0, 0, 31, 100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py", "Python", 21, 0, 1, 10, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/search.py", "Python", 130, 0, 24, 56, 210
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py", "Python", 0, 0, 0, 3, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py", "Python", 75, 0, 12, 20, 107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py", "Python", 54, 0, 1, 16, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py", "Python", 6, 0, 0, 2, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py", "Python", 257, 0, 24, 65, 346
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py", "Python", 253, 0, 40, 72, 365
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py", "Python", 42, 0, 6, 12, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py", "Python", 115, 0, 16, 42, 173
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py", "Python", 40, 0, 0, 18, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py", "Python", 136, 0, 9, 37, 182
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py", "Python", 11, 0, 5, 8, 24
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py", "Python", 71, 0, 4, 24, 99
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 14, 0, 0, 5, 19
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 0, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 91, 0, 31, 39, 161
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", 50, 0, 10, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 25, 0, 0, 7, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 261, 0, 62, 61, 384
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 28, 0, 0, 13, 41
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 65, 0, 33, 33, 131
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 473, 0, 113, 115, 701
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 90, 0, 16, 32, 138
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 63, 0, 15, 23, 101
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 357, 0, 34, 103, 494
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 432, 0, 90, 127, 649
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 629, 0, 289, 187, 1105
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py", "Python", 43, 0, 1, 16, 60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 25, 0, 16, 6, 47
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql", "SQLite", 0, 72, 0, 10, 82
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql", "SQLite", 0, 135, 0, 10, 145
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 2, 0, 1, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py", "Python", 7, 0, 0, 4, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py", "Python", 152, 0, 15, 28, 195
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py", "Python", 136, 0, 35, 61, 232
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py", "Python", 92, 0, 16, 30, 138
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py", "Python", 81, 0, 2, 15, 98
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py", "Python", 104, 0, 4, 17, 125
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py", "Python", 40, 0, 0, 9, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py", "Python", 40, 0, 0, 13, 53
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py", "Python", 16, 0, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py", "Python", 40, 0, 1, 8, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py", "Python", 1, 0, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py", "Python", 14, 0, 8, 7, 29
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py", "Python", 19, 0, 0, 6, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py", "Python", 2, 0, 0, 2, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py", "Python", 4, 0, 0, 4, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py", "Python", 16, 0, 0, 9, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py", "Python", 36, 0, 9, 14, 59
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py", "Python", 39, 0, 2, 17, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py", "Python", 1, 0, 0, 2, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 63, 0, 22, 21, 106
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 16, 0, 5, 11, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py", "Python", 56, 0, 0, 15, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py", "Python", 69, 0, 0, 21, 90
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py", "Python", 24, 0, 0, 9, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_cli.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_gtk.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 38, 0, 0, 14, 52
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/conftest.py", "Python", 3, 0, 1, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 0, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_download.py", "Python", 30, 0, 1, 12, 43
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 0, 15, 51, 239
|
|
||||||
"Total", "-", 6329, 207, 1157, 1980, 9673
|
|
|
File diff suppressed because one or more lines are too long
@ -1,46 +0,0 @@
|
|||||||
# Summary
|
|
||||||
|
|
||||||
Date : 2023-05-24 11:17:57
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 89 files, 6536 codes, 1157 comments, 1980 blanks, all 9673 lines
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 87 | 6,329 | 1,157 | 1,960 | 9,446 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 89 | 6,536 | 1,157 | 1,980 | 9,673 |
|
|
||||||
| . (Files) | 7 | 175 | 2 | 56 | 233 |
|
|
||||||
| music_kraken | 77 | 6,074 | 1,137 | 1,845 | 9,056 |
|
|
||||||
| music_kraken (Files) | 2 | 277 | 24 | 81 | 382 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/connection | 3 | 190 | 4 | 45 | 239 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/download | 5 | 257 | 25 | 112 | 394 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 11 | 1,197 | 336 | 365 | 1,898 |
|
|
||||||
| music_kraken/pages | 6 | 1,489 | 430 | 440 | 2,359 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/utils | 28 | 1,076 | 126 | 334 | 1,536 |
|
|
||||||
| music_kraken/utils (Files) | 7 | 143 | 30 | 60 | 233 |
|
|
||||||
| music_kraken/utils/config | 8 | 652 | 72 | 177 | 901 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 2 | 15 | 8 | 8 | 31 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 4 | 152 | 0 | 46 | 198 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,138 +0,0 @@
|
|||||||
Date : 2023-05-24 11:17:57
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 89 files, 6536 codes, 1157 comments, 1980 blanks, all 9673 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 87 | 6,329 | 1,157 | 1,960 | 9,446 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 89 | 6,536 | 1,157 | 1,980 | 9,673 |
|
|
||||||
| . (Files) | 7 | 175 | 2 | 56 | 233 |
|
|
||||||
| music_kraken | 77 | 6,074 | 1,137 | 1,845 | 9,056 |
|
|
||||||
| music_kraken (Files) | 2 | 277 | 24 | 81 | 382 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/connection | 3 | 190 | 4 | 45 | 239 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/download | 5 | 257 | 25 | 112 | 394 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | 1,063 | 117 | 322 | 1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | 129 | 13 | 39 | 181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | 561 | 70 | 153 | 784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | 516 | 64 | 139 | 719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | 45 | 6 | 14 | 65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | 373 | 34 | 130 | 537 |
|
|
||||||
| music_kraken/objects | 11 | 1,197 | 336 | 365 | 1,898 |
|
|
||||||
| music_kraken/pages | 6 | 1,489 | 430 | 440 | 2,359 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/utils | 28 | 1,076 | 126 | 334 | 1,536 |
|
|
||||||
| music_kraken/utils (Files) | 7 | 143 | 30 | 60 | 233 |
|
|
||||||
| music_kraken/utils/config | 8 | 652 | 72 | 177 | 901 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 2 | 15 | 8 | 8 | 31 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 4 | 152 | 0 | 46 | 198 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 43 | 2 | 18 | 63 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 189 | 21 | 60 | 270 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 88 | 3 | 21 | 112 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py | Python | 162 | 1 | 30 | 193 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/download.py | Python | 35 | 0 | 14 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py | Python | 21 | 1 | 10 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/search.py | Python | 130 | 24 | 56 | 210 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py | Python | 0 | 0 | 3 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py | Python | 75 | 12 | 20 | 107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py | Python | 54 | 1 | 16 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py | Python | 6 | 0 | 2 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py | Python | 257 | 24 | 65 | 346 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py | Python | 253 | 40 | 72 | 365 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py | Python | 42 | 6 | 12 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py | Python | 115 | 16 | 42 | 173 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py | Python | 40 | 0 | 18 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py | Python | 136 | 9 | 37 | 182 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py | Python | 11 | 5 | 8 | 24 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py | Python | 71 | 4 | 24 | 99 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 261 | 62 | 61 | 384 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 28 | 0 | 13 | 41 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 65 | 33 | 33 | 131 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 473 | 113 | 115 | 701 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 90 | 16 | 32 | 138 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 63 | 15 | 23 | 101 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 357 | 34 | 103 | 494 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 432 | 90 | 127 | 649 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 629 | 289 | 187 | 1,105 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py | Python | 43 | 1 | 16 | 60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 25 | 16 | 6 | 47 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 2 | 1 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py | Python | 81 | 2 | 15 | 98 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 63 | 22 | 21 | 106 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 16 | 5 | 11 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py | Python | 24 | 0 | 9 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_cli.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_gtk.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/conftest.py | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_download.py | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| Total | | 6,536 | 1,157 | 1,980 | 9,673 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,98 +0,0 @@
|
|||||||
# Details
|
|
||||||
|
|
||||||
Date : 2023-06-14 07:47:51
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 83 files, 5827 codes, 1152 comments, 1825 blanks, all 8804 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/__init__.py](/src/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | 16 | 0 | 6 | 22 |
|
|
||||||
| [src/create_custom_objects.py](/src/create_custom_objects.py) | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| [src/metal_archives.py](/src/metal_archives.py) | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | 112 | 6 | 33 | 151 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 98 | 3 | 23 | 124 |
|
|
||||||
| [src/music_kraken/audio/__init__.py](/src/music_kraken/audio/__init__.py) | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| [src/music_kraken/audio/codec.py](/src/music_kraken/audio/codec.py) | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| [src/music_kraken/audio/metadata.py](/src/music_kraken/audio/metadata.py) | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| [src/music_kraken/cli/__init__.py](/src/music_kraken/cli/__init__.py) | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| [src/music_kraken/cli/download/__init__.py](/src/music_kraken/cli/download/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/cli/download/shell.py](/src/music_kraken/cli/download/shell.py) | Python | 199 | 86 | 78 | 363 |
|
|
||||||
| [src/music_kraken/cli/options/__init__.py](/src/music_kraken/cli/options/__init__.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/cli/options/invidious/__init__.py](/src/music_kraken/cli/options/invidious/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/cli/options/invidious/shell.py](/src/music_kraken/cli/options/invidious/shell.py) | Python | 66 | 7 | 28 | 101 |
|
|
||||||
| [src/music_kraken/connection/__init__.py](/src/music_kraken/connection/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/connection/connection.py](/src/music_kraken/connection/connection.py) | Python | 168 | 1 | 30 | 199 |
|
|
||||||
| [src/music_kraken/connection/rotating.py](/src/music_kraken/connection/rotating.py) | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| [src/music_kraken/database/__init__.py](/src/music_kraken/database/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/database/data_models.py](/src/music_kraken/database/data_models.py) | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| [src/music_kraken/database/database.py](/src/music_kraken/database/database.py) | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| [src/music_kraken/download/__init__.py](/src/music_kraken/download/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/download/multiple_options.py](/src/music_kraken/download/multiple_options.py) | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| [src/music_kraken/download/page_attributes.py](/src/music_kraken/download/page_attributes.py) | Python | 67 | 1 | 29 | 97 |
|
|
||||||
| [src/music_kraken/download/results.py](/src/music_kraken/download/results.py) | Python | 62 | 7 | 26 | 95 |
|
|
||||||
| [src/music_kraken/download/search.py](/src/music_kraken/download/search.py) | Python | 124 | 24 | 56 | 204 |
|
|
||||||
| [src/music_kraken/objects/__init__.py](/src/music_kraken/objects/__init__.py) | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| [src/music_kraken/objects/cache.py](/src/music_kraken/objects/cache.py) | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| [src/music_kraken/objects/collection.py](/src/music_kraken/objects/collection.py) | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| [src/music_kraken/objects/formatted_text.py](/src/music_kraken/objects/formatted_text.py) | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| [src/music_kraken/objects/lyrics.py](/src/music_kraken/objects/lyrics.py) | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 272 | 62 | 63 | 397 |
|
|
||||||
| [src/music_kraken/objects/option.py](/src/music_kraken/objects/option.py) | Python | 28 | 0 | 13 | 41 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 71 | 35 | 35 | 141 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 480 | 113 | 120 | 713 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 93 | 16 | 33 | 142 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 65 | 15 | 24 | 104 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | 234 | 46 | 93 | 373 |
|
|
||||||
| [src/music_kraken/pages/encyclopaedia_metallum.py](/src/music_kraken/pages/encyclopaedia_metallum.py) | Python | 432 | 90 | 127 | 649 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | 576 | 275 | 166 | 1,017 |
|
|
||||||
| [src/music_kraken/pages/preset.py](/src/music_kraken/pages/preset.py) | Python | 47 | 1 | 17 | 65 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 254 | 45 | 79 | 378 |
|
|
||||||
| [src/music_kraken/static_files/new_db.sql](/src/music_kraken/static_files/new_db.sql) | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| [src/music_kraken/static_files/temp_database_structure.sql](/src/music_kraken/static_files/temp_database_structure.sql) | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| [src/music_kraken/utils/__init__.py](/src/music_kraken/utils/__init__.py) | Python | 2 | 1 | 2 | 5 |
|
|
||||||
| [src/music_kraken/utils/config/__init__.py](/src/music_kraken/utils/config/__init__.py) | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| [src/music_kraken/utils/config/audio.py](/src/music_kraken/utils/config/audio.py) | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| [src/music_kraken/utils/config/base_classes.py](/src/music_kraken/utils/config/base_classes.py) | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| [src/music_kraken/utils/config/config.py](/src/music_kraken/utils/config/config.py) | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| [src/music_kraken/utils/config/connection.py](/src/music_kraken/utils/config/connection.py) | Python | 80 | 2 | 15 | 97 |
|
|
||||||
| [src/music_kraken/utils/config/logging.py](/src/music_kraken/utils/config/logging.py) | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| [src/music_kraken/utils/config/misc.py](/src/music_kraken/utils/config/misc.py) | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| [src/music_kraken/utils/config/paths.py](/src/music_kraken/utils/config/paths.py) | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| [src/music_kraken/utils/enums/__init__.py](/src/music_kraken/utils/enums/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/utils/enums/album.py](/src/music_kraken/utils/enums/album.py) | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| [src/music_kraken/utils/enums/source.py](/src/music_kraken/utils/enums/source.py) | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| [src/music_kraken/utils/exception/__init__.py](/src/music_kraken/utils/exception/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/utils/exception/config.py](/src/music_kraken/utils/exception/config.py) | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| [src/music_kraken/utils/exception/download.py](/src/music_kraken/utils/exception/download.py) | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| [src/music_kraken/utils/functions.py](/src/music_kraken/utils/functions.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/object_handeling.py](/src/music_kraken/utils/object_handeling.py) | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| [src/music_kraken/utils/path_manager/__init__.py](/src/music_kraken/utils/path_manager/__init__.py) | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| [src/music_kraken/utils/path_manager/config_directory.py](/src/music_kraken/utils/path_manager/config_directory.py) | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| [src/music_kraken/utils/path_manager/locations.py](/src/music_kraken/utils/path_manager/locations.py) | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| [src/music_kraken/utils/path_manager/music_directory.py](/src/music_kraken/utils/path_manager/music_directory.py) | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| [src/music_kraken/utils/phonetic_compares.py](/src/music_kraken/utils/phonetic_compares.py) | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| [src/music_kraken/utils/regex.py](/src/music_kraken/utils/regex.py) | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 66 | 22 | 22 | 110 |
|
|
||||||
| [src/music_kraken/utils/string_processing.py](/src/music_kraken/utils/string_processing.py) | Python | 16 | 5 | 11 | 32 |
|
|
||||||
| [src/music_kraken/utils/support_classes/__init__.py](/src/music_kraken/utils/support_classes/__init__.py) | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| [src/music_kraken/utils/support_classes/default_target.py](/src/music_kraken/utils/support_classes/default_target.py) | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| [src/music_kraken/utils/support_classes/download_result.py](/src/music_kraken/utils/support_classes/download_result.py) | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| [src/music_kraken/utils/support_classes/query.py](/src/music_kraken/utils/support_classes/query.py) | Python | 24 | 0 | 9 | 33 |
|
|
||||||
| [src/music_kraken/utils/support_classes/thread_classes.py](/src/music_kraken/utils/support_classes/thread_classes.py) | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| [src/music_kraken_cli.py](/src/music_kraken_cli.py) | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| [src/music_kraken_gtk.py](/src/music_kraken_gtk.py) | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| [src/musify_search.py](/src/musify_search.py) | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| [src/tests/__init__.py](/src/tests/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/tests/conftest.py](/src/tests/conftest.py) | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| [src/tests/test_building_objects.py](/src/tests/test_building_objects.py) | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| [src/tests/test_download.py](/src/tests/test_download.py) | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| [src/tests/test_objects.py](/src/tests/test_objects.py) | Python | 173 | 15 | 51 | 239 |
|
|
||||||
|
|
||||||
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,59 +0,0 @@
|
|||||||
# Diff Details
|
|
||||||
|
|
||||||
Date : 2023-06-14 07:47:51
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 44 files, -709 codes, -5 comments, -155 blanks, all -869 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
||||||
|
|
||||||
## Files
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
| :--- | :--- | ---: | ---: | ---: | ---: |
|
|
||||||
| [src/actual_donwload.py](/src/actual_donwload.py) | Python | -27 | -2 | -12 | -41 |
|
|
||||||
| [src/music_kraken/__init__.py](/src/music_kraken/__init__.py) | Python | -77 | -15 | -27 | -119 |
|
|
||||||
| [src/music_kraken/__main__.py](/src/music_kraken/__main__.py) | Python | 10 | 0 | 2 | 12 |
|
|
||||||
| [src/music_kraken/cli/__init__.py](/src/music_kraken/cli/__init__.py) | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| [src/music_kraken/cli/download/__init__.py](/src/music_kraken/cli/download/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/cli/download/shell.py](/src/music_kraken/cli/download/shell.py) | Python | 199 | 86 | 78 | 363 |
|
|
||||||
| [src/music_kraken/cli/options/__init__.py](/src/music_kraken/cli/options/__init__.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/cli/options/invidious/__init__.py](/src/music_kraken/cli/options/invidious/__init__.py) | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| [src/music_kraken/cli/options/invidious/shell.py](/src/music_kraken/cli/options/invidious/shell.py) | Python | 66 | 7 | 28 | 101 |
|
|
||||||
| [src/music_kraken/connection/connection.py](/src/music_kraken/connection/connection.py) | Python | 6 | 0 | 0 | 6 |
|
|
||||||
| [src/music_kraken/download/__init__.py](/src/music_kraken/download/__init__.py) | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| [src/music_kraken/download/download.py](/src/music_kraken/download/download.py) | Python | -35 | 0 | -14 | -49 |
|
|
||||||
| [src/music_kraken/download/page_attributes.py](/src/music_kraken/download/page_attributes.py) | Python | 46 | 0 | 19 | 65 |
|
|
||||||
| [src/music_kraken/download/results.py](/src/music_kraken/download/results.py) | Python | 62 | 7 | 26 | 95 |
|
|
||||||
| [src/music_kraken/download/search.py](/src/music_kraken/download/search.py) | Python | -6 | 0 | 0 | -6 |
|
|
||||||
| [src/music_kraken/not_used_anymore/__init__.py](/src/music_kraken/not_used_anymore/__init__.py) | Python | 0 | 0 | -3 | -3 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_audio.py](/src/music_kraken/not_used_anymore/fetch_audio.py) | Python | -75 | -12 | -20 | -107 |
|
|
||||||
| [src/music_kraken/not_used_anymore/fetch_source.py](/src/music_kraken/not_used_anymore/fetch_source.py) | Python | -54 | -1 | -16 | -71 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/__init__.py](/src/music_kraken/not_used_anymore/metadata/__init__.py) | Python | -6 | 0 | -2 | -8 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_fetch.py](/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py) | Python | -257 | -24 | -65 | -346 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/metadata_search.py](/src/music_kraken/not_used_anymore/metadata/metadata_search.py) | Python | -253 | -40 | -72 | -365 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/__init__.py](/src/music_kraken/not_used_anymore/metadata/sources/__init__.py) | Python | -3 | 0 | -2 | -5 |
|
|
||||||
| [src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py](/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py) | Python | -42 | -6 | -12 | -60 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/__init__.py](/src/music_kraken/not_used_anymore/sources/__init__.py) | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/genius.py](/src/music_kraken/not_used_anymore/sources/genius.py) | Python | -115 | -16 | -42 | -173 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/local_files.py](/src/music_kraken/not_used_anymore/sources/local_files.py) | Python | -40 | 0 | -18 | -58 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/musify.py](/src/music_kraken/not_used_anymore/sources/musify.py) | Python | -136 | -9 | -37 | -182 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/source.py](/src/music_kraken/not_used_anymore/sources/source.py) | Python | -11 | -5 | -8 | -24 |
|
|
||||||
| [src/music_kraken/not_used_anymore/sources/youtube.py](/src/music_kraken/not_used_anymore/sources/youtube.py) | Python | -71 | -4 | -24 | -99 |
|
|
||||||
| [src/music_kraken/objects/metadata.py](/src/music_kraken/objects/metadata.py) | Python | 11 | 0 | 2 | 13 |
|
|
||||||
| [src/music_kraken/objects/parents.py](/src/music_kraken/objects/parents.py) | Python | 6 | 2 | 2 | 10 |
|
|
||||||
| [src/music_kraken/objects/song.py](/src/music_kraken/objects/song.py) | Python | 7 | 0 | 5 | 12 |
|
|
||||||
| [src/music_kraken/objects/source.py](/src/music_kraken/objects/source.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/objects/target.py](/src/music_kraken/objects/target.py) | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| [src/music_kraken/pages/__init__.py](/src/music_kraken/pages/__init__.py) | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| [src/music_kraken/pages/abstract.py](/src/music_kraken/pages/abstract.py) | Python | -123 | 12 | -10 | -121 |
|
|
||||||
| [src/music_kraken/pages/musify.py](/src/music_kraken/pages/musify.py) | Python | -53 | -14 | -21 | -88 |
|
|
||||||
| [src/music_kraken/pages/preset.py](/src/music_kraken/pages/preset.py) | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| [src/music_kraken/pages/youtube.py](/src/music_kraken/pages/youtube.py) | Python | 229 | 29 | 73 | 331 |
|
|
||||||
| [src/music_kraken/utils/config/connection.py](/src/music_kraken/utils/config/connection.py) | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| [src/music_kraken/utils/exception/download.py](/src/music_kraken/utils/exception/download.py) | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| [src/music_kraken/utils/shared.py](/src/music_kraken/utils/shared.py) | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| [src/music_kraken/utils/support_classes/__init__.py](/src/music_kraken/utils/support_classes/__init__.py) | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| [src/music_kraken/utils/support_classes/thread_classes.py](/src/music_kraken/utils/support_classes/thread_classes.py) | Python | 8 | 0 | 4 | 12 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
|
|
@ -1,46 +0,0 @@
|
|||||||
"filename", "language", "Python", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", -27, -2, -12, -41
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", -77, -15, -27, -119
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 10, 0, 2, 12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/__init__.py", "Python", 2, 0, 0, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/download/__init__.py", "Python", 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/download/shell.py", "Python", 199, 86, 78, 363
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/__init__.py", "Python", 3, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/__init__.py", "Python", 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/shell.py", "Python", 66, 7, 28, 101
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py", "Python", 6, 0, 0, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py", "Python", -1, 0, 0, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/download.py", "Python", -35, 0, -14, -49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py", "Python", 46, 0, 19, 65
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/results.py", "Python", 62, 7, 26, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/search.py", "Python", -6, 0, 0, -6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py", "Python", 0, 0, -3, -3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py", "Python", -75, -12, -20, -107
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py", "Python", -54, -1, -16, -71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py", "Python", -6, 0, -2, -8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py", "Python", -257, -24, -65, -346
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py", "Python", -253, -40, -72, -365
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py", "Python", -3, 0, -2, -5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py", "Python", -42, -6, -12, -60
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py", "Python", 0, 0, -1, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py", "Python", -115, -16, -42, -173
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py", "Python", -40, 0, -18, -58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py", "Python", -136, -9, -37, -182
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py", "Python", -11, -5, -8, -24
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py", "Python", -71, -4, -24, -99
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 11, 0, 2, 13
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 6, 2, 2, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 7, 0, 5, 12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 3, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 2, 0, 1, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 1, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", -123, 12, -10, -121
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", -53, -14, -21, -88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py", "Python", 4, 0, 1, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 229, 29, 73, 331
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py", "Python", -1, 0, 0, -1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/download.py", "Python", 8, 0, 4, 12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 3, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py", "Python", 1, 0, 0, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/thread_classes.py", "Python", 8, 0, 4, 12
|
|
||||||
"Total", "-", -709, -5, -155, -869
|
|
|
@ -1,45 +0,0 @@
|
|||||||
# Diff Summary
|
|
||||||
|
|
||||||
Date : 2023-06-14 07:47:51
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 44 files, -709 codes, -5 comments, -155 blanks, all -869 lines
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 44 | -709 | -5 | -155 | -869 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 44 | -709 | -5 | -155 | -869 |
|
|
||||||
| . (Files) | 1 | -27 | -2 | -12 | -41 |
|
|
||||||
| music_kraken | 43 | -682 | -3 | -143 | -828 |
|
|
||||||
| music_kraken (Files) | 2 | -67 | -15 | -25 | -107 |
|
|
||||||
| music_kraken/cli | 6 | 270 | 93 | 109 | 472 |
|
|
||||||
| music_kraken/cli (Files) | 1 | 2 | 0 | 0 | 2 |
|
|
||||||
| music_kraken/cli/download | 2 | 199 | 86 | 79 | 364 |
|
|
||||||
| music_kraken/cli/options | 3 | 69 | 7 | 30 | 106 |
|
|
||||||
| music_kraken/cli/options (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/cli/options/invidious | 2 | 66 | 7 | 29 | 102 |
|
|
||||||
| music_kraken/connection | 1 | 6 | 0 | 0 | 6 |
|
|
||||||
| music_kraken/download | 5 | 66 | 7 | 31 | 104 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | -1,063 | -117 | -322 | -1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | -129 | -13 | -39 | -181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | -561 | -70 | -153 | -784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | -516 | -64 | -139 | -719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | -45 | -6 | -14 | -65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | -373 | -34 | -130 | -537 |
|
|
||||||
| music_kraken/objects | 5 | 29 | 2 | 11 | 42 |
|
|
||||||
| music_kraken/pages | 5 | 58 | 27 | 44 | 129 |
|
|
||||||
| music_kraken/utils | 5 | 19 | 0 | 9 | 28 |
|
|
||||||
| music_kraken/utils (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/utils/config | 1 | -1 | 0 | 0 | -1 |
|
|
||||||
| music_kraken/utils/exception | 1 | 8 | 0 | 4 | 12 |
|
|
||||||
| music_kraken/utils/support_classes | 2 | 9 | 0 | 4 | 13 |
|
|
||||||
|
|
||||||
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
|
|
@ -1,92 +0,0 @@
|
|||||||
Date : 2023-06-14 07:47:51
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 44 files, -709 codes, -5 comments, -155 blanks, all -869 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 44 | -709 | -5 | -155 | -869 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 44 | -709 | -5 | -155 | -869 |
|
|
||||||
| . (Files) | 1 | -27 | -2 | -12 | -41 |
|
|
||||||
| music_kraken | 43 | -682 | -3 | -143 | -828 |
|
|
||||||
| music_kraken (Files) | 2 | -67 | -15 | -25 | -107 |
|
|
||||||
| music_kraken/cli | 6 | 270 | 93 | 109 | 472 |
|
|
||||||
| music_kraken/cli (Files) | 1 | 2 | 0 | 0 | 2 |
|
|
||||||
| music_kraken/cli/download | 2 | 199 | 86 | 79 | 364 |
|
|
||||||
| music_kraken/cli/options | 3 | 69 | 7 | 30 | 106 |
|
|
||||||
| music_kraken/cli/options (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/cli/options/invidious | 2 | 66 | 7 | 29 | 102 |
|
|
||||||
| music_kraken/connection | 1 | 6 | 0 | 0 | 6 |
|
|
||||||
| music_kraken/download | 5 | 66 | 7 | 31 | 104 |
|
|
||||||
| music_kraken/not_used_anymore | 14 | -1,063 | -117 | -322 | -1,502 |
|
|
||||||
| music_kraken/not_used_anymore (Files) | 3 | -129 | -13 | -39 | -181 |
|
|
||||||
| music_kraken/not_used_anymore/metadata | 5 | -561 | -70 | -153 | -784 |
|
|
||||||
| music_kraken/not_used_anymore/metadata (Files) | 3 | -516 | -64 | -139 | -719 |
|
|
||||||
| music_kraken/not_used_anymore/metadata/sources | 2 | -45 | -6 | -14 | -65 |
|
|
||||||
| music_kraken/not_used_anymore/sources | 6 | -373 | -34 | -130 | -537 |
|
|
||||||
| music_kraken/objects | 5 | 29 | 2 | 11 | 42 |
|
|
||||||
| music_kraken/pages | 5 | 58 | 27 | 44 | 129 |
|
|
||||||
| music_kraken/utils | 5 | 19 | 0 | 9 | 28 |
|
|
||||||
| music_kraken/utils (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/utils/config | 1 | -1 | 0 | 0 | -1 |
|
|
||||||
| music_kraken/utils/exception | 1 | 8 | 0 | 4 | 12 |
|
|
||||||
| music_kraken/utils/support_classes | 2 | 9 | 0 | 4 | 13 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | -27 | -2 | -12 | -41 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | -77 | -15 | -27 | -119 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 10 | 0 | 2 | 12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/__init__.py | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/download/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/download/shell.py | Python | 199 | 86 | 78 | 363 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/__init__.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/shell.py | Python | 66 | 7 | 28 | 101 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py | Python | 6 | 0 | 0 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/download.py | Python | -35 | 0 | -14 | -49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py | Python | 46 | 0 | 19 | 65 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/results.py | Python | 62 | 7 | 26 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/search.py | Python | -6 | 0 | 0 | -6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/__init__.py | Python | 0 | 0 | -3 | -3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_audio.py | Python | -75 | -12 | -20 | -107 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/fetch_source.py | Python | -54 | -1 | -16 | -71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/__init__.py | Python | -6 | 0 | -2 | -8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_fetch.py | Python | -257 | -24 | -65 | -346 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/metadata_search.py | Python | -253 | -40 | -72 | -365 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/__init__.py | Python | -3 | 0 | -2 | -5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/metadata/sources/musicbrainz.py | Python | -42 | -6 | -12 | -60 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/__init__.py | Python | 0 | 0 | -1 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/genius.py | Python | -115 | -16 | -42 | -173 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/local_files.py | Python | -40 | 0 | -18 | -58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/musify.py | Python | -136 | -9 | -37 | -182 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/source.py | Python | -11 | -5 | -8 | -24 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/not_used_anymore/sources/youtube.py | Python | -71 | -4 | -24 | -99 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 11 | 0 | 2 | 13 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 6 | 2 | 2 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 7 | 0 | 5 | 12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 2 | 0 | 1 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | -123 | 12 | -10 | -121 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | -53 | -14 | -21 | -88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 229 | 29 | 73 | 331 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py | Python | -1 | 0 | 0 | -1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/download.py | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py | Python | 1 | 0 | 0 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/thread_classes.py | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| Total | | -709 | -5 | -155 | -869 |
|
|
||||||
+--------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
@ -1,85 +0,0 @@
|
|||||||
"filename", "language", "Python", "SQLite", "comment", "blank", "total"
|
|
||||||
"/home/lars/Projects/music-downloader/src/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/actual_donwload.py", "Python", 16, 0, 0, 6, 22
|
|
||||||
"/home/lars/Projects/music-downloader/src/create_custom_objects.py", "Python", 58, 0, 0, 6, 64
|
|
||||||
"/home/lars/Projects/music-downloader/src/metal_archives.py", "Python", 30, 0, 0, 12, 42
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__init__.py", "Python", 112, 0, 6, 33, 151
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/__main__.py", "Python", 98, 0, 3, 23, 124
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py", "Python", 7, 0, 0, 3, 10
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py", "Python", 25, 0, 0, 8, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py", "Python", 60, 0, 4, 24, 88
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/__init__.py", "Python", 2, 0, 0, 0, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/download/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/download/shell.py", "Python", 199, 0, 86, 78, 363
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/__init__.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/shell.py", "Python", 66, 0, 7, 28, 101
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py", "Python", 1, 0, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py", "Python", 168, 0, 1, 30, 199
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py", "Python", 27, 0, 3, 14, 44
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py", "Python", 122, 0, 24, 52, 198
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/database/database.py", "Python", 104, 0, 47, 38, 189
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py", "Python", 1, 0, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py", "Python", 69, 0, 0, 31, 100
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py", "Python", 67, 0, 1, 29, 97
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/results.py", "Python", 62, 0, 7, 26, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/download/search.py", "Python", 124, 0, 24, 56, 204
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py", "Python", 14, 0, 0, 5, 19
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py", "Python", 37, 0, 56, 18, 111
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py", "Python", 91, 0, 31, 39, 161
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py", "Python", 50, 0, 10, 19, 79
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py", "Python", 25, 0, 0, 7, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py", "Python", 272, 0, 62, 63, 397
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/option.py", "Python", 28, 0, 0, 13, 41
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py", "Python", 71, 0, 35, 35, 141
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/song.py", "Python", 480, 0, 113, 120, 713
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/source.py", "Python", 93, 0, 16, 33, 142
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/objects/target.py", "Python", 65, 0, 15, 24, 104
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py", "Python", 4, 0, 0, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py", "Python", 234, 0, 46, 93, 373
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py", "Python", 432, 0, 90, 127, 649
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py", "Python", 576, 0, 275, 166, 1017
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py", "Python", 47, 0, 1, 17, 65
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py", "Python", 254, 0, 45, 79, 378
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql", "SQLite", 0, 72, 0, 10, 82
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql", "SQLite", 0, 135, 0, 10, 145
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py", "Python", 2, 0, 1, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py", "Python", 7, 0, 0, 4, 11
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py", "Python", 152, 0, 15, 28, 195
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py", "Python", 136, 0, 35, 61, 232
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py", "Python", 92, 0, 16, 30, 138
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py", "Python", 80, 0, 2, 15, 97
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py", "Python", 104, 0, 4, 17, 125
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py", "Python", 40, 0, 0, 9, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py", "Python", 40, 0, 0, 13, 53
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py", "Python", 16, 0, 6, 5, 27
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py", "Python", 40, 0, 1, 8, 49
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py", "Python", 1, 0, 0, 1, 2
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py", "Python", 14, 0, 8, 7, 29
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/exception/download.py", "Python", 8, 0, 0, 4, 12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py", "Python", 3, 0, 0, 1, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py", "Python", 19, 0, 0, 6, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py", "Python", 2, 0, 0, 2, 4
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py", "Python", 4, 0, 0, 4, 8
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py", "Python", 16, 0, 0, 9, 25
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py", "Python", 36, 0, 9, 14, 59
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py", "Python", 39, 0, 2, 17, 58
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py", "Python", 1, 0, 0, 2, 3
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py", "Python", 66, 0, 22, 22, 110
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py", "Python", 16, 0, 5, 11, 32
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py", "Python", 4, 0, 0, 1, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py", "Python", 56, 0, 0, 15, 71
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py", "Python", 69, 0, 0, 21, 90
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py", "Python", 24, 0, 0, 9, 33
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/thread_classes.py", "Python", 8, 0, 0, 4, 12
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_cli.py", "Python", 3, 0, 0, 3, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/music_kraken_gtk.py", "Python", 3, 0, 0, 2, 5
|
|
||||||
"/home/lars/Projects/music-downloader/src/musify_search.py", "Python", 38, 0, 0, 14, 52
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/__init__.py", "Python", 0, 0, 0, 1, 1
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/conftest.py", "Python", 3, 0, 1, 2, 6
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_building_objects.py", "Python", 81, 0, 1, 13, 95
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_download.py", "Python", 30, 0, 1, 12, 43
|
|
||||||
"/home/lars/Projects/music-downloader/src/tests/test_objects.py", "Python", 173, 0, 15, 51, 239
|
|
||||||
"Total", "-", 5620, 207, 1152, 1825, 8804
|
|
|
File diff suppressed because one or more lines are too long
@ -1,46 +0,0 @@
|
|||||||
# Summary
|
|
||||||
|
|
||||||
Date : 2023-06-14 07:47:51
|
|
||||||
|
|
||||||
Directory /home/lars/Projects/music-downloader/src
|
|
||||||
|
|
||||||
Total : 83 files, 5827 codes, 1152 comments, 1825 blanks, all 8804 lines
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
||||||
|
|
||||||
## Languages
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| Python | 81 | 5,620 | 1,152 | 1,805 | 8,577 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
|
|
||||||
## Directories
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
| :--- | ---: | ---: | ---: | ---: | ---: |
|
|
||||||
| . | 83 | 5,827 | 1,152 | 1,825 | 8,804 |
|
|
||||||
| . (Files) | 7 | 148 | 0 | 44 | 192 |
|
|
||||||
| music_kraken | 71 | 5,392 | 1,134 | 1,702 | 8,228 |
|
|
||||||
| music_kraken (Files) | 2 | 210 | 9 | 56 | 275 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/cli | 6 | 270 | 93 | 109 | 472 |
|
|
||||||
| music_kraken/cli (Files) | 1 | 2 | 0 | 0 | 2 |
|
|
||||||
| music_kraken/cli/download | 2 | 199 | 86 | 79 | 364 |
|
|
||||||
| music_kraken/cli/options | 3 | 69 | 7 | 30 | 106 |
|
|
||||||
| music_kraken/cli/options (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/cli/options/invidious | 2 | 66 | 7 | 29 | 102 |
|
|
||||||
| music_kraken/connection | 3 | 196 | 4 | 45 | 245 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/download | 5 | 323 | 32 | 143 | 498 |
|
|
||||||
| music_kraken/objects | 11 | 1,226 | 338 | 376 | 1,940 |
|
|
||||||
| music_kraken/pages | 6 | 1,547 | 457 | 484 | 2,488 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/utils | 30 | 1,095 | 126 | 343 | 1,564 |
|
|
||||||
| music_kraken/utils (Files) | 7 | 146 | 30 | 61 | 237 |
|
|
||||||
| music_kraken/utils/config | 8 | 651 | 72 | 177 | 900 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 3 | 23 | 8 | 12 | 43 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 5 | 161 | 0 | 50 | 211 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
|
|
||||||
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
|
|
@ -1,132 +0,0 @@
|
|||||||
Date : 2023-06-14 07:47:51
|
|
||||||
Directory : /home/lars/Projects/music-downloader/src
|
|
||||||
Total : 83 files, 5827 codes, 1152 comments, 1825 blanks, all 8804 lines
|
|
||||||
|
|
||||||
Languages
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| language | files | code | comment | blank | total |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
| Python | 81 | 5,620 | 1,152 | 1,805 | 8,577 |
|
|
||||||
| SQLite | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
+----------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Directories
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| path | files | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
| . | 83 | 5,827 | 1,152 | 1,825 | 8,804 |
|
|
||||||
| . (Files) | 7 | 148 | 0 | 44 | 192 |
|
|
||||||
| music_kraken | 71 | 5,392 | 1,134 | 1,702 | 8,228 |
|
|
||||||
| music_kraken (Files) | 2 | 210 | 9 | 56 | 275 |
|
|
||||||
| music_kraken/audio | 3 | 92 | 4 | 35 | 131 |
|
|
||||||
| music_kraken/cli | 6 | 270 | 93 | 109 | 472 |
|
|
||||||
| music_kraken/cli (Files) | 1 | 2 | 0 | 0 | 2 |
|
|
||||||
| music_kraken/cli/download | 2 | 199 | 86 | 79 | 364 |
|
|
||||||
| music_kraken/cli/options | 3 | 69 | 7 | 30 | 106 |
|
|
||||||
| music_kraken/cli/options (Files) | 1 | 3 | 0 | 1 | 4 |
|
|
||||||
| music_kraken/cli/options/invidious | 2 | 66 | 7 | 29 | 102 |
|
|
||||||
| music_kraken/connection | 3 | 196 | 4 | 45 | 245 |
|
|
||||||
| music_kraken/database | 3 | 226 | 71 | 91 | 388 |
|
|
||||||
| music_kraken/download | 5 | 323 | 32 | 143 | 498 |
|
|
||||||
| music_kraken/objects | 11 | 1,226 | 338 | 376 | 1,940 |
|
|
||||||
| music_kraken/pages | 6 | 1,547 | 457 | 484 | 2,488 |
|
|
||||||
| music_kraken/static_files | 2 | 207 | 0 | 20 | 227 |
|
|
||||||
| music_kraken/utils | 30 | 1,095 | 126 | 343 | 1,564 |
|
|
||||||
| music_kraken/utils (Files) | 7 | 146 | 30 | 61 | 237 |
|
|
||||||
| music_kraken/utils/config | 8 | 651 | 72 | 177 | 900 |
|
|
||||||
| music_kraken/utils/enums | 3 | 56 | 7 | 14 | 77 |
|
|
||||||
| music_kraken/utils/exception | 3 | 23 | 8 | 12 | 43 |
|
|
||||||
| music_kraken/utils/path_manager | 4 | 58 | 9 | 29 | 96 |
|
|
||||||
| music_kraken/utils/support_classes | 5 | 161 | 0 | 50 | 211 |
|
|
||||||
| tests | 5 | 287 | 18 | 79 | 384 |
|
|
||||||
+------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
|
|
||||||
|
|
||||||
Files
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| filename | language | code | comment | blank | total |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
||||||
| /home/lars/Projects/music-downloader/src/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/actual_donwload.py | Python | 16 | 0 | 6 | 22 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/create_custom_objects.py | Python | 58 | 0 | 6 | 64 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/metal_archives.py | Python | 30 | 0 | 12 | 42 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__init__.py | Python | 112 | 6 | 33 | 151 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/__main__.py | Python | 98 | 3 | 23 | 124 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/__init__.py | Python | 7 | 0 | 3 | 10 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/codec.py | Python | 25 | 0 | 8 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/audio/metadata.py | Python | 60 | 4 | 24 | 88 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/__init__.py | Python | 2 | 0 | 0 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/download/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/download/shell.py | Python | 199 | 86 | 78 | 363 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/__init__.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/cli/options/invidious/shell.py | Python | 66 | 7 | 28 | 101 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/connection.py | Python | 168 | 1 | 30 | 199 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/connection/rotating.py | Python | 27 | 3 | 14 | 44 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/data_models.py | Python | 122 | 24 | 52 | 198 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/database/database.py | Python | 104 | 47 | 38 | 189 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/multiple_options.py | Python | 69 | 0 | 31 | 100 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/page_attributes.py | Python | 67 | 1 | 29 | 97 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/results.py | Python | 62 | 7 | 26 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/download/search.py | Python | 124 | 24 | 56 | 204 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/__init__.py | Python | 14 | 0 | 5 | 19 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/cache.py | Python | 37 | 56 | 18 | 111 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/collection.py | Python | 91 | 31 | 39 | 161 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/formatted_text.py | Python | 50 | 10 | 19 | 79 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/lyrics.py | Python | 25 | 0 | 7 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/metadata.py | Python | 272 | 62 | 63 | 397 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/option.py | Python | 28 | 0 | 13 | 41 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/parents.py | Python | 71 | 35 | 35 | 141 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/song.py | Python | 480 | 113 | 120 | 713 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/source.py | Python | 93 | 16 | 33 | 142 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/objects/target.py | Python | 65 | 15 | 24 | 104 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/__init__.py | Python | 4 | 0 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/abstract.py | Python | 234 | 46 | 93 | 373 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/encyclopaedia_metallum.py | Python | 432 | 90 | 127 | 649 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/musify.py | Python | 576 | 275 | 166 | 1,017 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/preset.py | Python | 47 | 1 | 17 | 65 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/pages/youtube.py | Python | 254 | 45 | 79 | 378 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/new_db.sql | SQLite | 72 | 0 | 10 | 82 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/static_files/temp_database_structure.sql | SQLite | 135 | 0 | 10 | 145 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/__init__.py | Python | 2 | 1 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/__init__.py | Python | 7 | 0 | 4 | 11 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/audio.py | Python | 152 | 15 | 28 | 195 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/base_classes.py | Python | 136 | 35 | 61 | 232 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/config.py | Python | 92 | 16 | 30 | 138 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/connection.py | Python | 80 | 2 | 15 | 97 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/logging.py | Python | 104 | 4 | 17 | 125 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/misc.py | Python | 40 | 0 | 9 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/config/paths.py | Python | 40 | 0 | 13 | 53 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/album.py | Python | 16 | 6 | 5 | 27 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/enums/source.py | Python | 40 | 1 | 8 | 49 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/__init__.py | Python | 1 | 0 | 1 | 2 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/config.py | Python | 14 | 8 | 7 | 29 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/exception/download.py | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/functions.py | Python | 3 | 0 | 1 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/object_handeling.py | Python | 19 | 0 | 6 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/__init__.py | Python | 2 | 0 | 2 | 4 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/config_directory.py | Python | 4 | 0 | 4 | 8 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/locations.py | Python | 16 | 0 | 9 | 25 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/path_manager/music_directory.py | Python | 36 | 9 | 14 | 59 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/phonetic_compares.py | Python | 39 | 2 | 17 | 58 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/regex.py | Python | 1 | 0 | 2 | 3 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/shared.py | Python | 66 | 22 | 22 | 110 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/string_processing.py | Python | 16 | 5 | 11 | 32 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/__init__.py | Python | 4 | 0 | 1 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/default_target.py | Python | 56 | 0 | 15 | 71 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/download_result.py | Python | 69 | 0 | 21 | 90 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/query.py | Python | 24 | 0 | 9 | 33 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken/utils/support_classes/thread_classes.py | Python | 8 | 0 | 4 | 12 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_cli.py | Python | 3 | 0 | 3 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/music_kraken_gtk.py | Python | 3 | 0 | 2 | 5 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/musify_search.py | Python | 38 | 0 | 14 | 52 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/__init__.py | Python | 0 | 0 | 1 | 1 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/conftest.py | Python | 3 | 1 | 2 | 6 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_building_objects.py | Python | 81 | 1 | 13 | 95 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_download.py | Python | 30 | 1 | 12 | 43 |
|
|
||||||
| /home/lars/Projects/music-downloader/src/tests/test_objects.py | Python | 173 | 15 | 51 | 239 |
|
|
||||||
| Total | | 5,827 | 1,152 | 1,825 | 8,804 |
|
|
||||||
+------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
|
1
.env.example
Normal file
1
.env.example
Normal file
@ -0,0 +1 @@
|
|||||||
|
STAGE=dev
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -16,3 +16,5 @@ venv
|
|||||||
.idea/aws.xml
|
.idea/aws.xml
|
||||||
|
|
||||||
windows
|
windows
|
||||||
|
|
||||||
|
.env
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
<component name="InspectionProjectProfileManager">
|
||||||
<settings>
|
<settings>
|
||||||
|
<option name="PROJECT_PROFILE" value="Default" />
|
||||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
<version value="1.0" />
|
<version value="1.0" />
|
||||||
</settings>
|
</settings>
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.10 (music-downloader)" />
|
||||||
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (music-downloader)" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (music-downloader)" project-jdk-type="Python SDK" />
|
||||||
|
<component name="PythonCompatibilityInspectionAdvertiser">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
</project>
|
</project>
|
@ -5,6 +5,7 @@
|
|||||||
<module fileurl="file://$PROJECT_DIR$/.idea/music-downloader.iml" filepath="$PROJECT_DIR$/.idea/music-downloader.iml" />
|
<module fileurl="file://$PROJECT_DIR$/.idea/music-downloader.iml" filepath="$PROJECT_DIR$/.idea/music-downloader.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/../rythmbox-id3-lyrics-support/.idea/rythmbox-id3-lyrics-support.iml" filepath="$PROJECT_DIR$/../rythmbox-id3-lyrics-support/.idea/rythmbox-id3-lyrics-support.iml" />
|
<module fileurl="file://$PROJECT_DIR$/../rythmbox-id3-lyrics-support/.idea/rythmbox-id3-lyrics-support.iml" filepath="$PROJECT_DIR$/../rythmbox-id3-lyrics-support/.idea/rythmbox-id3-lyrics-support.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/../forks/sponsorblock.py/.idea/sponsorblock.py.iml" filepath="$PROJECT_DIR$/../forks/sponsorblock.py/.idea/sponsorblock.py.iml" />
|
<module fileurl="file://$PROJECT_DIR$/../forks/sponsorblock.py/.idea/sponsorblock.py.iml" filepath="$PROJECT_DIR$/../forks/sponsorblock.py/.idea/sponsorblock.py.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/../youtube-dl/.idea/youtube-dl.iml" filepath="$PROJECT_DIR$/../youtube-dl/.idea/youtube-dl.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -3,11 +3,13 @@
|
|||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/venv/lib/python3.10/site-packages" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/venv/lib/python3.10/site-packages" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="jdk" jdkName="Python 3.10 (music-downloader)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="module" module-name="rythmbox-id3-lyrics-support" />
|
<orderEntry type="module" module-name="rythmbox-id3-lyrics-support" />
|
||||||
<orderEntry type="module" module-name="sponsorblock.py" />
|
<orderEntry type="module" module-name="sponsorblock.py" />
|
||||||
|
<orderEntry type="module" module-name="youtube-dl" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -2,6 +2,6 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
<mapping directory="$PROJECT_DIR$/../forks/sponsorblock.py" vcs="Git" />
|
<mapping directory="$PROJECT_DIR$/../youtube-dl" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
@ -14,5 +14,11 @@
|
|||||||
"[python]": {
|
"[python]": {
|
||||||
"editor.defaultFormatter": "ms-python.autopep8"
|
"editor.defaultFormatter": "ms-python.autopep8"
|
||||||
},
|
},
|
||||||
"python.formatting.provider": "none"
|
"python.formatting.provider": "none",
|
||||||
|
"cSpell.words": [
|
||||||
|
"Bandcamp",
|
||||||
|
"dotenv",
|
||||||
|
"levenshtein",
|
||||||
|
"OKBLUE"
|
||||||
|
]
|
||||||
}
|
}
|
36
README.md
36
README.md
@ -4,9 +4,10 @@
|
|||||||
|
|
||||||
- [Music Kraken](#music-kraken)
|
- [Music Kraken](#music-kraken)
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
- [Dependencies](#dependencies)
|
- [From source](#from-source)
|
||||||
- [Notes for WSL](#notes-for-wsl)
|
- [Notes for WSL](#notes-for-wsl)
|
||||||
- [Quick-Guide](#quick-guide)
|
- [Quick-Guide](#quick-guide)
|
||||||
|
- [Query](#query)
|
||||||
- [CONTRIBUTE](#contribute)
|
- [CONTRIBUTE](#contribute)
|
||||||
- [Matrix Space](#matrix-space)
|
- [Matrix Space](#matrix-space)
|
||||||
- [TODO till the next release](#todo-till-the-next-release)
|
- [TODO till the next release](#todo-till-the-next-release)
|
||||||
@ -50,11 +51,6 @@ alias 🥺='sudo'
|
|||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
music-kraken
|
music-kraken
|
||||||
```
|
```
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
You will need to install these two programms.
|
|
||||||
|
|
||||||
- pandoc
|
|
||||||
|
|
||||||
### Notes for WSL
|
### Notes for WSL
|
||||||
|
|
||||||
@ -62,35 +58,30 @@ If you choose to run it in WSL, make sure ` ~/.local/bin` is added to your `$PAT
|
|||||||
|
|
||||||
## Quick-Guide
|
## Quick-Guide
|
||||||
|
|
||||||
The **Genre** you define at the start is the folder, my programm will download the files into, AS WELL as the value of the ID3 genre field.
|
The **Genre** you define at the start, is the folder my program will download the files into, as well as the value of the ID3 genre field.
|
||||||
|
|
||||||
When it drops you into the **shell** 2 main things are important:
|
When it drops you into the **shell** 2 main things are important:
|
||||||
|
|
||||||
1. You search with `s: <query/url>`
|
1. You search with `s: <query/url>`
|
||||||
2. You choose an option with just the index number of the option
|
2. You choose an option with just the index number of the option
|
||||||
3. You download with `d: <options/url>`, where the options are comma seperated
|
3. You download with `d: <options/url>`, where the options are comma separated
|
||||||
4. You support me by making a pr, or starring my repo.
|
|
||||||
|
|
||||||
Trust me it WILL make sense, once you see it.
|
|
||||||
|
|
||||||
### Query
|
### Query
|
||||||
|
|
||||||
The syntax for the query is like really simple.
|
The syntax for the query is really simple.
|
||||||
|
|
||||||
```
|
```mk
|
||||||
> s: #a <any artist>
|
> s: #a <any artist>
|
||||||
searches for the artist <any artist>
|
searches for the artist <any artist>
|
||||||
|
|
||||||
> s: #a <any artist> #r <any releas>
|
> s: #a <any artist> #r <any release>
|
||||||
searches for the release (album) <any release> by the artist <any artist>
|
searches for the release (album) <any release> by the artist <any artist>
|
||||||
|
|
||||||
> s: #r <any release> Me #t <any track>
|
> s: #r <any release> Me #t <any track>
|
||||||
searches for the track <any track> from the release <any relaese>
|
searches for the track <any track> from the release <any relaese>
|
||||||
```
|
```
|
||||||
|
|
||||||
For a more detailed guid of the downloading shell, see [here](documentation/shell.md).
|
The escape character is as usual `\`.
|
||||||
|
|
||||||
LOVE YALL *(except nazis ;-;)*
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -100,18 +91,17 @@ I am happy about every pull request. To contribute look [here](contribute.md).
|
|||||||
|
|
||||||
## Matrix Space
|
## Matrix Space
|
||||||
|
|
||||||
<img align="right" src="assets/element_logo.png" width=100>
|
<img align="right" alt="music-kraken logo" src="assets/element_logo.png" width=100>
|
||||||
|
|
||||||
I decided against creating a discord server, due to piracy communities get often banned from discord. A good and free Alternative are Matrix Spaces. I reccomend the use of the Client [Element](https://element.io/download). It is completely open source.
|
I decided against creating a discord server, due to various communities get often banned from discord. A good and free Alternative are Matrix Spaces. I recommend the use of the Client [Element](https://element.io/download). It is completely open source.
|
||||||
|
|
||||||
**Click [this link](https://matrix.to/#/#music-kraken:matrix.org) _([https://matrix.to/#/#music-kraken:matrix.org](https://matrix.to/#/#music-kraken:matrix.org))_ to join.**
|
**Click [this invitation](https://matrix.to/#/#music-kraken:matrix.org) _([https://matrix.to/#/#music-kraken:matrix.org](https://matrix.to/#/#music-kraken:matrix.org))_ to join.**
|
||||||
|
|
||||||
## TODO till the next release
|
## TODO till the next release
|
||||||
|
|
||||||
> These Points will most likely be in the changelogs.
|
> These Points will most likely be in the changelogs.
|
||||||
|
|
||||||
- [x] Update the Documentation of the new cli.
|
- [x] Migrate away from pandoc, to a more lightweight alternative, that can be installed over PiPY.
|
||||||
- [ ] Migrate away from pandoc, to a more lightweight alternative, that can be installed over PiPY.
|
|
||||||
- [ ] Update the Documentation of the internal structure. _(could be pushed back one release)_
|
- [ ] Update the Documentation of the internal structure. _(could be pushed back one release)_
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -124,7 +114,7 @@ This application is $100\%$ centered around Data. Thus, the most important thing
|
|||||||
|
|
||||||
- explanation of the [Data Model](#data-model)
|
- explanation of the [Data Model](#data-model)
|
||||||
- how to use the [Data Objects](#data-objects)
|
- how to use the [Data Objects](#data-objects)
|
||||||
- further Dokumentation of *hopefully* [most relevant classes](documentation/objects.md)
|
- further Dokumentation of _hopefully_ [most relevant classes](documentation/objects.md)
|
||||||
- the [old implementation](documentation/old_implementation.md)
|
- the [old implementation](documentation/old_implementation.md)
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
|
48
build
Executable file
48
build
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
test=false
|
||||||
|
version_bump="minor"
|
||||||
|
|
||||||
|
while getopts ":b:t" opt; do
|
||||||
|
case ${opt} in
|
||||||
|
b )
|
||||||
|
version_bump=$OPTARG
|
||||||
|
;;
|
||||||
|
t )
|
||||||
|
test=true
|
||||||
|
;;
|
||||||
|
\? )
|
||||||
|
echo "Invalid option: $OPTARG" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
: )
|
||||||
|
echo "Invalid option: $OPTARG requires an argument" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $((OPTIND -1))
|
||||||
|
|
||||||
|
# install dev dependencies
|
||||||
|
echo "installing dev dependencies..."
|
||||||
|
python3 -m pip install -r requirements-dev.txt
|
||||||
|
|
||||||
|
# hatch version ${version_bump}
|
||||||
|
# git add "music_kraken/__init__.py"
|
||||||
|
# git commit -m "bump: ${version_bump}"
|
||||||
|
|
||||||
|
# build the wheels
|
||||||
|
python3 -m build
|
||||||
|
|
||||||
|
# install the newest version
|
||||||
|
python3 -m pip install .
|
||||||
|
|
||||||
|
if [ "$test" = true ];
|
||||||
|
then
|
||||||
|
echo "just a test"
|
||||||
|
twine upload --repository testpypi dist/music_kraken*
|
||||||
|
python3 -m pip install -i https://test.pypi.org/simple/ music-kraken -U
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
twine upload dist/music_kraken*
|
71
build.sh
71
build.sh
@ -1,71 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
test=true
|
|
||||||
|
|
||||||
rm /tmp/music-downloader/*.db
|
|
||||||
rm /tmp/music-downloader/*.sql
|
|
||||||
|
|
||||||
version=$(cut -d@ -f1 version)
|
|
||||||
echo version: $version
|
|
||||||
|
|
||||||
git add .
|
|
||||||
git commit -am "ready for build $version"
|
|
||||||
git push
|
|
||||||
|
|
||||||
sudo python3 -m pip install -U twine wheel setuptools
|
|
||||||
|
|
||||||
python3 setup.py sdist bdist_wheel
|
|
||||||
sudo python3 -m pip uninstall music-kraken -y
|
|
||||||
|
|
||||||
python3 -m pip install dist/music-kraken-$version.tar.gz --user
|
|
||||||
music-kraken
|
|
||||||
|
|
||||||
if [ "$test" = true ];
|
|
||||||
then
|
|
||||||
echo "just a test"
|
|
||||||
twine upload --repository testpypi dist/music_kraken*
|
|
||||||
python3 -m pip install -i https://test.pypi.org/simple/ music-kraken -U
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
twine upload dist/music_kraken*
|
|
||||||
|
|
||||||
echo "compiling............"
|
|
||||||
mkdir -p dist/build_files
|
|
||||||
mkdir -p dist/compiled
|
|
||||||
|
|
||||||
pyinstaller --onefile src/music_kraken_cli.py --specpath dist/build_files --workpath dist/build_files --distpath dist/compiled
|
|
||||||
exit
|
|
||||||
|
|
||||||
# https://packaging.python.org/en/latest/tutorials/packaging-projects/
|
|
||||||
#echo "building............"
|
|
||||||
#echo "python3 -m pip install --upgrade build"
|
|
||||||
# python3 -m pip install --upgrade pip
|
|
||||||
# python3 -m pip install --upgrade build
|
|
||||||
#echo "python3 -m build"
|
|
||||||
# python3 -m build
|
|
||||||
# python3 setup.py sdist bdist_wheel
|
|
||||||
# python3 setup.py install --user
|
|
||||||
|
|
||||||
# echo "python3 -m pip install dist/music_kraken-1.2.2-py3-none-any.whl --user --force-reinstall"
|
|
||||||
# python3 -m pip install dist/music_kraken-1.2.2.tar.gz --user --force-reinstall
|
|
||||||
|
|
||||||
# music-kraken
|
|
||||||
|
|
||||||
# open /home/lars/.local/lib/python3.10/site-packages/music_kraken
|
|
||||||
# echo "uploading............"
|
|
||||||
#python3 -m pip install --upgrade twine
|
|
||||||
#twine upload dist/music_kraken*
|
|
||||||
|
|
||||||
# twine upload --repository testpypi dist/music_kraken*
|
|
||||||
exit
|
|
||||||
|
|
||||||
echo "pushing............"
|
|
||||||
git add .
|
|
||||||
git commit -am "new build and upload"
|
|
||||||
git push
|
|
||||||
|
|
||||||
echo "compiling............"
|
|
||||||
mkdir -p dist/build_files
|
|
||||||
mkdir -p dist/compiled
|
|
||||||
|
|
||||||
pyinstaller --onefile src/music_kraken_cli.py --specpath dist/build_files --workpath dist/build_files --distpath dist/compiled
|
|
15
development/actual_donwload.py
Normal file
15
development/actual_donwload.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import music_kraken
|
||||||
|
|
||||||
|
import logging
|
||||||
|
print("Setting logging-level to DEBUG")
|
||||||
|
logging.getLogger().setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
commands = [
|
||||||
|
"s: #a Toxoplasma",
|
||||||
|
"d: 16",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
music_kraken.cli.download(genre="test", command_list=commands, process_metadata_anyway=True)
|
||||||
|
_ = "debug"
|
125
documentation/html/bandcamp/artist_page.html
Normal file
125
documentation/html/bandcamp/artist_page.html
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Music | Only Smile</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="description" content="
|
||||||
|
Only Smile.
|
||||||
|
Russia.
|
||||||
|
">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="https://s4.bcbits.com/img/favicon/apple-touch-icon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="https://s4.bcbits.com/img/favicon/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="https://s4.bcbits.com/img/favicon/favicon-16x16.png">
|
||||||
|
<link rel="mask-icon" href="https://s4.bcbits.com/img/favicon/safari-pinned-tab.svg" color="#1da0c3">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="msapplication-TileColor" content="#603cba">
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
|
||||||
|
<meta name="title" content="Only Smile">
|
||||||
|
<meta property="og:title" content="Only Smile">
|
||||||
|
<meta property="og:type" content="band">
|
||||||
|
<meta property="og:url" content="https://onlysmile.bandcamp.com">
|
||||||
|
<meta property="og:site_name" content="Only Smile">
|
||||||
|
<meta property="og:description" content="">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<body class="webkit has-menubar invertIconography " lang="en">
|
||||||
|
|
||||||
|
<div id="menubar-wrapper" class="header-rework-2018 ">
|
||||||
|
<!--- Just the search part and login icon etc. --->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="centerWrapper">
|
||||||
|
<div id="propOpenWrapper">
|
||||||
|
|
||||||
|
<div id="pgBd" class="yui-skin-sam">
|
||||||
|
<div id="customHeaderWrapper">
|
||||||
|
<!--- The banner any artist can set --->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="leftMiddleColumns">
|
||||||
|
|
||||||
|
<!--- The list of all albums. --->
|
||||||
|
<ol id="music-grid" data-edit-callback="/music_reorder" class="editable-grid music-grid columns-2 public">
|
||||||
|
<li data-item-id="album-4166209375" data-band-id="798628171" class="music-grid-item square first-four" data-bind="css: {'featured': featured()}">
|
||||||
|
<a href="/album/your-best-friend">
|
||||||
|
<div class="art">
|
||||||
|
<img src="https://f4.bcbits.com/img/a3009649372_16.jpg" alt="" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="title">
|
||||||
|
Your best friend
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li data-item-id="album-2060798800" data-band-id="798628171" class="music-grid-item square first-four" data-bind="css: {'featured': featured()}">
|
||||||
|
<a href="/album/few-words">
|
||||||
|
<div class="art">
|
||||||
|
<img src="https://f4.bcbits.com/img/a1197628604_16.jpg" alt="" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="title">
|
||||||
|
Few words...
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="rightColumn" class="rightColumn music-page " itemscope itemtype="http://schema.org/MusicGroup">
|
||||||
|
|
||||||
|
<!--- Stuff about the artist --->
|
||||||
|
<div id="bio-container" data-bind="css: {'ko-ready': $data}">
|
||||||
|
<h3 class="title bio-label hiddenAccess">about</h3>
|
||||||
|
|
||||||
|
<p id="band-name-location">
|
||||||
|
<span class="title">Only Smile</span>
|
||||||
|
<span class="location secondaryText">Russia</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<ol id="band-links">
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="nofollow ugc me" referrerpolicy="strict-origin-when-cross-origin" href="https://www.youtube.com/channel/UCZzqXSdk8wnl9qirJTCaANQ">
|
||||||
|
YouTube
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p id="contact-tracker-data" data-band-id="798628171">
|
||||||
|
<a href="/contact?b=798628171&n=Only%20Smile" title="Send an email to Only Smile">
|
||||||
|
Contact Only Smile
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="https://bandcamp.com/help/downloading?from=tralbum_downloading" target="_blank">
|
||||||
|
Streaming and
|
||||||
|
<span id="sidebar-contact-label-break"><br></span>
|
||||||
|
Download help
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -19,7 +19,7 @@ Additionally it provides an **Interface** to:
|
|||||||
|
|
||||||
### DatabaseObject.merge()
|
### DatabaseObject.merge()
|
||||||
|
|
||||||
To merge the data of two instances of the same type, the attributes defined in `DatabaseObject.COLLECTION_ATTRIBUTES` and `SIMPLE_ATTRIBUTES` are used.
|
To merge the data of two instances of the same type, the attributes defined in `DatabaseObject.COLLECTION_STRING_ATTRIBUTES` and `SIMPLE_STRING_ATTRIBUTES` are used.
|
||||||
|
|
||||||
The simple attributes just get carried from the other instance, to the self instance.
|
The simple attributes just get carried from the other instance, to the self instance.
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
> s: r: #a an Artist #r some random Release
|
> s: r: #a an Artist #r some random Release
|
||||||
```
|
```
|
||||||
|
|
||||||
Searches for an url, or an query
|
Searches for an url, or a query
|
||||||
|
|
||||||
### Query Syntax
|
### Query Syntax
|
||||||
|
|
||||||
@ -33,6 +33,10 @@ To download something, you either need a direct link, or you need to have alread
|
|||||||
> d: https://musify.club/release/some-random-release-183028492
|
> d: https://musify.club/release/some-random-release-183028492
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Results
|
||||||
|
|
||||||
|
If options are printed in **bold** they can be downloaded. Else they may or maybe can't be downloaded
|
||||||
|
|
||||||
## Misc
|
## Misc
|
||||||
|
|
||||||
### Exit
|
### Exit
|
||||||
|
67
music_kraken/__init__.py
Normal file
67
music_kraken/__init__.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import logging
|
||||||
|
import gc
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from rich.logging import RichHandler
|
||||||
|
from rich.console import Console
|
||||||
|
|
||||||
|
from .utils.shared import DEBUG, DEBUG_LOGGING
|
||||||
|
from .utils.config import logging_settings, main_settings, read_config
|
||||||
|
|
||||||
|
__version__ = "1.13.0"
|
||||||
|
|
||||||
|
read_config()
|
||||||
|
|
||||||
|
console: Console = Console()
|
||||||
|
def init_logging():
|
||||||
|
log_file = main_settings['log_file']
|
||||||
|
|
||||||
|
if log_file.is_file():
|
||||||
|
last_log_file = Path(log_file.parent, "prev." + log_file.name)
|
||||||
|
|
||||||
|
with log_file.open("r", encoding="utf-8") as current_file:
|
||||||
|
with last_log_file.open("w", encoding="utf-8") as last_file:
|
||||||
|
last_file.write(current_file.read())
|
||||||
|
|
||||||
|
rich_handler = RichHandler(rich_tracebacks=True, console=console)
|
||||||
|
rich_handler.setLevel(logging_settings['log_level'] if not DEBUG_LOGGING else logging.DEBUG)
|
||||||
|
|
||||||
|
file_handler = logging.FileHandler(log_file)
|
||||||
|
file_handler.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
# configure logger default
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format=logging_settings['logging_format'],
|
||||||
|
datefmt="%Y-%m-%d %H:%M:%S",
|
||||||
|
handlers=[
|
||||||
|
file_handler,
|
||||||
|
rich_handler,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
init_logging()
|
||||||
|
|
||||||
|
from . import cli
|
||||||
|
|
||||||
|
if DEBUG:
|
||||||
|
sys.setrecursionlimit(100)
|
||||||
|
|
||||||
|
|
||||||
|
if main_settings['modify_gc']:
|
||||||
|
"""
|
||||||
|
At the start I modify the garbage collector to run a bit fewer times.
|
||||||
|
This should increase speed:
|
||||||
|
https://mkennedy.codes/posts/python-gc-settings-change-this-and-make-your-app-go-20pc-faster/
|
||||||
|
"""
|
||||||
|
# Clean up what might be garbage so far.
|
||||||
|
gc.collect(2)
|
||||||
|
|
||||||
|
allocs, gen1, gen2 = gc.get_threshold()
|
||||||
|
allocs = 50_000 # Start the GC sequence every 50K not 700 allocations.
|
||||||
|
gen1 = gen1 * 2
|
||||||
|
gen2 = gen2 * 2
|
||||||
|
gc.set_threshold(allocs, gen1, gen2)
|
||||||
|
|
||||||
|
|
@ -79,6 +79,18 @@ def cli():
|
|||||||
action="store_true"
|
action="store_true"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--clear-cache",
|
||||||
|
help="Deletes the cache.",
|
||||||
|
action="store_true"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--clean-cache",
|
||||||
|
help="Deletes the outdated cache. (all expired cached files, and not indexed files)",
|
||||||
|
action="store_true"
|
||||||
|
)
|
||||||
|
|
||||||
arguments = parser.parse_args()
|
arguments = parser.parse_args()
|
||||||
|
|
||||||
if arguments.verbose or arguments.test:
|
if arguments.verbose or arguments.test:
|
||||||
@ -91,8 +103,13 @@ def cli():
|
|||||||
from .utils import shared
|
from .utils import shared
|
||||||
|
|
||||||
if arguments.r:
|
if arguments.r:
|
||||||
from .utils.config import write_config
|
import os
|
||||||
write_config()
|
|
||||||
|
for file in shared.CONFIG_DIRECTORY.iterdir():
|
||||||
|
if file.is_file():
|
||||||
|
print(f"Deleting {file}....")
|
||||||
|
file.unlink()
|
||||||
|
read_config()
|
||||||
|
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
@ -110,6 +127,14 @@ def cli():
|
|||||||
if arguments.frontend:
|
if arguments.frontend:
|
||||||
cli.set_frontend(silent=False)
|
cli.set_frontend(silent=False)
|
||||||
|
|
||||||
|
if arguments.clear_cache:
|
||||||
|
from .cli.options import cache
|
||||||
|
cache.clear_cache()
|
||||||
|
|
||||||
|
if arguments.clean_cache:
|
||||||
|
from .cli.options import cache
|
||||||
|
cache.clean_cache()
|
||||||
|
|
||||||
# getting the genre
|
# getting the genre
|
||||||
genre: str = arguments.genre
|
genre: str = arguments.genre
|
||||||
if arguments.test:
|
if arguments.test:
|
@ -1,3 +1,4 @@
|
|||||||
|
from pathlib import Path
|
||||||
from typing import List, Tuple
|
from typing import List, Tuple
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
from ffmpeg_progress_yield import FfmpegProgress
|
from ffmpeg_progress_yield import FfmpegProgress
|
||||||
@ -19,8 +20,7 @@ def correct_codec(target: Target, bitrate_kb: int = main_settings["bitrate"], au
|
|||||||
bitrate_b = int(bitrate_kb / 1024)
|
bitrate_b = int(bitrate_kb / 1024)
|
||||||
|
|
||||||
output_target = Target(
|
output_target = Target(
|
||||||
path=target._path,
|
file_path=Path(str(target.file_path) + "." + audio_format)
|
||||||
file=str(target._file) + "." + audio_format
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# get the select thingie
|
# get the select thingie
|
@ -1,7 +1,6 @@
|
|||||||
from ..utils import cli_function
|
from ..utils import cli_function
|
||||||
|
|
||||||
from ...utils.path_manager import LOCATIONS
|
from ...utils.path_manager import LOCATIONS
|
||||||
from ...utils import shared
|
|
||||||
from ...utils.config import main_settings
|
from ...utils.config import main_settings
|
||||||
|
|
||||||
|
|
||||||
@ -9,9 +8,11 @@ def all_paths():
|
|||||||
return {
|
return {
|
||||||
"Temp dir": main_settings["temp_directory"],
|
"Temp dir": main_settings["temp_directory"],
|
||||||
"Music dir": main_settings["music_directory"],
|
"Music dir": main_settings["music_directory"],
|
||||||
"Log file": main_settings["log_file"],
|
|
||||||
"Conf dir": LOCATIONS.CONFIG_DIRECTORY,
|
"Conf dir": LOCATIONS.CONFIG_DIRECTORY,
|
||||||
|
"Conf file": LOCATIONS.CONFIG_FILE,
|
||||||
|
"logging file": main_settings["log_file"],
|
||||||
"FFMPEG bin": main_settings["ffmpeg_binary"],
|
"FFMPEG bin": main_settings["ffmpeg_binary"],
|
||||||
|
"Cache Dir": main_settings["cache_directory"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
|||||||
|
import random
|
||||||
from typing import Set, Type, Dict, List
|
from typing import Set, Type, Dict, List
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import re
|
import re
|
||||||
@ -6,16 +7,17 @@ from .utils import cli_function
|
|||||||
from .options.first_config import initial_config
|
from .options.first_config import initial_config
|
||||||
|
|
||||||
from ..utils.config import write_config, main_settings
|
from ..utils.config import write_config, main_settings
|
||||||
from ..utils.regex import URL_PATTERN
|
from ..utils.shared import URL_PATTERN
|
||||||
from ..utils.string_processing import fit_to_file_system
|
from ..utils.string_processing import fit_to_file_system
|
||||||
from ..utils.support_classes import Query, DownloadResult
|
from ..utils.support_classes.query import Query
|
||||||
|
from ..utils.support_classes.download_result import DownloadResult
|
||||||
from ..utils.exception.download import UrlNotFoundException
|
from ..utils.exception.download import UrlNotFoundException
|
||||||
|
from ..utils.enums.colors import BColors
|
||||||
from ..download.results import Results, Option, PageResults
|
from ..download.results import Results, Option, PageResults
|
||||||
from ..download.page_attributes import Pages
|
from ..download.page_attributes import Pages
|
||||||
from ..pages import Page
|
from ..pages import Page
|
||||||
from ..objects import Song, Album, Artist, DatabaseObject
|
from ..objects import Song, Album, Artist, DatabaseObject
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This is the implementation of the Shell
|
This is the implementation of the Shell
|
||||||
|
|
||||||
@ -106,6 +108,7 @@ def get_existing_genre() -> List[str]:
|
|||||||
|
|
||||||
return existing_genres
|
return existing_genres
|
||||||
|
|
||||||
|
|
||||||
def get_genre():
|
def get_genre():
|
||||||
existing_genres = get_existing_genre()
|
existing_genres = get_existing_genre()
|
||||||
for i, genre_option in enumerate(existing_genres):
|
for i, genre_option in enumerate(existing_genres):
|
||||||
@ -128,19 +131,18 @@ def get_genre():
|
|||||||
verification = input(f"create new genre \"{new_genre}\"? (Y/N): ").lower()
|
verification = input(f"create new genre \"{new_genre}\"? (Y/N): ").lower()
|
||||||
if verification in agree_inputs:
|
if verification in agree_inputs:
|
||||||
return new_genre
|
return new_genre
|
||||||
|
|
||||||
|
|
||||||
def help_message():
|
def help_message():
|
||||||
print()
|
print()
|
||||||
print(main_settings["happy_messages"])
|
print(random.choice(main_settings["happy_messages"]))
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Downloader:
|
class Downloader:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
exclude_pages: Set[Type[Page]] = None,
|
exclude_pages: Set[Type[Page]] = None,
|
||||||
exclude_shady: bool = False,
|
exclude_shady: bool = False,
|
||||||
max_displayed_options: int = 10,
|
max_displayed_options: int = 10,
|
||||||
option_digits: int = 3,
|
option_digits: int = 3,
|
||||||
@ -148,23 +150,22 @@ class Downloader:
|
|||||||
process_metadata_anyway: bool = False,
|
process_metadata_anyway: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.pages: Pages = Pages(exclude_pages=exclude_pages, exclude_shady=exclude_shady)
|
self.pages: Pages = Pages(exclude_pages=exclude_pages, exclude_shady=exclude_shady)
|
||||||
|
|
||||||
self.page_dict: Dict[str, Type[Page]] = dict()
|
self.page_dict: Dict[str, Type[Page]] = dict()
|
||||||
|
|
||||||
self.max_displayed_options = max_displayed_options
|
self.max_displayed_options = max_displayed_options
|
||||||
self.option_digits: int = option_digits
|
self.option_digits: int = option_digits
|
||||||
|
|
||||||
self.current_results: Results = None
|
self.current_results: Results = None
|
||||||
self._result_history: List[Results] = []
|
self._result_history: List[Results] = []
|
||||||
|
|
||||||
self.genre = genre or get_genre()
|
self.genre = genre or get_genre()
|
||||||
self.process_metadata_anyway = process_metadata_anyway
|
self.process_metadata_anyway = process_metadata_anyway
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print(f"Downloading to: \"{self.genre}\"")
|
print(f"Downloading to: \"{self.genre}\"")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
def print_current_options(self):
|
def print_current_options(self):
|
||||||
self.page_dict = dict()
|
self.page_dict = dict()
|
||||||
|
|
||||||
@ -173,14 +174,16 @@ class Downloader:
|
|||||||
page_count = 0
|
page_count = 0
|
||||||
for option in self.current_results.formated_generator(max_items_per_page=self.max_displayed_options):
|
for option in self.current_results.formated_generator(max_items_per_page=self.max_displayed_options):
|
||||||
if isinstance(option, Option):
|
if isinstance(option, Option):
|
||||||
print(f"{option.index:0{self.option_digits}} {option.music_object.option_string}")
|
color = BColors.BOLD.value if self.pages.is_downloadable(option.music_object) else BColors.GREY.value
|
||||||
|
print(f"{color}{option.index:0{self.option_digits}} {option.music_object.option_string}{BColors.ENDC.value}")
|
||||||
else:
|
else:
|
||||||
prefix = ALPHABET[page_count%len(ALPHABET)]
|
prefix = ALPHABET[page_count % len(ALPHABET)]
|
||||||
print(f"({prefix}) ------------------------{option.__name__:{PAGE_NAME_FILL}<{MAX_PAGE_LEN}}------------")
|
print(
|
||||||
|
f"{BColors.HEADER.value}({prefix}) ------------------------{option.__name__:{PAGE_NAME_FILL}<{MAX_PAGE_LEN}}------------{BColors.ENDC.value}")
|
||||||
|
|
||||||
self.page_dict[prefix] = option
|
self.page_dict[prefix] = option
|
||||||
self.page_dict[option.__name__] = option
|
self.page_dict[option.__name__] = option
|
||||||
|
|
||||||
page_count += 1
|
page_count += 1
|
||||||
|
|
||||||
print()
|
print()
|
||||||
@ -188,47 +191,47 @@ class Downloader:
|
|||||||
def set_current_options(self, current_options: Results):
|
def set_current_options(self, current_options: Results):
|
||||||
if main_settings["result_history"]:
|
if main_settings["result_history"]:
|
||||||
self._result_history.append(current_options)
|
self._result_history.append(current_options)
|
||||||
|
|
||||||
if main_settings["history_length"] != -1:
|
if main_settings["history_length"] != -1:
|
||||||
if len(self._result_history) > main_settings["history_length"]:
|
if len(self._result_history) > main_settings["history_length"]:
|
||||||
self._result_history.pop(0)
|
self._result_history.pop(0)
|
||||||
|
|
||||||
self.current_results = current_options
|
self.current_results = current_options
|
||||||
|
|
||||||
def previous_option(self) -> bool:
|
def previous_option(self) -> bool:
|
||||||
if not main_settings["result_history"]:
|
if not main_settings["result_history"]:
|
||||||
print("History is turned of.\nGo to main_settings, and change the value at 'result_history' to 'true'.")
|
print("History is turned of.\nGo to main_settings, and change the value at 'result_history' to 'true'.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if len(self._result_history) <= 1:
|
if len(self._result_history) <= 1:
|
||||||
print(f"No results in history.")
|
print(f"No results in history.")
|
||||||
return False
|
return False
|
||||||
self._result_history.pop()
|
self._result_history.pop()
|
||||||
self.current_results = self._result_history[-1]
|
self.current_results = self._result_history[-1]
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _process_parsed(self, key_text: Dict[str, str], query: str) -> Query:
|
def _process_parsed(self, key_text: Dict[str, str], query: str) -> Query:
|
||||||
song = None if not "t" in key_text else Song(title=key_text["t"], dynamic=True)
|
song = None if not "t" in key_text else Song(title=key_text["t"], dynamic=True)
|
||||||
album = None if not "r" in key_text else Album(title=key_text["r"], dynamic=True)
|
album = None if not "r" in key_text else Album(title=key_text["r"], dynamic=True)
|
||||||
artist = None if not "a" in key_text else Artist(name=key_text["a"], dynamic=True)
|
artist = None if not "a" in key_text else Artist(name=key_text["a"], dynamic=True)
|
||||||
|
|
||||||
if song is not None:
|
if song is not None:
|
||||||
if album is not None:
|
if album is not None:
|
||||||
song.album_collection.append(album)
|
song.album_collection.append(album)
|
||||||
if artist is not None:
|
if artist is not None:
|
||||||
song.main_artist_collection.append(artist)
|
song.main_artist_collection.append(artist)
|
||||||
return Query(raw_query=query, music_object=song)
|
return Query(raw_query=query, music_object=song)
|
||||||
|
|
||||||
if album is not None:
|
if album is not None:
|
||||||
if artist is not None:
|
if artist is not None:
|
||||||
album.artist_collection.append(artist)
|
album.artist_collection.append(artist)
|
||||||
return Query(raw_query=query, music_object=album)
|
return Query(raw_query=query, music_object=album)
|
||||||
|
|
||||||
if artist is not None:
|
if artist is not None:
|
||||||
return Query(raw_query=query, music_object=artist)
|
return Query(raw_query=query, music_object=artist)
|
||||||
|
|
||||||
return Query(raw_query=query)
|
return Query(raw_query=query)
|
||||||
|
|
||||||
def search(self, query: str):
|
def search(self, query: str):
|
||||||
if re.match(URL_PATTERN, query) is not None:
|
if re.match(URL_PATTERN, query) is not None:
|
||||||
try:
|
try:
|
||||||
@ -242,61 +245,57 @@ class Downloader:
|
|||||||
self.set_current_options(PageResults(page, data_object.options))
|
self.set_current_options(PageResults(page, data_object.options))
|
||||||
self.print_current_options()
|
self.print_current_options()
|
||||||
return
|
return
|
||||||
|
|
||||||
special_characters = "#\\"
|
special_characters = "#\\"
|
||||||
query = query + " "
|
query = query + " "
|
||||||
|
|
||||||
key_text = {}
|
key_text = {}
|
||||||
|
|
||||||
skip_next = False
|
skip_next = False
|
||||||
escape_next = False
|
escape_next = False
|
||||||
new_text = ""
|
new_text = ""
|
||||||
latest_key: str = None
|
latest_key: str = None
|
||||||
for i in range(len(query) - 1):
|
for i in range(len(query) - 1):
|
||||||
current_char = query[i]
|
current_char = query[i]
|
||||||
next_char = query[i+1]
|
next_char = query[i + 1]
|
||||||
|
|
||||||
if skip_next:
|
if skip_next:
|
||||||
skip_next = False
|
skip_next = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if escape_next:
|
if escape_next:
|
||||||
new_text += current_char
|
new_text += current_char
|
||||||
escape_next = False
|
escape_next = False
|
||||||
|
|
||||||
# escaping
|
# escaping
|
||||||
if current_char == "\\":
|
if current_char == "\\":
|
||||||
if next_char in special_characters:
|
if next_char in special_characters:
|
||||||
escape_next = True
|
escape_next = True
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if current_char == "#":
|
if current_char == "#":
|
||||||
if latest_key is not None:
|
if latest_key is not None:
|
||||||
key_text[latest_key] = new_text
|
key_text[latest_key] = new_text
|
||||||
new_text = ""
|
new_text = ""
|
||||||
|
|
||||||
latest_key = next_char
|
latest_key = next_char
|
||||||
skip_next = True
|
skip_next = True
|
||||||
continue
|
continue
|
||||||
|
|
||||||
new_text += current_char
|
new_text += current_char
|
||||||
|
|
||||||
if latest_key is not None:
|
if latest_key is not None:
|
||||||
key_text[latest_key] = new_text
|
key_text[latest_key] = new_text
|
||||||
|
|
||||||
|
|
||||||
parsed_query: Query = self._process_parsed(key_text, query)
|
parsed_query: Query = self._process_parsed(key_text, query)
|
||||||
|
|
||||||
self.set_current_options(self.pages.search(parsed_query))
|
self.set_current_options(self.pages.search(parsed_query))
|
||||||
self.print_current_options()
|
self.print_current_options()
|
||||||
|
|
||||||
def goto(self, index: int):
|
def goto(self, index: int):
|
||||||
page: Type[Page]
|
page: Type[Page]
|
||||||
music_object: DatabaseObject
|
music_object: DatabaseObject
|
||||||
|
|
||||||
if self.current_results is not None:
|
|
||||||
self.current_results.delete_details(index)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
page, music_object = self.current_results.get_music_object_by_index(index)
|
page, music_object = self.current_results.get_music_object_by_index(index)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -304,21 +303,22 @@ class Downloader:
|
|||||||
print(f"The option {index} doesn't exist.")
|
print(f"The option {index} doesn't exist.")
|
||||||
print()
|
print()
|
||||||
return
|
return
|
||||||
|
|
||||||
self.pages.fetch_details(music_object)
|
self.pages.fetch_details(music_object)
|
||||||
|
|
||||||
|
print(music_object)
|
||||||
|
print(music_object.options)
|
||||||
self.set_current_options(PageResults(page, music_object.options))
|
self.set_current_options(PageResults(page, music_object.options))
|
||||||
|
|
||||||
self.print_current_options()
|
self.print_current_options()
|
||||||
|
|
||||||
|
|
||||||
def download(self, download_str: str, download_all: bool = False) -> bool:
|
def download(self, download_str: str, download_all: bool = False) -> bool:
|
||||||
to_download: List[DatabaseObject] = []
|
to_download: List[DatabaseObject] = []
|
||||||
|
|
||||||
if re.match(URL_PATTERN, download_str) is not None:
|
if re.match(URL_PATTERN, download_str) is not None:
|
||||||
_, music_objects = self.pages.fetch_url(download_str)
|
_, music_objects = self.pages.fetch_url(download_str)
|
||||||
to_download.append(music_objects)
|
to_download.append(music_objects)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
index: str
|
index: str
|
||||||
for index in download_str.split(", "):
|
for index in download_str.split(", "):
|
||||||
@ -327,66 +327,68 @@ class Downloader:
|
|||||||
print(f"Every download thingie has to be an index, not {index}.")
|
print(f"Every download thingie has to be an index, not {index}.")
|
||||||
print()
|
print()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
for index in download_str.split(", "):
|
for index in download_str.split(", "):
|
||||||
to_download.append(self.current_results.get_music_object_by_index(int(index))[1])
|
to_download.append(self.current_results.get_music_object_by_index(int(index))[1])
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print("Downloading:")
|
print("Downloading:")
|
||||||
for download_object in to_download:
|
for download_object in to_download:
|
||||||
print(download_object.option_string)
|
print(download_object.option_string)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
_result_map: Dict[DatabaseObject, DownloadResult] = dict()
|
_result_map: Dict[DatabaseObject, DownloadResult] = dict()
|
||||||
|
|
||||||
for database_object in to_download:
|
for database_object in to_download:
|
||||||
r = self.pages.download(music_object=database_object, genre=self.genre, download_all=download_all, process_metadata_anyway=self.process_metadata_anyway)
|
r = self.pages.download(music_object=database_object, genre=self.genre, download_all=download_all,
|
||||||
|
process_metadata_anyway=self.process_metadata_anyway)
|
||||||
_result_map[database_object] = r
|
_result_map[database_object] = r
|
||||||
|
|
||||||
for music_object, result in _result_map.items():
|
for music_object, result in _result_map.items():
|
||||||
print()
|
print()
|
||||||
print(music_object.option_string)
|
print(music_object.option_string)
|
||||||
print(result)
|
print(result)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def process_input(self, input_str: str) -> bool:
|
def process_input(self, input_str: str) -> bool:
|
||||||
input_str = input_str.strip()
|
input_str = input_str.strip()
|
||||||
processed_input: str = input_str.lower()
|
processed_input: str = input_str.lower()
|
||||||
|
|
||||||
if processed_input in EXIT_COMMANDS:
|
if processed_input in EXIT_COMMANDS:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if processed_input == ".":
|
if processed_input == ".":
|
||||||
self.print_current_options()
|
self.print_current_options()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if processed_input == "..":
|
if processed_input == "..":
|
||||||
if self.previous_option():
|
if self.previous_option():
|
||||||
self.print_current_options()
|
self.print_current_options()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if processed_input.startswith("s: "):
|
if processed_input.startswith("s: "):
|
||||||
self.search(input_str[3:])
|
self.search(input_str[3:])
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if processed_input.startswith("d: "):
|
if processed_input.startswith("d: "):
|
||||||
return self.download(input_str[3:])
|
return self.download(input_str[3:])
|
||||||
|
|
||||||
if processed_input.isdigit():
|
if processed_input.isdigit():
|
||||||
self.goto(int(processed_input))
|
self.goto(int(processed_input))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if processed_input != "help":
|
if processed_input != "help":
|
||||||
print("Invalid input.")
|
print(f"{BColors.WARNING.value}Invalid input.{BColors.ENDC.value}")
|
||||||
help_message()
|
help_message()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def mainloop(self):
|
def mainloop(self):
|
||||||
while True:
|
while True:
|
||||||
if self.process_input(input("> ")):
|
if self.process_input(input("> ")):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@cli_function
|
@cli_function
|
||||||
def download(
|
def download(
|
||||||
genre: str = None,
|
genre: str = None,
|
||||||
@ -400,12 +402,12 @@ def download(
|
|||||||
if code == 0:
|
if code == 0:
|
||||||
main_settings["hasnt_yet_started"] = False
|
main_settings["hasnt_yet_started"] = False
|
||||||
write_config()
|
write_config()
|
||||||
print("Restart the programm to use it.")
|
print(f"{BColors.OKGREEN.value}Restart the programm to use it.{BColors.ENDC.value}")
|
||||||
else:
|
else:
|
||||||
print("Something went wrong configuring.")
|
print(f"{BColors.FAIL.value}Something went wrong configuring.{BColors.ENDC.value}")
|
||||||
|
|
||||||
shell = Downloader(genre=genre, process_metadata_anyway=process_metadata_anyway)
|
shell = Downloader(genre=genre, process_metadata_anyway=process_metadata_anyway)
|
||||||
|
|
||||||
if command_list is not None:
|
if command_list is not None:
|
||||||
for command in command_list:
|
for command in command_list:
|
||||||
shell.process_input(command)
|
shell.process_input(command)
|
||||||
@ -414,5 +416,5 @@ def download(
|
|||||||
if direct_download_url is not None:
|
if direct_download_url is not None:
|
||||||
if shell.download(direct_download_url, download_all=download_all):
|
if shell.download(direct_download_url, download_all=download_all):
|
||||||
return
|
return
|
||||||
|
|
||||||
shell.mainloop()
|
shell.mainloop()
|
26
music_kraken/cli/options/cache.py
Normal file
26
music_kraken/cli/options/cache.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from logging import getLogger
|
||||||
|
|
||||||
|
from ..utils import cli_function
|
||||||
|
from ...connection.cache import Cache
|
||||||
|
|
||||||
|
|
||||||
|
@cli_function
|
||||||
|
def clear_cache():
|
||||||
|
"""
|
||||||
|
Deletes the cache.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
Cache("main", getLogger("cache")).clear()
|
||||||
|
print("Cleared cache")
|
||||||
|
|
||||||
|
|
||||||
|
@cli_function
|
||||||
|
def clean_cache():
|
||||||
|
"""
|
||||||
|
Deletes the outdated cache. (all expired cached files, and not indexed files)
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
Cache("main", getLogger("cache")).clean()
|
||||||
|
print("Cleaned cache")
|
200
music_kraken/connection/cache.py
Normal file
200
music_kraken/connection/cache.py
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import List, Optional
|
||||||
|
from functools import lru_cache
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from ..utils.config import main_settings
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class CacheAttribute:
|
||||||
|
module: str
|
||||||
|
name: str
|
||||||
|
|
||||||
|
created: datetime
|
||||||
|
expires: datetime
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return f"{self.module}_{self.name}"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_valid(self):
|
||||||
|
if isinstance(self.expires, str):
|
||||||
|
self.expires = datetime.fromisoformat(self.expires)
|
||||||
|
return datetime.now() < self.expires
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return self.__dict__ == other.__dict__
|
||||||
|
|
||||||
|
|
||||||
|
class Cache:
|
||||||
|
def __init__(self, module: str, logger: logging.Logger):
|
||||||
|
self.module = module
|
||||||
|
self.logger: logging.Logger = logger
|
||||||
|
|
||||||
|
self._dir = main_settings["cache_directory"]
|
||||||
|
self.index = Path(self._dir, "index.json")
|
||||||
|
|
||||||
|
if not self.index.is_file():
|
||||||
|
with self.index.open("w") as i:
|
||||||
|
i.write(json.dumps([]))
|
||||||
|
|
||||||
|
self.cached_attributes: List[CacheAttribute] = []
|
||||||
|
self._id_to_attribute = {}
|
||||||
|
|
||||||
|
self._time_fields = {"created", "expires"}
|
||||||
|
with self.index.open("r") as i:
|
||||||
|
for c in json.loads(i.read()):
|
||||||
|
for key in self._time_fields:
|
||||||
|
c[key] = datetime.fromisoformat(c[key])
|
||||||
|
|
||||||
|
ca = CacheAttribute(**c)
|
||||||
|
self.cached_attributes.append(ca)
|
||||||
|
self._id_to_attribute[ca.id] = ca
|
||||||
|
|
||||||
|
@lru_cache()
|
||||||
|
def _init_module(self, module: str) -> Path:
|
||||||
|
"""
|
||||||
|
:param module:
|
||||||
|
:return: the module path
|
||||||
|
"""
|
||||||
|
r = Path(self._dir, module)
|
||||||
|
r.mkdir(exist_ok=True)
|
||||||
|
return r
|
||||||
|
|
||||||
|
def _write_index(self, indent: int = 4):
|
||||||
|
_json = []
|
||||||
|
for c in self.cached_attributes:
|
||||||
|
d = c.__dict__
|
||||||
|
for key in self._time_fields:
|
||||||
|
d[key] = d[key].isoformat()
|
||||||
|
|
||||||
|
_json.append(d)
|
||||||
|
|
||||||
|
with self.index.open("w") as f:
|
||||||
|
f.write(json.dumps(_json, indent=indent))
|
||||||
|
|
||||||
|
def _write_attribute(self, cached_attribute: CacheAttribute, write: bool = True) -> bool:
|
||||||
|
existing_attribute: Optional[CacheAttribute] = self._id_to_attribute.get(cached_attribute.id)
|
||||||
|
if existing_attribute is not None:
|
||||||
|
# the attribute exists
|
||||||
|
if existing_attribute == cached_attribute:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if existing_attribute.is_valid:
|
||||||
|
return False
|
||||||
|
|
||||||
|
existing_attribute.__dict__ = cached_attribute.__dict__
|
||||||
|
else:
|
||||||
|
self.cached_attributes.append(cached_attribute)
|
||||||
|
self._id_to_attribute[cached_attribute.id] = cached_attribute
|
||||||
|
|
||||||
|
if write:
|
||||||
|
self._write_index()
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def set(self, content: bytes, name: str, expires_in: float = 10, module: str = ""):
|
||||||
|
"""
|
||||||
|
:param content:
|
||||||
|
:param module:
|
||||||
|
:param name:
|
||||||
|
:param expires_in: the unit is days
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if name == "":
|
||||||
|
return
|
||||||
|
|
||||||
|
module = self.module if module == "" else module
|
||||||
|
|
||||||
|
module_path = self._init_module(module)
|
||||||
|
|
||||||
|
cache_attribute = CacheAttribute(
|
||||||
|
module=module,
|
||||||
|
name=name,
|
||||||
|
created=datetime.now(),
|
||||||
|
expires=datetime.now() + timedelta(days=expires_in),
|
||||||
|
)
|
||||||
|
self._write_attribute(cache_attribute)
|
||||||
|
|
||||||
|
cache_path = Path(module_path, name)
|
||||||
|
with cache_path.open("wb") as content_file:
|
||||||
|
self.logger.debug(f"writing cache to {cache_path}")
|
||||||
|
content_file.write(content)
|
||||||
|
|
||||||
|
def get(self, name: str) -> Optional[bytes]:
|
||||||
|
path = Path(self._dir, self.module, name)
|
||||||
|
|
||||||
|
if not path.is_file():
|
||||||
|
return None
|
||||||
|
|
||||||
|
# check if it is outdated
|
||||||
|
existing_attribute: CacheAttribute = self._id_to_attribute[f"{self.module}_{name}"]
|
||||||
|
if not existing_attribute.is_valid:
|
||||||
|
return
|
||||||
|
|
||||||
|
with path.open("rb") as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
keep = set()
|
||||||
|
|
||||||
|
for ca in self.cached_attributes.copy():
|
||||||
|
if ca.name == "":
|
||||||
|
continue
|
||||||
|
|
||||||
|
file = Path(self._dir, ca.module, ca.name)
|
||||||
|
|
||||||
|
if not ca.is_valid:
|
||||||
|
self.logger.debug(f"deleting cache {ca.id}")
|
||||||
|
file.unlink()
|
||||||
|
self.cached_attributes.remove(ca)
|
||||||
|
del self._id_to_attribute[ca.id]
|
||||||
|
|
||||||
|
else:
|
||||||
|
keep.add(file)
|
||||||
|
|
||||||
|
# iterate through every module (folder)
|
||||||
|
for module_path in self._dir.iterdir():
|
||||||
|
if not module_path.is_dir():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# delete all files not in keep
|
||||||
|
for path in module_path.iterdir():
|
||||||
|
if path not in keep:
|
||||||
|
self.logger.info(f"Deleting cache {path}")
|
||||||
|
path.unlink()
|
||||||
|
|
||||||
|
# delete all empty directories
|
||||||
|
for path in module_path.iterdir():
|
||||||
|
if path.is_dir() and not list(path.iterdir()):
|
||||||
|
self.logger.debug(f"Deleting cache directory {path}")
|
||||||
|
path.rmdir()
|
||||||
|
|
||||||
|
self._write_index()
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
"""
|
||||||
|
delete every file in the cache directory
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
for path in self._dir.iterdir():
|
||||||
|
if path.is_dir():
|
||||||
|
for file in path.iterdir():
|
||||||
|
file.unlink()
|
||||||
|
path.rmdir()
|
||||||
|
else:
|
||||||
|
path.unlink()
|
||||||
|
|
||||||
|
self.cached_attributes.clear()
|
||||||
|
self._id_to_attribute.clear()
|
||||||
|
|
||||||
|
self._write_index()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<Cache {self.module}>"
|
@ -1,16 +1,23 @@
|
|||||||
import time
|
from __future__ import annotations
|
||||||
from typing import List, Dict, Callable, Optional, Set
|
|
||||||
from urllib.parse import urlparse, urlunsplit, ParseResult
|
|
||||||
import logging
|
|
||||||
|
|
||||||
|
import logging
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
|
from typing import List, Dict, Optional, Set
|
||||||
|
from urllib.parse import urlparse, urlunsplit, ParseResult
|
||||||
|
import copy
|
||||||
|
import inspect
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import responses
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from .cache import Cache
|
||||||
from .rotating import RotatingProxy
|
from .rotating import RotatingProxy
|
||||||
from ..utils.config import main_settings
|
|
||||||
from ..utils.support_classes import DownloadResult
|
|
||||||
from ..objects import Target
|
from ..objects import Target
|
||||||
|
from ..utils.config import main_settings
|
||||||
|
from ..utils.support_classes.download_result import DownloadResult
|
||||||
|
from ..utils.hacking import merge_args
|
||||||
|
|
||||||
|
|
||||||
class Connection:
|
class Connection:
|
||||||
@ -18,21 +25,24 @@ class Connection:
|
|||||||
self,
|
self,
|
||||||
host: str,
|
host: str,
|
||||||
proxies: List[dict] = None,
|
proxies: List[dict] = None,
|
||||||
tries: int = (len(main_settings["proxies"]) + 1) * 4,
|
tries: int = (len(main_settings["proxies"]) + 1) * main_settings["tries_per_proxy"],
|
||||||
timeout: int = 7,
|
timeout: int = 7,
|
||||||
logger: logging.Logger = logging.getLogger("connection"),
|
logger: logging.Logger = logging.getLogger("connection"),
|
||||||
header_values: Dict[str, str] = None,
|
header_values: Dict[str, str] = None,
|
||||||
accepted_response_codes: Set[int] = None,
|
accepted_response_codes: Set[int] = None,
|
||||||
semantic_not_found: bool = True,
|
semantic_not_found: bool = True,
|
||||||
sleep_after_404: float = 0.0,
|
sleep_after_404: float = 0.0,
|
||||||
heartbeat_interval = 0,
|
heartbeat_interval=0,
|
||||||
|
module: str = "general",
|
||||||
|
cache_expiring_duration: float = 10
|
||||||
):
|
):
|
||||||
if proxies is None:
|
if proxies is None:
|
||||||
proxies = main_settings["proxies"]
|
proxies = main_settings["proxies"]
|
||||||
if header_values is None:
|
|
||||||
header_values = dict()
|
|
||||||
|
|
||||||
self.HEADER_VALUES = header_values
|
self.cache: Cache = Cache(module=module, logger=logger)
|
||||||
|
self.cache_expiring_duration = cache_expiring_duration
|
||||||
|
|
||||||
|
self.HEADER_VALUES = dict() if header_values is None else header_values
|
||||||
|
|
||||||
self.LOGGER = logger
|
self.LOGGER = logger
|
||||||
self.HOST = urlparse(host)
|
self.HOST = urlparse(host)
|
||||||
@ -48,45 +58,34 @@ class Connection:
|
|||||||
self.session.headers = self.get_header(**self.HEADER_VALUES)
|
self.session.headers = self.get_header(**self.HEADER_VALUES)
|
||||||
self.session.proxies = self.rotating_proxy.current_proxy
|
self.session.proxies = self.rotating_proxy.current_proxy
|
||||||
|
|
||||||
self.session_is_occupied: bool = False
|
|
||||||
|
|
||||||
self.heartbeat_thread = None
|
self.heartbeat_thread = None
|
||||||
self.heartbeat_interval = heartbeat_interval
|
self.heartbeat_interval = heartbeat_interval
|
||||||
|
|
||||||
@property
|
self.lock: bool = False
|
||||||
def user_agent(self) -> str:
|
|
||||||
return self.session.headers.get("user-agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36")
|
|
||||||
|
|
||||||
|
|
||||||
def start_heartbeat(self):
|
def start_heartbeat(self):
|
||||||
if self.heartbeat_interval <= 0:
|
if self.heartbeat_interval <= 0:
|
||||||
self.LOGGER.warning(f"Can't start a heartbeat with {self.heartbeat_interval}s in between.")
|
self.LOGGER.warning(f"Can't start a heartbeat with {self.heartbeat_interval}s in between.")
|
||||||
|
|
||||||
self.heartbeat_thread = threading.Thread(target=self._heartbeat_loop, args=(self.heartbeat_interval, ), daemon=True)
|
self.heartbeat_thread = threading.Thread(target=self._heartbeat_loop, args=(self.heartbeat_interval,), daemon=True)
|
||||||
self.heartbeat_thread.start()
|
self.heartbeat_thread.start()
|
||||||
|
|
||||||
def heartbeat_failed(self):
|
def heartbeat_failed(self):
|
||||||
self.LOGGER.warning(f"I just died... (The heartbeat failed)")
|
self.LOGGER.warning(f"The hearth couldn't beat.")
|
||||||
|
|
||||||
|
|
||||||
def heartbeat(self):
|
def heartbeat(self):
|
||||||
# Your code to send heartbeat requests goes here
|
# Your code to send heartbeat requests goes here
|
||||||
print("the hearth is beating, but it needs to be implemented ;-;\nFuck youuuu for setting heartbeat in the constructor to true, but not implementing the method Connection.hearbeat()")
|
raise NotImplementedError("please implement the heartbeat function.")
|
||||||
|
|
||||||
def _heartbeat_loop(self, interval: float):
|
def _heartbeat_loop(self, interval: float):
|
||||||
def heartbeat_wrapper():
|
def heartbeat_wrapper():
|
||||||
self.session_is_occupied = True
|
self.LOGGER.debug(f"The hearth is beating.")
|
||||||
self.LOGGER.debug(f"I am living. (sending a heartbeat)")
|
|
||||||
self.heartbeat()
|
self.heartbeat()
|
||||||
self.LOGGER.debug(f"finished the heartbeat")
|
|
||||||
self.session_is_occupied = False
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
heartbeat_wrapper()
|
heartbeat_wrapper()
|
||||||
time.sleep(interval)
|
time.sleep(interval)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def base_url(self, url: ParseResult = None):
|
def base_url(self, url: ParseResult = None):
|
||||||
if url is None:
|
if url is None:
|
||||||
url = self.HOST
|
url = self.HOST
|
||||||
@ -95,10 +94,12 @@ class Connection:
|
|||||||
|
|
||||||
def get_header(self, **header_values) -> Dict[str, str]:
|
def get_header(self, **header_values) -> Dict[str, str]:
|
||||||
return {
|
return {
|
||||||
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
|
"user-agent": main_settings["user_agent"],
|
||||||
|
"User-Agent": main_settings["user_agent"],
|
||||||
"Connection": "keep-alive",
|
"Connection": "keep-alive",
|
||||||
# "Host": self.HOST.netloc,
|
"Host": self.HOST.netloc,
|
||||||
"Referer": self.base_url(),
|
"Referer": self.base_url(),
|
||||||
|
"Accept-Language": main_settings["language"],
|
||||||
**header_values
|
**header_values
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,28 +112,76 @@ class Connection:
|
|||||||
refer_from_origin: bool,
|
refer_from_origin: bool,
|
||||||
url: ParseResult
|
url: ParseResult
|
||||||
) -> Dict[str, str]:
|
) -> Dict[str, str]:
|
||||||
if headers is None:
|
headers = self.get_header(**(headers or {}))
|
||||||
headers = dict()
|
|
||||||
|
|
||||||
if not refer_from_origin:
|
if not refer_from_origin:
|
||||||
headers["Referer"] = self.base_url(url=url)
|
headers["Referer"] = self.base_url(url=url)
|
||||||
|
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
def _request(
|
def save(self, r: requests.Response, name: str, error: bool = False, **kwargs):
|
||||||
|
n_kwargs = {}
|
||||||
|
if error:
|
||||||
|
n_kwargs["module"] = "failed_requests"
|
||||||
|
|
||||||
|
self.cache.set(r.content, name, expires_in=kwargs.get("expires_in", self.cache_expiring_duration), **n_kwargs)
|
||||||
|
|
||||||
|
def request(
|
||||||
self,
|
self,
|
||||||
request: Callable,
|
|
||||||
try_count: int,
|
|
||||||
accepted_response_codes: set,
|
|
||||||
url: str,
|
url: str,
|
||||||
timeout: float,
|
timeout: float = None,
|
||||||
headers: dict,
|
headers: Optional[dict] = None,
|
||||||
|
try_count: int = 0,
|
||||||
|
accepted_response_codes: set = None,
|
||||||
refer_from_origin: bool = True,
|
refer_from_origin: bool = True,
|
||||||
raw_url: bool = False,
|
raw_url: bool = False,
|
||||||
|
raw_headers: bool = False,
|
||||||
sleep_after_404: float = None,
|
sleep_after_404: float = None,
|
||||||
is_heartbeat: bool = False,
|
is_heartbeat: bool = False,
|
||||||
|
disable_cache: bool = None,
|
||||||
|
method: str = None,
|
||||||
|
name: str = "",
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> Optional[requests.Response]:
|
) -> Optional[requests.Response]:
|
||||||
|
if method is None:
|
||||||
|
raise AttributeError("method is not set.")
|
||||||
|
method = method.upper()
|
||||||
|
headers = dict() if headers is None else headers
|
||||||
|
disable_cache = headers.get("Cache-Control", "").lower() == "no-cache" if disable_cache is None else disable_cache
|
||||||
|
accepted_response_codes = self.ACCEPTED_RESPONSE_CODES if accepted_response_codes is None else accepted_response_codes
|
||||||
|
|
||||||
|
current_kwargs = copy.copy(locals())
|
||||||
|
current_kwargs.pop("kwargs")
|
||||||
|
current_kwargs.update(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
parsed_url = urlparse(url)
|
||||||
|
|
||||||
|
if not raw_headers:
|
||||||
|
_headers = copy.copy(self.HEADER_VALUES)
|
||||||
|
_headers.update(headers)
|
||||||
|
|
||||||
|
headers = self._update_headers(
|
||||||
|
headers=_headers,
|
||||||
|
refer_from_origin=refer_from_origin,
|
||||||
|
url=parsed_url
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
headers = headers or {}
|
||||||
|
|
||||||
|
request_url = parsed_url.geturl() if not raw_url else url
|
||||||
|
|
||||||
|
if name != "" and not disable_cache:
|
||||||
|
cached = self.cache.get(name)
|
||||||
|
|
||||||
|
if cached is not None:
|
||||||
|
with responses.RequestsMock() as resp:
|
||||||
|
resp.add(
|
||||||
|
method=method,
|
||||||
|
url=request_url,
|
||||||
|
body=cached,
|
||||||
|
)
|
||||||
|
return requests.request(method=method, url=url, timeout=timeout, headers=headers, **kwargs)
|
||||||
|
|
||||||
if sleep_after_404 is None:
|
if sleep_after_404 is None:
|
||||||
sleep_after_404 = self.sleep_after_404
|
sleep_after_404 = self.sleep_after_404
|
||||||
if try_count >= self.TRIES:
|
if try_count >= self.TRIES:
|
||||||
@ -141,32 +190,27 @@ class Connection:
|
|||||||
if timeout is None:
|
if timeout is None:
|
||||||
timeout = self.TIMEOUT
|
timeout = self.TIMEOUT
|
||||||
|
|
||||||
parsed_url = urlparse(url)
|
r = None
|
||||||
|
|
||||||
headers = self._update_headers(
|
|
||||||
headers=headers,
|
|
||||||
refer_from_origin=refer_from_origin,
|
|
||||||
url=parsed_url
|
|
||||||
)
|
|
||||||
|
|
||||||
request_url = parsed_url.geturl() if not raw_url else url
|
|
||||||
|
|
||||||
connection_failed = False
|
connection_failed = False
|
||||||
try:
|
try:
|
||||||
if self.session_is_occupied and not is_heartbeat:
|
if self.lock:
|
||||||
self.LOGGER.info(f"Waiting for the heartbeat to finish.")
|
self.LOGGER.info(f"Waiting for the heartbeat to finish.")
|
||||||
while self.session_is_occupied and not is_heartbeat:
|
while self.lock and not is_heartbeat:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
r: requests.Response = request(request_url, timeout=timeout, headers=headers, **kwargs)
|
self.lock = True
|
||||||
|
r: requests.Response = requests.request(method=method, url=url, timeout=timeout, headers=headers, **kwargs)
|
||||||
|
|
||||||
if r.status_code in accepted_response_codes:
|
if r.status_code in accepted_response_codes:
|
||||||
|
if not disable_cache:
|
||||||
|
self.save(r, name, **kwargs)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
if self.SEMANTIC_NOT_FOUND and r.status_code == 404:
|
if self.SEMANTIC_NOT_FOUND and r.status_code == 404:
|
||||||
self.LOGGER.warning(f"Couldn't find url (404): {request_url}")
|
self.LOGGER.warning(f"Couldn't find url (404): {request_url}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# the server rejected the request, or the internet is lacking
|
||||||
except requests.exceptions.Timeout:
|
except requests.exceptions.Timeout:
|
||||||
self.LOGGER.warning(f"Request timed out at \"{request_url}\": ({try_count}-{self.TRIES})")
|
self.LOGGER.warning(f"Request timed out at \"{request_url}\": ({try_count}-{self.TRIES})")
|
||||||
connection_failed = True
|
connection_failed = True
|
||||||
@ -174,130 +218,89 @@ class Connection:
|
|||||||
self.LOGGER.warning(f"Couldn't connect to \"{request_url}\": ({try_count}-{self.TRIES})")
|
self.LOGGER.warning(f"Couldn't connect to \"{request_url}\": ({try_count}-{self.TRIES})")
|
||||||
connection_failed = True
|
connection_failed = True
|
||||||
|
|
||||||
|
# this is important for thread safety
|
||||||
|
finally:
|
||||||
|
self.lock = False
|
||||||
|
|
||||||
if not connection_failed:
|
if not connection_failed:
|
||||||
self.LOGGER.warning(f"{self.HOST.netloc} responded wit {r.status_code} "
|
self.LOGGER.warning(f"{self.HOST.netloc} responded wit {r.status_code} at {url}. ({try_count}-{self.TRIES})")
|
||||||
f"at {url}. ({try_count}-{self.TRIES})")
|
if r is not None:
|
||||||
self.LOGGER.debug(r.content)
|
self.LOGGER.debug("request headers:\n\t"+ "\n\t".join(f"{k}\t=\t{v}" for k, v in r.request.headers.items()))
|
||||||
|
self.LOGGER.debug("response headers:\n\t"+ "\n\t".join(f"{k}\t=\t{v}" for k, v in r.headers.items()))
|
||||||
|
self.LOGGER.debug(r.content)
|
||||||
|
|
||||||
|
if name != "":
|
||||||
|
self.save(r, name, error=True, **kwargs)
|
||||||
|
|
||||||
if sleep_after_404 != 0:
|
if sleep_after_404 != 0:
|
||||||
self.LOGGER.warning(f"Waiting for {sleep_after_404} seconds.")
|
self.LOGGER.warning(f"Waiting for {sleep_after_404} seconds.")
|
||||||
time.sleep(sleep_after_404)
|
time.sleep(sleep_after_404)
|
||||||
|
|
||||||
self.rotate()
|
self.rotate()
|
||||||
|
|
||||||
if self.heartbeat_interval > 0 and self.heartbeat_thread is None:
|
current_kwargs["try_count"] = current_kwargs.get("try_count", 0) + 1
|
||||||
self.start_heartbeat()
|
return Connection.request(**current_kwargs)
|
||||||
|
|
||||||
return self._request(
|
@merge_args(request)
|
||||||
request=request,
|
def get(self, *args, **kwargs) -> Optional[requests.Response]:
|
||||||
try_count=try_count+1,
|
return self.request(
|
||||||
accepted_response_codes=accepted_response_codes,
|
*args,
|
||||||
url=url,
|
method="GET",
|
||||||
timeout=timeout,
|
|
||||||
headers=headers,
|
|
||||||
sleep_after_404=sleep_after_404,
|
|
||||||
is_heartbeat=is_heartbeat,
|
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
def get(
|
@merge_args(request)
|
||||||
self,
|
|
||||||
url: str,
|
|
||||||
refer_from_origin: bool = True,
|
|
||||||
stream: bool = False,
|
|
||||||
accepted_response_codes: set = None,
|
|
||||||
timeout: float = None,
|
|
||||||
headers: dict = None,
|
|
||||||
raw_url: bool = False,
|
|
||||||
**kwargs
|
|
||||||
) -> Optional[requests.Response]:
|
|
||||||
if accepted_response_codes is None:
|
|
||||||
accepted_response_codes = self.ACCEPTED_RESPONSE_CODES
|
|
||||||
|
|
||||||
r = self._request(
|
|
||||||
request=self.session.get,
|
|
||||||
try_count=0,
|
|
||||||
accepted_response_codes=accepted_response_codes,
|
|
||||||
url=url,
|
|
||||||
timeout=timeout,
|
|
||||||
headers=headers,
|
|
||||||
raw_url=raw_url,
|
|
||||||
refer_from_origin=refer_from_origin,
|
|
||||||
stream=stream,
|
|
||||||
**kwargs
|
|
||||||
)
|
|
||||||
if r is None:
|
|
||||||
self.LOGGER.warning(f"Max attempts ({self.TRIES}) exceeded for: GET:{url}")
|
|
||||||
return r
|
|
||||||
|
|
||||||
def post(
|
def post(
|
||||||
self,
|
self,
|
||||||
url: str,
|
*args,
|
||||||
json: dict = None,
|
json: dict = None,
|
||||||
refer_from_origin: bool = True,
|
|
||||||
stream: bool = False,
|
|
||||||
accepted_response_codes: set = None,
|
|
||||||
timeout: float = None,
|
|
||||||
headers: dict = None,
|
|
||||||
raw_url: bool = False,
|
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> Optional[requests.Response]:
|
) -> Optional[requests.Response]:
|
||||||
r = self._request(
|
r = self.request(
|
||||||
request=self.session.post,
|
*args,
|
||||||
try_count=0,
|
method="POST",
|
||||||
accepted_response_codes=accepted_response_codes or self.ACCEPTED_RESPONSE_CODES,
|
|
||||||
url=url,
|
|
||||||
timeout=timeout,
|
|
||||||
headers=headers,
|
|
||||||
refer_from_origin=refer_from_origin,
|
|
||||||
raw_url=raw_url,
|
|
||||||
json=json,
|
json=json,
|
||||||
stream=stream,
|
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
if r is None:
|
if r is None:
|
||||||
self.LOGGER.warning(f"Max attempts ({self.TRIES}) exceeded for: GET:{url}")
|
|
||||||
self.LOGGER.warning(f"payload: {json}")
|
self.LOGGER.warning(f"payload: {json}")
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
@merge_args(request)
|
||||||
def stream_into(
|
def stream_into(
|
||||||
self,
|
self,
|
||||||
url: str,
|
url: str,
|
||||||
target: Target,
|
target: Target,
|
||||||
description: str = "download",
|
name: str = "download",
|
||||||
refer_from_origin: bool = True,
|
|
||||||
accepted_response_codes: set = None,
|
|
||||||
timeout: float = None,
|
|
||||||
headers: dict = None,
|
|
||||||
raw_url: bool = False,
|
|
||||||
chunk_size: int = main_settings["chunk_size"],
|
chunk_size: int = main_settings["chunk_size"],
|
||||||
try_count: int = 0,
|
|
||||||
progress: int = 0,
|
progress: int = 0,
|
||||||
|
method: str = "GET",
|
||||||
|
try_count: int = 0,
|
||||||
|
accepted_response_codes: set = None,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> DownloadResult:
|
) -> DownloadResult:
|
||||||
|
accepted_response_codes = self.ACCEPTED_RESPONSE_CODES if accepted_response_codes is None else accepted_response_codes
|
||||||
|
stream_kwargs = copy.copy(locals())
|
||||||
|
stream_kwargs.update(stream_kwargs.pop("kwargs"))
|
||||||
|
|
||||||
|
if "description" in kwargs:
|
||||||
|
name = kwargs.pop("description")
|
||||||
|
|
||||||
if progress > 0:
|
if progress > 0:
|
||||||
if headers is None:
|
headers = dict() if headers is None else headers
|
||||||
headers = dict()
|
|
||||||
headers["Range"] = f"bytes={target.size}-"
|
headers["Range"] = f"bytes={target.size}-"
|
||||||
|
|
||||||
if accepted_response_codes is None:
|
r = self.request(
|
||||||
accepted_response_codes = self.ACCEPTED_RESPONSE_CODES
|
|
||||||
|
|
||||||
r = self._request(
|
|
||||||
request=self.session.get,
|
|
||||||
try_count=0,
|
|
||||||
accepted_response_codes=accepted_response_codes,
|
|
||||||
url=url,
|
url=url,
|
||||||
timeout=timeout,
|
name=name,
|
||||||
headers=headers,
|
method=method,
|
||||||
raw_url=raw_url,
|
|
||||||
refer_from_origin=refer_from_origin,
|
|
||||||
stream=True,
|
stream=True,
|
||||||
|
accepted_response_codes=accepted_response_codes,
|
||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
if r is None:
|
if r is None:
|
||||||
return DownloadResult(error_message=f"Could not establish connection to: {url}")
|
return DownloadResult(error_message=f"Could not establish a stream from: {url}")
|
||||||
|
|
||||||
target.create_path()
|
target.create_path()
|
||||||
total_size = int(r.headers.get('content-length'))
|
total_size = int(r.headers.get('content-length'))
|
||||||
@ -310,42 +313,29 @@ class Connection:
|
|||||||
https://en.wikipedia.org/wiki/Kilobyte
|
https://en.wikipedia.org/wiki/Kilobyte
|
||||||
> The internationally recommended unit symbol for the kilobyte is kB.
|
> The internationally recommended unit symbol for the kilobyte is kB.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
with tqdm(total=total_size-target.size, unit='B', unit_scale=True, unit_divisor=1024, desc=description) as t:
|
with tqdm(total=total_size, initial=target.size, unit='B', unit_scale=True, unit_divisor=1024, desc=name) as t:
|
||||||
try:
|
try:
|
||||||
for chunk in r.iter_content(chunk_size=chunk_size):
|
for chunk in r.iter_content(chunk_size=chunk_size):
|
||||||
size = f.write(chunk)
|
size = f.write(chunk)
|
||||||
progress += size
|
progress += size
|
||||||
t.update(size)
|
t.update(size)
|
||||||
|
|
||||||
except requests.exceptions.ConnectionError:
|
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout, requests.exceptions.ChunkedEncodingError):
|
||||||
if try_count >= self.TRIES:
|
if try_count >= self.TRIES:
|
||||||
self.LOGGER.warning(f"Stream timed out at \"{url}\": to many retries, aborting.")
|
self.LOGGER.warning(f"Stream timed out at \"{url}\": to many retries, aborting.")
|
||||||
return DownloadResult(error_message=f"Stream timed out from {url}, reducing the chunksize might help.")
|
return DownloadResult(error_message=f"Stream timed out from {url}, reducing the chunk_size might help.")
|
||||||
|
|
||||||
self.LOGGER.warning(f"Stream timed out at \"{url}\": ({try_count}-{self.TRIES})")
|
self.LOGGER.warning(f"Stream timed out at \"{url}\": ({try_count}-{self.TRIES})")
|
||||||
retry = True
|
retry = True
|
||||||
|
try_count += 1
|
||||||
|
|
||||||
if total_size > progress:
|
if total_size > progress:
|
||||||
retry = True
|
retry = True
|
||||||
|
|
||||||
|
|
||||||
if retry:
|
if retry:
|
||||||
self.LOGGER.warning(f"Retrying stream...")
|
self.LOGGER.warning(f"Retrying stream...")
|
||||||
accepted_response_codes.add(206)
|
accepted_response_codes.add(206)
|
||||||
return self.stream_into(
|
return Connection.stream_into(**stream_kwargs)
|
||||||
url = url,
|
|
||||||
target = target,
|
|
||||||
description = description,
|
|
||||||
try_count=try_count+1,
|
|
||||||
progress=progress,
|
|
||||||
accepted_response_codes=accepted_response_codes,
|
|
||||||
timeout=timeout,
|
|
||||||
headers=headers,
|
|
||||||
raw_url=raw_url,
|
|
||||||
refer_from_origin=refer_from_origin,
|
|
||||||
chunk_size=chunk_size,
|
|
||||||
**kwargs
|
|
||||||
)
|
|
||||||
|
|
||||||
return DownloadResult()
|
return DownloadResult()
|
@ -5,24 +5,19 @@ from ..objects import DatabaseObject, Source
|
|||||||
|
|
||||||
from ..utils.config import youtube_settings
|
from ..utils.config import youtube_settings
|
||||||
from ..utils.enums.source import SourcePages
|
from ..utils.enums.source import SourcePages
|
||||||
from ..utils.support_classes import Query, DownloadResult
|
from ..utils.support_classes.download_result import DownloadResult
|
||||||
|
from ..utils.support_classes.query import Query
|
||||||
from ..utils.exception.download import UrlNotFoundException
|
from ..utils.exception.download import UrlNotFoundException
|
||||||
from ..utils.shared import DEBUG_PAGES
|
from ..utils.shared import DEBUG_PAGES
|
||||||
|
|
||||||
from ..pages import Page, EncyclopaediaMetallum, Musify, YouTube, YoutubeMusic, INDEPENDENT_DB_OBJECTS
|
from ..pages import Page, EncyclopaediaMetallum, Musify, YouTube, YoutubeMusic, Bandcamp, INDEPENDENT_DB_OBJECTS
|
||||||
|
|
||||||
if DEBUG_PAGES:
|
|
||||||
DEBUGGING_PAGE = YoutubeMusic
|
|
||||||
print(f"Only downloading from page {DEBUGGING_PAGE}.")
|
|
||||||
|
|
||||||
ALL_PAGES = {DEBUGGING_PAGE}
|
|
||||||
AUDIO_PAGES = ALL_PAGES.union(AUDIO_PAGES)
|
|
||||||
|
|
||||||
|
|
||||||
ALL_PAGES: Set[Type[Page]] = {
|
ALL_PAGES: Set[Type[Page]] = {
|
||||||
EncyclopaediaMetallum,
|
EncyclopaediaMetallum,
|
||||||
Musify,
|
Musify,
|
||||||
YoutubeMusic
|
YoutubeMusic,
|
||||||
|
Bandcamp
|
||||||
}
|
}
|
||||||
|
|
||||||
if youtube_settings["use_youtube_alongside_youtube_music"]:
|
if youtube_settings["use_youtube_alongside_youtube_music"]:
|
||||||
@ -31,13 +26,22 @@ if youtube_settings["use_youtube_alongside_youtube_music"]:
|
|||||||
AUDIO_PAGES: Set[Type[Page]] = {
|
AUDIO_PAGES: Set[Type[Page]] = {
|
||||||
Musify,
|
Musify,
|
||||||
YouTube,
|
YouTube,
|
||||||
YoutubeMusic
|
YoutubeMusic,
|
||||||
|
Bandcamp
|
||||||
}
|
}
|
||||||
|
|
||||||
SHADY_PAGES: Set[Type[Page]] = {
|
SHADY_PAGES: Set[Type[Page]] = {
|
||||||
Musify,
|
Musify,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if DEBUG_PAGES:
|
||||||
|
DEBUGGING_PAGE = Bandcamp
|
||||||
|
print(f"Only downloading from page {DEBUGGING_PAGE}.")
|
||||||
|
|
||||||
|
ALL_PAGES = {DEBUGGING_PAGE}
|
||||||
|
AUDIO_PAGES = ALL_PAGES.union(AUDIO_PAGES)
|
||||||
|
|
||||||
|
|
||||||
class Pages:
|
class Pages:
|
||||||
def __init__(self, exclude_pages: Set[Type[Page]] = None, exclude_shady: bool = False) -> None:
|
def __init__(self, exclude_pages: Set[Type[Page]] = None, exclude_shady: bool = False) -> None:
|
||||||
# initialize all page instances
|
# initialize all page instances
|
||||||
@ -90,12 +94,27 @@ class Pages:
|
|||||||
music_object.merge(self._page_instances[page_type].fetch_details(music_object=music_object, stop_at_level=stop_at_level))
|
music_object.merge(self._page_instances[page_type].fetch_details(music_object=music_object, stop_at_level=stop_at_level))
|
||||||
|
|
||||||
return music_object
|
return music_object
|
||||||
|
|
||||||
|
def is_downloadable(self, music_object: DatabaseObject) -> bool:
|
||||||
|
_page_types = set(self._source_to_page)
|
||||||
|
for src in music_object.source_collection.source_pages:
|
||||||
|
if src in self._source_to_page:
|
||||||
|
_page_types.add(self._source_to_page[src])
|
||||||
|
|
||||||
|
audio_pages = self._audio_pages_set.intersection(_page_types)
|
||||||
|
return len(audio_pages) > 0
|
||||||
|
|
||||||
def download(self, music_object: DatabaseObject, genre: str, download_all: bool = False, process_metadata_anyway: bool = False) -> DownloadResult:
|
def download(self, music_object: DatabaseObject, genre: str, download_all: bool = False, process_metadata_anyway: bool = False) -> DownloadResult:
|
||||||
if not isinstance(music_object, INDEPENDENT_DB_OBJECTS):
|
if not isinstance(music_object, INDEPENDENT_DB_OBJECTS):
|
||||||
return DownloadResult(error_message=f"{type(music_object).__name__} can't be downloaded.")
|
return DownloadResult(error_message=f"{type(music_object).__name__} can't be downloaded.")
|
||||||
|
|
||||||
_page_types = set(self._source_to_page[src] for src in music_object.source_collection.source_pages)
|
self.fetch_details(music_object)
|
||||||
|
|
||||||
|
_page_types = set(self._source_to_page)
|
||||||
|
for src in music_object.source_collection.source_pages:
|
||||||
|
if src in self._source_to_page:
|
||||||
|
_page_types.add(self._source_to_page[src])
|
||||||
|
|
||||||
audio_pages = self._audio_pages_set.intersection(_page_types)
|
audio_pages = self._audio_pages_set.intersection(_page_types)
|
||||||
|
|
||||||
for download_page in audio_pages:
|
for download_page in audio_pages:
|
@ -27,15 +27,8 @@ class Results:
|
|||||||
self._page_by_index = dict()
|
self._page_by_index = dict()
|
||||||
|
|
||||||
def get_music_object_by_index(self, index: int) -> Tuple[Type[Page], DatabaseObject]:
|
def get_music_object_by_index(self, index: int) -> Tuple[Type[Page], DatabaseObject]:
|
||||||
# if this throws a key error, either the formated generator needs to be iterated, or the option doesn't exist.
|
# if this throws a key error, either the formatted generator needs to be iterated, or the option doesn't exist.
|
||||||
return self._page_by_index[index], self._by_index[index]
|
return self._page_by_index[index], self._by_index[index]
|
||||||
|
|
||||||
def delete_details(self, exclude_index: int):
|
|
||||||
for index, music_object in self._by_index.items():
|
|
||||||
if index == exclude_index:
|
|
||||||
continue
|
|
||||||
|
|
||||||
music_object.strip_details()
|
|
||||||
|
|
||||||
|
|
||||||
class SearchResults(Results):
|
class SearchResults(Results):
|
@ -1,5 +1,5 @@
|
|||||||
|
from typing_extensions import TypeVar
|
||||||
from .option import Options
|
from .option import Options
|
||||||
from .parents import DatabaseObject
|
|
||||||
|
|
||||||
from .metadata import Metadata, Mapping as ID3Mapping, ID3Timestamp
|
from .metadata import Metadata, Mapping as ID3Mapping, ID3Timestamp
|
||||||
|
|
||||||
@ -18,3 +18,8 @@ from .formatted_text import FormattedText
|
|||||||
from .collection import Collection
|
from .collection import Collection
|
||||||
|
|
||||||
from .country import Country
|
from .country import Country
|
||||||
|
from .contact import Contact
|
||||||
|
|
||||||
|
from .parents import OuterProxy
|
||||||
|
|
||||||
|
DatabaseObject = TypeVar('T', bound=OuterProxy)
|
331
music_kraken/objects/collection.py
Normal file
331
music_kraken/objects/collection.py
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
from typing import TypeVar, Generic, Dict, Optional, Iterable, List, Iterator, Tuple
|
||||||
|
from .parents import OuterProxy
|
||||||
|
|
||||||
|
T = TypeVar('T', bound=OuterProxy)
|
||||||
|
|
||||||
|
|
||||||
|
class Collection(Generic[T]):
|
||||||
|
__is_collection__ = True
|
||||||
|
|
||||||
|
_data: List[T]
|
||||||
|
|
||||||
|
_indexed_values: Dict[str, set]
|
||||||
|
_indexed_to_objects: Dict[any, list]
|
||||||
|
|
||||||
|
shallow_list = property(fget=lambda self: self.data)
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
data: Optional[Iterable[T]] = None,
|
||||||
|
sync_on_append: Dict[str, Collection] = None,
|
||||||
|
contain_given_in_attribute: Dict[str, Collection] = None,
|
||||||
|
contain_attribute_in_given: Dict[str, Collection] = None,
|
||||||
|
append_object_to_attribute: Dict[str, T] = None
|
||||||
|
) -> None:
|
||||||
|
self._contains_ids = set()
|
||||||
|
self._data = []
|
||||||
|
|
||||||
|
self.parents: List[Collection[T]] = []
|
||||||
|
self.children: List[Collection[T]] = []
|
||||||
|
|
||||||
|
# List of collection attributes that should be modified on append
|
||||||
|
# Key: collection attribute (str) of appended element
|
||||||
|
# Value: main collection to sync to
|
||||||
|
self.contain_given_in_attribute: Dict[str, Collection] = contain_given_in_attribute or {}
|
||||||
|
self.contain_attribute_in_given: Dict[str, Collection] = contain_attribute_in_given or {}
|
||||||
|
self.append_object_to_attribute: Dict[str, T] = append_object_to_attribute or {}
|
||||||
|
|
||||||
|
self.contain_self_on_append: List[str] = []
|
||||||
|
|
||||||
|
self._indexed_values = defaultdict(set)
|
||||||
|
self._indexed_to_objects = defaultdict(list)
|
||||||
|
|
||||||
|
self.extend(data)
|
||||||
|
|
||||||
|
def _map_element(self, __object: T, from_map: bool = False):
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._contains_ids.add(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
self._indexed_values[name].add(value)
|
||||||
|
self._indexed_to_objects[value].append(__object)
|
||||||
|
|
||||||
|
if not from_map:
|
||||||
|
for attribute, new_object in self.contain_given_in_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).contain_collection_inside(new_object)
|
||||||
|
|
||||||
|
for attribute, new_object in self.contain_attribute_in_given.items():
|
||||||
|
new_object.contain_collection_inside(__object.__getattribute__(attribute))
|
||||||
|
|
||||||
|
for attribute, new_object in self.append_object_to_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).append(new_object)
|
||||||
|
|
||||||
|
def _unmap_element(self, __object: T):
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
self._contains_ids.remove(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value not in self._indexed_values[name]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._indexed_to_objects[value].remove(__object)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not len(self._indexed_to_objects[value]):
|
||||||
|
self._indexed_values[name].remove(value)
|
||||||
|
|
||||||
|
def _contained_in_self(self, __object: T) -> bool:
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return True
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _contained_in_sub(self, __object: T, break_at_first: bool = True) -> List[Collection]:
|
||||||
|
"""
|
||||||
|
Gets the collection this object is found in, if it is found in any.
|
||||||
|
|
||||||
|
:param __object:
|
||||||
|
:param break_at_first:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
results = []
|
||||||
|
|
||||||
|
if self._contained_in_self(__object):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
for collection in self.children:
|
||||||
|
results.extend(collection._contained_in_sub(__object, break_at_first=break_at_first))
|
||||||
|
|
||||||
|
if break_at_first:
|
||||||
|
return results
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def _get_root_collections(self) -> List[Collection]:
|
||||||
|
if not len(self.parents):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
root_collections = []
|
||||||
|
for upper_collection in self.parents:
|
||||||
|
root_collections.extend(upper_collection._get_root_collections())
|
||||||
|
return root_collections
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _is_root(self) -> bool:
|
||||||
|
return len(self.parents) <= 0
|
||||||
|
|
||||||
|
def _get_parents_of_multiple_contained_children(self, __object: T):
|
||||||
|
results = []
|
||||||
|
if len(self.children) < 2 or self._contained_in_self(__object):
|
||||||
|
return results
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
for collection in self.children:
|
||||||
|
sub_results = collection._get_parents_of_multiple_contained_children(__object)
|
||||||
|
|
||||||
|
if len(sub_results) > 0:
|
||||||
|
count += 1
|
||||||
|
results.extend(sub_results)
|
||||||
|
|
||||||
|
if count >= 2:
|
||||||
|
results.append(self)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def merge_into_self(self, __object: T, from_map: bool = False):
|
||||||
|
"""
|
||||||
|
1. find existing objects
|
||||||
|
2. merge into existing object
|
||||||
|
3. remap existing object
|
||||||
|
"""
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
existing_object: T = None
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
existing_object = self._indexed_to_objects[value][0]
|
||||||
|
if existing_object.id == __object.id:
|
||||||
|
return None
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
if existing_object is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
existing_object.merge(__object)
|
||||||
|
|
||||||
|
# just a check if it really worked
|
||||||
|
if existing_object.id != __object.id:
|
||||||
|
raise ValueError("This should NEVER happen. Merging doesn't work.")
|
||||||
|
|
||||||
|
self._map_element(existing_object, from_map=from_map)
|
||||||
|
|
||||||
|
def contains(self, __object: T) -> bool:
|
||||||
|
return len(self._contained_in_sub(__object)) > 0
|
||||||
|
|
||||||
|
def _append(self, __object: T, from_map: bool = False):
|
||||||
|
print(self, __object)
|
||||||
|
self._map_element(__object, from_map=from_map)
|
||||||
|
self._data.append(__object)
|
||||||
|
|
||||||
|
def _find_object_in_self(self, __object: T) -> Optional[T]:
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
return self._indexed_to_objects[value][0]
|
||||||
|
|
||||||
|
def _find_object(self, __object: T) -> Tuple[Collection[T], Optional[T]]:
|
||||||
|
other_object = self._find_object_in_self(__object)
|
||||||
|
if other_object is not None:
|
||||||
|
return self, other_object
|
||||||
|
|
||||||
|
for c in self.children:
|
||||||
|
o, other_object = c._find_object(__object)
|
||||||
|
if other_object is not None:
|
||||||
|
return o, other_object
|
||||||
|
|
||||||
|
return self, None
|
||||||
|
|
||||||
|
def append(self, __object: Optional[T], already_is_parent: bool = False, from_map: bool = False):
|
||||||
|
"""
|
||||||
|
If an object, that represents the same entity exists in a relevant collection,
|
||||||
|
merge into this object. (and remap)
|
||||||
|
Else append to this collection.
|
||||||
|
|
||||||
|
:param __object:
|
||||||
|
:param already_is_parent:
|
||||||
|
:param from_map:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if __object is None or __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
append_to, existing_object = self._find_object(__object)
|
||||||
|
|
||||||
|
if existing_object is None:
|
||||||
|
# append
|
||||||
|
# print("appending", existing_object, __object)
|
||||||
|
append_to._data.append(__object)
|
||||||
|
else:
|
||||||
|
# merge
|
||||||
|
append_to._unmap_element(existing_object)
|
||||||
|
existing_object.merge(__object)
|
||||||
|
|
||||||
|
append_to._map_element(__object, from_map=from_map)
|
||||||
|
|
||||||
|
"""
|
||||||
|
exists_in_collection = self._contained_in_sub(__object)
|
||||||
|
if len(exists_in_collection) and self is exists_in_collection[0]:
|
||||||
|
# assuming that the object already is contained in the correct collections
|
||||||
|
if not already_is_parent:
|
||||||
|
self.merge_into_self(__object, from_map=from_map)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not len(exists_in_collection):
|
||||||
|
self._append(__object, from_map=from_map)
|
||||||
|
else:
|
||||||
|
exists_in_collection[0].merge_into_self(__object, from_map=from_map)
|
||||||
|
|
||||||
|
if not already_is_parent or not self._is_root:
|
||||||
|
for parent_collection in self._get_parents_of_multiple_contained_children(__object):
|
||||||
|
pass
|
||||||
|
parent_collection.append(__object, already_is_parent=True, from_map=from_map)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def extend(self, __iterable: Optional[Iterable[T]], from_map: bool = False):
|
||||||
|
if __iterable is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
for __object in __iterable:
|
||||||
|
self.append(__object, from_map=from_map)
|
||||||
|
|
||||||
|
def sync_with_other_collection(self, equal_collection: Collection):
|
||||||
|
"""
|
||||||
|
If two collections always need to have the same values, this can be used.
|
||||||
|
|
||||||
|
Internally:
|
||||||
|
1. import the data from other to self
|
||||||
|
- _data
|
||||||
|
- contained_collections
|
||||||
|
2. replace all refs from the other object, with refs from this object
|
||||||
|
"""
|
||||||
|
if equal_collection is self:
|
||||||
|
return
|
||||||
|
|
||||||
|
# don't add the elements from the subelements from the other collection.
|
||||||
|
# this will be done in the next step.
|
||||||
|
self.extend(equal_collection._data)
|
||||||
|
# add all submodules
|
||||||
|
for equal_sub_collection in equal_collection.children:
|
||||||
|
self.contain_collection_inside(equal_sub_collection)
|
||||||
|
|
||||||
|
def contain_collection_inside(self, sub_collection: Collection):
|
||||||
|
"""
|
||||||
|
This collection will ALWAYS contain everything from the passed in collection
|
||||||
|
"""
|
||||||
|
if self is sub_collection or sub_collection in self.children:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.children.append(sub_collection)
|
||||||
|
sub_collection.parents.append(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data(self) -> List[T]:
|
||||||
|
return [*self._data,
|
||||||
|
*(__object for collection in self.children for __object in collection.shallow_list)]
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self._data) + sum(len(collection) for collection in self.children)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def empty(self) -> bool:
|
||||||
|
return self.__len__() <= 0
|
||||||
|
|
||||||
|
def __iter__(self) -> Iterator[T]:
|
||||||
|
for element in self._data:
|
||||||
|
yield element
|
||||||
|
|
||||||
|
for c in self.children:
|
||||||
|
for element in c:
|
||||||
|
yield element
|
||||||
|
|
||||||
|
def __merge__(self, __other: Collection, override: bool = False):
|
||||||
|
self.extend(__other._data, from_map=True)
|
||||||
|
|
||||||
|
def __getitem__(self, item: int):
|
||||||
|
if item < len(self._data):
|
||||||
|
return self._data[item]
|
||||||
|
|
||||||
|
item = item - len(self._data)
|
||||||
|
|
||||||
|
for c in self.children:
|
||||||
|
if item < len(c):
|
||||||
|
return c.__getitem__(item)
|
||||||
|
item = item - len(c._data)
|
||||||
|
|
||||||
|
raise IndexError
|
38
music_kraken/objects/contact.py
Normal file
38
music_kraken/objects/contact.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from typing import Optional, List, Tuple
|
||||||
|
|
||||||
|
from ..utils.enums.contact import ContactMethod
|
||||||
|
from .parents import OuterProxy
|
||||||
|
|
||||||
|
|
||||||
|
class Contact(OuterProxy):
|
||||||
|
COLLECTION_STRING_ATTRIBUTES = tuple()
|
||||||
|
SIMPLE_STRING_ATTRIBUTES = {
|
||||||
|
"contact_method": None,
|
||||||
|
"value": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
return [
|
||||||
|
('id', self.id),
|
||||||
|
('value', self.value),
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self, contact_method: ContactMethod, value: str, **kwargs) -> None:
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.contact_method: ContactMethod = contact_method
|
||||||
|
self.value: str = value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def match_url(cls, url: str) -> Optional["Contact"]:
|
||||||
|
url = url.strip()
|
||||||
|
|
||||||
|
if url.startswith("mailto:"):
|
||||||
|
return cls(ContactMethod.EMAIL, url.replace("mailto:", "", 1))
|
||||||
|
|
||||||
|
if url.startswith("tel:"):
|
||||||
|
return cls(ContactMethod.PHONE, url.replace("tel:", "", 1))
|
||||||
|
|
||||||
|
if url.startswith("fax:"):
|
||||||
|
return cls(ContactMethod.FAX, url.replace("fax:", "", 1))
|
||||||
|
|
File diff suppressed because one or more lines are too long
37
music_kraken/objects/formatted_text.py
Normal file
37
music_kraken/objects/formatted_text.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import mistune
|
||||||
|
import html2markdown
|
||||||
|
|
||||||
|
class FormattedText:
|
||||||
|
html = ""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
markdown: str = None,
|
||||||
|
html: str = None
|
||||||
|
) -> None:
|
||||||
|
if html is not None:
|
||||||
|
self.html = html
|
||||||
|
elif markdown is not None:
|
||||||
|
self.html = mistune.markdown(markdown)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_empty(self) -> bool:
|
||||||
|
return self.doc is None
|
||||||
|
|
||||||
|
def __eq__(self, other) -> False:
|
||||||
|
if type(other) != type(self):
|
||||||
|
return False
|
||||||
|
if self.is_empty and other.is_empty:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return self.doc == other.doc
|
||||||
|
|
||||||
|
@property
|
||||||
|
def markdown(self) -> str:
|
||||||
|
return html2markdown.convert(self.html)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.markdown
|
||||||
|
|
||||||
|
plaintext = markdown
|
||||||
|
|
96
music_kraken/objects/lint_default_factories.py
Normal file
96
music_kraken/objects/lint_default_factories.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
from typing import List, TypeVar, Type
|
||||||
|
|
||||||
|
from .country import Language
|
||||||
|
from .lyrics import Lyrics
|
||||||
|
from .parents import OuterProxy
|
||||||
|
from .song import Song, Album, Artist, Label
|
||||||
|
from .source import Source
|
||||||
|
from .target import Target
|
||||||
|
|
||||||
|
T = TypeVar('T', bound=OuterProxy)
|
||||||
|
ALL_CLASSES: List[Type[T]] = [Song, Album, Artist, Label, Source, Target, Lyrics]
|
||||||
|
|
||||||
|
|
||||||
|
def print_lint_res(missing_values: dict):
|
||||||
|
print("_default_factories = {")
|
||||||
|
for key, value in missing_values.items():
|
||||||
|
print(f'\t"{key}": {value},')
|
||||||
|
print("}")
|
||||||
|
|
||||||
|
# def __init__(self, foo: str, bar) -> None: ...
|
||||||
|
|
||||||
|
def lint_type(cls: T):
|
||||||
|
all_values: dict = {}
|
||||||
|
missing_values: dict = {}
|
||||||
|
|
||||||
|
for key, value in cls.__annotations__.items():
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if (not key.islower()) or key.startswith("_") or (key.startswith("__") and key.endswith("__")):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if key in cls._default_factories:
|
||||||
|
continue
|
||||||
|
|
||||||
|
factory = "lambda: None"
|
||||||
|
if isinstance(value, str):
|
||||||
|
if value == "SourceCollection":
|
||||||
|
factory = "SourceCollection"
|
||||||
|
elif "collection" in value.lower():
|
||||||
|
factory = "Collection"
|
||||||
|
elif value.istitle():
|
||||||
|
factory = value
|
||||||
|
else:
|
||||||
|
if value is Language:
|
||||||
|
factory = 'Language.by_alpha_2("en")'
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
value()
|
||||||
|
factory = value.__name__
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
missing_values[key] = factory
|
||||||
|
|
||||||
|
if len(missing_values) > 0:
|
||||||
|
print(f"{cls.__name__}:")
|
||||||
|
print_lint_res(missing_values)
|
||||||
|
print()
|
||||||
|
else:
|
||||||
|
print(f"Everything is fine at {cls.__name__}")
|
||||||
|
|
||||||
|
p = []
|
||||||
|
s = []
|
||||||
|
for key, value in cls.__annotations__.items():
|
||||||
|
has_default = key in cls._default_factories
|
||||||
|
|
||||||
|
if not isinstance(value, str):
|
||||||
|
value = value.__name__
|
||||||
|
|
||||||
|
if key.endswith("_collection"):
|
||||||
|
key = key.replace("_collection", "_list")
|
||||||
|
|
||||||
|
if isinstance(value, str):
|
||||||
|
if value.startswith("Collection[") and value.endswith("]"):
|
||||||
|
value = value.replace("Collection", "List")
|
||||||
|
|
||||||
|
if isinstance(value, str) and has_default:
|
||||||
|
value = value + " = None"
|
||||||
|
|
||||||
|
p.append(f'{key}: {value}')
|
||||||
|
s.append(f'{key}={key}')
|
||||||
|
p.append("**kwargs")
|
||||||
|
s.append("**kwargs")
|
||||||
|
|
||||||
|
print("# This is automatically generated")
|
||||||
|
print(f"def __init__(self, {', '.join(p)}) -> None:")
|
||||||
|
print(f"\tsuper().__init__({', '.join(s)})")
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
def lint():
|
||||||
|
for i in ALL_CLASSES:
|
||||||
|
lint_type(i)
|
||||||
|
|
||||||
|
print()
|
39
music_kraken/objects/lyrics.py
Normal file
39
music_kraken/objects/lyrics.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
from typing import List
|
||||||
|
from collections import defaultdict
|
||||||
|
import pycountry
|
||||||
|
|
||||||
|
from .parents import OuterProxy
|
||||||
|
from .source import Source, SourceCollection
|
||||||
|
from .formatted_text import FormattedText
|
||||||
|
from .country import Language
|
||||||
|
from .metadata import (
|
||||||
|
Mapping as id3Mapping,
|
||||||
|
ID3Timestamp,
|
||||||
|
Metadata
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Lyrics(OuterProxy):
|
||||||
|
text: FormattedText
|
||||||
|
language: Language
|
||||||
|
|
||||||
|
source_collection: SourceCollection
|
||||||
|
|
||||||
|
_default_factories = {
|
||||||
|
"text": FormattedText,
|
||||||
|
"language": lambda: Language.by_alpha_2("en"),
|
||||||
|
|
||||||
|
"source_collection": SourceCollection,
|
||||||
|
}
|
||||||
|
|
||||||
|
# This is automatically generated
|
||||||
|
def __init__(self, text: FormattedText = None, language: Language = None, source_list: SourceCollection = None,
|
||||||
|
**kwargs) -> None:
|
||||||
|
super().__init__(text=text, language=language, source_list=source_list, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self) -> Metadata:
|
||||||
|
return Metadata({
|
||||||
|
id3Mapping.UNSYNCED_LYRICS: self.text.html
|
||||||
|
})
|
||||||
|
|
257
music_kraken/objects/new_collection.py
Normal file
257
music_kraken/objects/new_collection.py
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
from typing import TypeVar, Generic, Dict, Optional, Iterable, List
|
||||||
|
from .parents import OuterProxy
|
||||||
|
|
||||||
|
T = TypeVar('T', bound=OuterProxy)
|
||||||
|
|
||||||
|
|
||||||
|
class Collection(Generic[T]):
|
||||||
|
_data: List[T]
|
||||||
|
|
||||||
|
_indexed_values: Dict[str, set]
|
||||||
|
_indexed_to_objects: Dict[any, list]
|
||||||
|
|
||||||
|
shallow_list = property(fget=lambda self: self.data)
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
data: Optional[Iterable[T]] = None,
|
||||||
|
sync_on_append: Dict[str, "Collection"] = None,
|
||||||
|
contain_given_in_attribute: Dict[str, "Collection"] = None,
|
||||||
|
contain_attribute_in_given: Dict[str, "Collection"] = None,
|
||||||
|
append_object_to_attribute: Dict[str, T] = None
|
||||||
|
) -> None:
|
||||||
|
self._contains_ids = set()
|
||||||
|
self._data = []
|
||||||
|
self.upper_collections: List[Collection[T]] = []
|
||||||
|
self.contained_collections: List[Collection[T]] = []
|
||||||
|
|
||||||
|
# List of collection attributes that should be modified on append
|
||||||
|
# Key: collection attribute (str) of appended element
|
||||||
|
# Value: main collection to sync to
|
||||||
|
self.sync_on_append: Dict[str, Collection] = sync_on_append or {}
|
||||||
|
self.contain_given_in_attribute: Dict[str, Collection] = contain_given_in_attribute or {}
|
||||||
|
self.contain_attribute_in_given: Dict[str, Collection] = contain_attribute_in_given or {}
|
||||||
|
self.append_object_to_attribute: Dict[str, T] = append_object_to_attribute or {}
|
||||||
|
|
||||||
|
self.contain_self_on_append: List[str] = []
|
||||||
|
|
||||||
|
self._indexed_values = defaultdict(set)
|
||||||
|
self._indexed_to_objects = defaultdict(list)
|
||||||
|
|
||||||
|
self.extend(data)
|
||||||
|
|
||||||
|
def _map_element(self, __object: T, from_map: bool = False):
|
||||||
|
self._contains_ids.add(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
self._indexed_values[name].add(value)
|
||||||
|
self._indexed_to_objects[value].append(__object)
|
||||||
|
|
||||||
|
if not from_map:
|
||||||
|
for attribute, new_object in self.contain_given_in_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).contain_collection_inside(new_object)
|
||||||
|
|
||||||
|
for attribute, new_object in self.contain_given_in_attribute.items():
|
||||||
|
new_object.contain_collection_inside(__object.__getattribute__(attribute))
|
||||||
|
|
||||||
|
for attribute, new_object in self.append_object_to_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).append(new_object, from_map=True)
|
||||||
|
|
||||||
|
def _unmap_element(self, __object: T):
|
||||||
|
self._contains_ids.remove(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value not in self._indexed_values[name]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._indexed_to_objects[value].remove(__object)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not len(self._indexed_to_objects[value]):
|
||||||
|
self._indexed_values[name].remove(value)
|
||||||
|
|
||||||
|
def _contained_in_self(self, __object: T) -> bool:
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return True
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _get_root_collections(self) -> List["Collection"]:
|
||||||
|
if not len(self.upper_collections):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
root_collections = []
|
||||||
|
for upper_collection in self.upper_collections:
|
||||||
|
root_collections.extend(upper_collection._get_root_collections())
|
||||||
|
return root_collections
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _is_root(self) -> bool:
|
||||||
|
return len(self.upper_collections) <= 0
|
||||||
|
|
||||||
|
def _contained_in_sub(self, __object: T, break_at_first: bool = True) -> List["Collection"]:
|
||||||
|
results = []
|
||||||
|
|
||||||
|
if self._contained_in_self(__object):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
for collection in self.contained_collections:
|
||||||
|
results.extend(collection._contained_in_sub(__object, break_at_first=break_at_first))
|
||||||
|
if break_at_first:
|
||||||
|
return results
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def _get_parents_of_multiple_contained_children(self, __object: T):
|
||||||
|
results = []
|
||||||
|
if len(self.contained_collections) < 2 or self._contained_in_self(__object):
|
||||||
|
return results
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
for collection in self.contained_collections:
|
||||||
|
sub_results = collection._get_parents_of_multiple_contained_children(__object)
|
||||||
|
|
||||||
|
if len(sub_results) > 0:
|
||||||
|
count += 1
|
||||||
|
results.extend(sub_results)
|
||||||
|
|
||||||
|
if count >= 2:
|
||||||
|
results.append(self)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def _merge_in_self(self, __object: T, from_map: bool = False):
|
||||||
|
"""
|
||||||
|
1. find existing objects
|
||||||
|
2. merge into existing object
|
||||||
|
3. remap existing object
|
||||||
|
"""
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
existing_object: DatabaseObject = None
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
existing_object = self._indexed_to_objects[value][0]
|
||||||
|
if existing_object.id == __object.id:
|
||||||
|
return None
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
if existing_object is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
existing_object.merge(__object, replace_all_refs=True)
|
||||||
|
|
||||||
|
# just a check if it really worked
|
||||||
|
if existing_object.id != __object.id:
|
||||||
|
raise ValueError("This should NEVER happen. Merging doesn't work.")
|
||||||
|
|
||||||
|
self._map_element(existing_object, from_map=from_map)
|
||||||
|
|
||||||
|
def contains(self, __object: T) -> bool:
|
||||||
|
return len(self._contained_in_sub(__object)) > 0
|
||||||
|
|
||||||
|
def _append(self, __object: T, from_map: bool = False):
|
||||||
|
for attribute, to_sync_with in self.sync_on_append.items():
|
||||||
|
pass
|
||||||
|
to_sync_with.sync_with_other_collection(__object.__getattribute__(attribute))
|
||||||
|
|
||||||
|
self._map_element(__object, from_map=from_map)
|
||||||
|
self._data.append(__object)
|
||||||
|
|
||||||
|
def append(self, __object: Optional[T], already_is_parent: bool = False, from_map: bool = False):
|
||||||
|
if __object is None:
|
||||||
|
return
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
exists_in_collection = self._contained_in_sub(__object)
|
||||||
|
if len(exists_in_collection) and self is exists_in_collection[0]:
|
||||||
|
# assuming that the object already is contained in the correct collections
|
||||||
|
if not already_is_parent:
|
||||||
|
self._merge_in_self(__object, from_map=from_map)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not len(exists_in_collection):
|
||||||
|
self._append(__object, from_map=from_map)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
exists_in_collection[0]._merge_in_self(__object, from_map=from_map)
|
||||||
|
|
||||||
|
if not already_is_parent or not self._is_root:
|
||||||
|
for parent_collection in self._get_parents_of_multiple_contained_children(__object):
|
||||||
|
pass
|
||||||
|
parent_collection.append(__object, already_is_parent=True, from_map=from_map)
|
||||||
|
|
||||||
|
def extend(self, __iterable: Optional[Iterable[T]]):
|
||||||
|
if __iterable is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
for __object in __iterable:
|
||||||
|
self.append(__object)
|
||||||
|
|
||||||
|
def sync_with_other_collection(self, equal_collection: "Collection"):
|
||||||
|
"""
|
||||||
|
If two collections always need to have the same values, this can be used.
|
||||||
|
|
||||||
|
Internally:
|
||||||
|
1. import the data from other to self
|
||||||
|
- _data
|
||||||
|
- contained_collections
|
||||||
|
2. replace all refs from the other object, with refs from this object
|
||||||
|
"""
|
||||||
|
if equal_collection is self:
|
||||||
|
return
|
||||||
|
|
||||||
|
# don't add the elements from the subelements from the other collection.
|
||||||
|
# this will be done in the next step.
|
||||||
|
self.extend(equal_collection._data)
|
||||||
|
# add all submodules
|
||||||
|
for equal_sub_collection in equal_collection.contained_collections:
|
||||||
|
self.contain_collection_inside(equal_sub_collection)
|
||||||
|
|
||||||
|
# now the ugly part
|
||||||
|
# replace all refs of the other element with this one
|
||||||
|
self._risky_merge(equal_collection)
|
||||||
|
|
||||||
|
def contain_collection_inside(self, sub_collection: "Collection"):
|
||||||
|
"""
|
||||||
|
This collection will ALWAYS contain everything from the passed in collection
|
||||||
|
"""
|
||||||
|
if sub_collection in self.contained_collections:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.contained_collections.append(sub_collection)
|
||||||
|
sub_collection.upper_collections.append(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data(self) -> List[T]:
|
||||||
|
return [*self._data,
|
||||||
|
*(__object for collection in self.contained_collections for __object in collection.shallow_list)]
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self._data) + sum(len(collection) for collection in self.contained_collections)
|
||||||
|
|
||||||
|
def __iter__(self) -> Iterator[T]:
|
||||||
|
for element in self._data:
|
||||||
|
yield element
|
256
music_kraken/objects/old_collection.py
Normal file
256
music_kraken/objects/old_collection.py
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
from typing import List, Iterable, Iterator, Optional, TypeVar, Generic, Dict, Type
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
from .parents import DatabaseObject
|
||||||
|
from ..utils.support_classes.hacking import MetaClass
|
||||||
|
|
||||||
|
T = TypeVar('T', bound=DatabaseObject)
|
||||||
|
|
||||||
|
|
||||||
|
class Collection(Generic[T]):
|
||||||
|
_data: List[T]
|
||||||
|
|
||||||
|
_indexed_values: Dict[str, set]
|
||||||
|
_indexed_to_objects: Dict[any, list]
|
||||||
|
|
||||||
|
shallow_list = property(fget=lambda self: self.data)
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, data: Optional[Iterable[T]] = None,
|
||||||
|
sync_on_append: Dict[str, "Collection"] = None,
|
||||||
|
contain_given_in_attribute: Dict[str, "Collection"] = None,
|
||||||
|
contain_attribute_in_given: Dict[str, "Collection"] = None,
|
||||||
|
append_object_to_attribute: Dict[str, DatabaseObject] = None
|
||||||
|
) -> None:
|
||||||
|
self._contains_ids = set()
|
||||||
|
self._data = []
|
||||||
|
self.upper_collections: List[Collection[T]] = []
|
||||||
|
self.contained_collections: List[Collection[T]] = []
|
||||||
|
|
||||||
|
# List of collection attributes that should be modified on append
|
||||||
|
# Key: collection attribute (str) of appended element
|
||||||
|
# Value: main collection to sync to
|
||||||
|
self.sync_on_append: Dict[str, Collection] = sync_on_append or {}
|
||||||
|
self.contain_given_in_attribute: Dict[str, Collection] = contain_given_in_attribute or {}
|
||||||
|
self.contain_attribute_in_given: Dict[str, Collection] = contain_attribute_in_given or {}
|
||||||
|
self.append_object_to_attribute: Dict[str, DatabaseObject] = append_object_to_attribute or {}
|
||||||
|
|
||||||
|
self.contain_self_on_append: List[str] = []
|
||||||
|
|
||||||
|
self._indexed_values = defaultdict(set)
|
||||||
|
self._indexed_to_objects = defaultdict(list)
|
||||||
|
|
||||||
|
self.extend(data)
|
||||||
|
|
||||||
|
def _map_element(self, __object: T, from_map: bool = False):
|
||||||
|
self._contains_ids.add(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
self._indexed_values[name].add(value)
|
||||||
|
self._indexed_to_objects[value].append(__object)
|
||||||
|
|
||||||
|
if not from_map:
|
||||||
|
for attribute, new_object in self.contain_given_in_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).contain_collection_inside(new_object)
|
||||||
|
|
||||||
|
for attribute, new_object in self.contain_given_in_attribute.items():
|
||||||
|
new_object.contain_collection_inside(__object.__getattribute__(attribute))
|
||||||
|
|
||||||
|
for attribute, new_object in self.append_object_to_attribute.items():
|
||||||
|
__object.__getattribute__(attribute).append(new_object, from_map=True)
|
||||||
|
|
||||||
|
def _unmap_element(self, __object: T):
|
||||||
|
self._contains_ids.remove(__object.id)
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value not in self._indexed_values[name]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._indexed_to_objects[value].remove(__object)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not len(self._indexed_to_objects[value]):
|
||||||
|
self._indexed_values[name].remove(value)
|
||||||
|
|
||||||
|
def _contained_in_self(self, __object: T) -> bool:
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return True
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _get_root_collections(self) -> List["Collection"]:
|
||||||
|
if not len(self.upper_collections):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
root_collections = []
|
||||||
|
for upper_collection in self.upper_collections:
|
||||||
|
root_collections.extend(upper_collection._get_root_collections())
|
||||||
|
return root_collections
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _is_root(self) -> bool:
|
||||||
|
return len(self.upper_collections) <= 0
|
||||||
|
|
||||||
|
def _contained_in_sub(self, __object: T, break_at_first: bool = True) -> List["Collection"]:
|
||||||
|
results = []
|
||||||
|
|
||||||
|
if self._contained_in_self(__object):
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
for collection in self.contained_collections:
|
||||||
|
results.extend(collection._contained_in_sub(__object, break_at_first=break_at_first))
|
||||||
|
if break_at_first:
|
||||||
|
return results
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def _get_parents_of_multiple_contained_children(self, __object: T):
|
||||||
|
results = []
|
||||||
|
if len(self.contained_collections) < 2 or self._contained_in_self(__object):
|
||||||
|
return results
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
for collection in self.contained_collections:
|
||||||
|
sub_results = collection._get_parents_of_multiple_contained_children(__object)
|
||||||
|
|
||||||
|
if len(sub_results) > 0:
|
||||||
|
count += 1
|
||||||
|
results.extend(sub_results)
|
||||||
|
|
||||||
|
if count >= 2:
|
||||||
|
results.append(self)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
def _merge_in_self(self, __object: T, from_map: bool = False):
|
||||||
|
"""
|
||||||
|
1. find existing objects
|
||||||
|
2. merge into existing object
|
||||||
|
3. remap existing object
|
||||||
|
"""
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
existing_object: DatabaseObject = None
|
||||||
|
|
||||||
|
for name, value in __object.indexing_values:
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
if value in self._indexed_values[name]:
|
||||||
|
existing_object = self._indexed_to_objects[value][0]
|
||||||
|
if existing_object.id == __object.id:
|
||||||
|
return None
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
if existing_object is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
existing_object.merge(__object, replace_all_refs=True)
|
||||||
|
|
||||||
|
# just a check if it really worked
|
||||||
|
if existing_object.id != __object.id:
|
||||||
|
raise ValueError("This should NEVER happen. Merging doesn't work.")
|
||||||
|
|
||||||
|
self._map_element(existing_object, from_map=from_map)
|
||||||
|
|
||||||
|
def contains(self, __object: T) -> bool:
|
||||||
|
return len(self._contained_in_sub(__object)) > 0
|
||||||
|
|
||||||
|
def _append(self, __object: T, from_map: bool = False):
|
||||||
|
for attribute, to_sync_with in self.sync_on_append.items():
|
||||||
|
pass
|
||||||
|
to_sync_with.sync_with_other_collection(__object.__getattribute__(attribute))
|
||||||
|
|
||||||
|
self._map_element(__object, from_map=from_map)
|
||||||
|
self._data.append(__object)
|
||||||
|
|
||||||
|
def append(self, __object: Optional[T], already_is_parent: bool = False, from_map: bool = False):
|
||||||
|
if __object is None:
|
||||||
|
return
|
||||||
|
if __object.id in self._contains_ids:
|
||||||
|
return
|
||||||
|
|
||||||
|
exists_in_collection = self._contained_in_sub(__object)
|
||||||
|
if len(exists_in_collection) and self is exists_in_collection[0]:
|
||||||
|
# assuming that the object already is contained in the correct collections
|
||||||
|
if not already_is_parent:
|
||||||
|
self._merge_in_self(__object, from_map=from_map)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not len(exists_in_collection):
|
||||||
|
self._append(__object, from_map=from_map)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
exists_in_collection[0]._merge_in_self(__object, from_map=from_map)
|
||||||
|
|
||||||
|
if not already_is_parent or not self._is_root:
|
||||||
|
for parent_collection in self._get_parents_of_multiple_contained_children(__object):
|
||||||
|
pass
|
||||||
|
parent_collection.append(__object, already_is_parent=True, from_map=from_map)
|
||||||
|
|
||||||
|
def extend(self, __iterable: Optional[Iterable[T]]):
|
||||||
|
if __iterable is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
for __object in __iterable:
|
||||||
|
self.append(__object)
|
||||||
|
|
||||||
|
def sync_with_other_collection(self, equal_collection: "Collection"):
|
||||||
|
"""
|
||||||
|
If two collections always need to have the same values, this can be used.
|
||||||
|
|
||||||
|
Internally:
|
||||||
|
1. import the data from other to self
|
||||||
|
- _data
|
||||||
|
- contained_collections
|
||||||
|
2. replace all refs from the other object, with refs from this object
|
||||||
|
"""
|
||||||
|
if equal_collection is self:
|
||||||
|
return
|
||||||
|
|
||||||
|
# don't add the elements from the subelements from the other collection.
|
||||||
|
# this will be done in the next step.
|
||||||
|
self.extend(equal_collection._data)
|
||||||
|
# add all submodules
|
||||||
|
for equal_sub_collection in equal_collection.contained_collections:
|
||||||
|
self.contain_collection_inside(equal_sub_collection)
|
||||||
|
|
||||||
|
# now the ugly part
|
||||||
|
# replace all refs of the other element with this one
|
||||||
|
self._risky_merge(equal_collection)
|
||||||
|
|
||||||
|
def contain_collection_inside(self, sub_collection: "Collection"):
|
||||||
|
"""
|
||||||
|
This collection will ALWAYS contain everything from the passed in collection
|
||||||
|
"""
|
||||||
|
if sub_collection in self.contained_collections:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.contained_collections.append(sub_collection)
|
||||||
|
sub_collection.upper_collections.append(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data(self) -> List[T]:
|
||||||
|
return [*self._data,
|
||||||
|
*(__object for collection in self.contained_collections for __object in collection.shallow_list)]
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self._data) + sum(len(collection) for collection in self.contained_collections)
|
||||||
|
|
||||||
|
def __iter__(self) -> Iterator[T]:
|
||||||
|
for element in self._data:
|
||||||
|
yield element
|
243
music_kraken/objects/parents.py
Normal file
243
music_kraken/objects/parents.py
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import random
|
||||||
|
from collections import defaultdict
|
||||||
|
from functools import lru_cache
|
||||||
|
|
||||||
|
from typing import Optional, Dict, Tuple, List, Type, Generic, Any, TypeVar, Set
|
||||||
|
|
||||||
|
from .metadata import Metadata
|
||||||
|
from ..utils import get_unix_time
|
||||||
|
from ..utils.config import logging_settings, main_settings
|
||||||
|
from ..utils.shared import HIGHEST_ID
|
||||||
|
from ..utils.hacking import MetaClass
|
||||||
|
|
||||||
|
LOGGER = logging_settings["object_logger"]
|
||||||
|
|
||||||
|
P = TypeVar("P", bound="OuterProxy")
|
||||||
|
|
||||||
|
|
||||||
|
class InnerData:
|
||||||
|
"""
|
||||||
|
This is the core class, which is used for every Data class.
|
||||||
|
The attributes are set, and can be merged.
|
||||||
|
|
||||||
|
The concept is, that the outer class proxies this class.
|
||||||
|
If the data in the wrapper class has to be merged, then this class is just replaced and garbage collected.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
for key, value in kwargs.items():
|
||||||
|
self.__setattr__(key, value)
|
||||||
|
|
||||||
|
def __merge__(self, __other: InnerData, override: bool = False):
|
||||||
|
"""
|
||||||
|
TODO
|
||||||
|
is default is totally ignored
|
||||||
|
|
||||||
|
:param __other:
|
||||||
|
:param override:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
for key, value in __other.__dict__.copy().items():
|
||||||
|
# just set the other value if self doesn't already have it
|
||||||
|
if key not in self.__dict__:
|
||||||
|
self.__setattr__(key, value)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# if the object of value implemented __merge__, it merges
|
||||||
|
existing = self.__getattribute__(key)
|
||||||
|
if hasattr(type(existing), "__merge__"):
|
||||||
|
existing.__merge__(value, override)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# override the existing value if requested
|
||||||
|
if override:
|
||||||
|
self.__setattr__(key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class OuterProxy:
|
||||||
|
"""
|
||||||
|
Wraps the inner data, and provides apis, to naturally access those values.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_default_factories: dict = {}
|
||||||
|
_outer_attribute: Set[str] = {"options", "metadata", "indexing_values", "option_string"}
|
||||||
|
|
||||||
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = tuple()
|
||||||
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = tuple()
|
||||||
|
|
||||||
|
TITEL = "id"
|
||||||
|
|
||||||
|
def __init__(self, _id: int = None, dynamic: bool = False, **kwargs):
|
||||||
|
_automatic_id: bool = False
|
||||||
|
|
||||||
|
if _id is None and not dynamic:
|
||||||
|
"""
|
||||||
|
generates a random integer id
|
||||||
|
the range is defined in the config
|
||||||
|
"""
|
||||||
|
_id = random.randint(0, HIGHEST_ID)
|
||||||
|
_automatic_id = True
|
||||||
|
|
||||||
|
kwargs["automatic_id"] = _automatic_id
|
||||||
|
kwargs["id"] = _id
|
||||||
|
kwargs["dynamic"] = dynamic
|
||||||
|
|
||||||
|
for name, factory in type(self)._default_factories.items():
|
||||||
|
if kwargs.get(name, None) is None:
|
||||||
|
kwargs[name] = factory()
|
||||||
|
|
||||||
|
collection_data: Dict[str, list] = {}
|
||||||
|
for name, value in kwargs.copy().items():
|
||||||
|
if isinstance(value, list) and name.endswith("_list"):
|
||||||
|
collection_name = name.replace("_list", "_collection")
|
||||||
|
collection_data[collection_name] = value
|
||||||
|
|
||||||
|
del kwargs[name]
|
||||||
|
|
||||||
|
self._fetched_from: dict = {}
|
||||||
|
self._inner: InnerData = InnerData(**kwargs)
|
||||||
|
self.__init_collections__()
|
||||||
|
|
||||||
|
for name, data_list in collection_data.items():
|
||||||
|
collection = self._inner.__getattribute__(name)
|
||||||
|
collection.extend(data_list)
|
||||||
|
|
||||||
|
self._inner.__setattr__(name, collection)
|
||||||
|
|
||||||
|
def __init_collections__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __getattribute__(self, __name: str) -> Any:
|
||||||
|
"""
|
||||||
|
Returns the attribute of _inner if the attribute exists,
|
||||||
|
else it returns the attribute of self.
|
||||||
|
|
||||||
|
That the _inner gets checked first is essential for the type hints.
|
||||||
|
:param __name:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if __name.startswith("_") or __name in self._outer_attribute or __name.isupper():
|
||||||
|
return object.__getattribute__(self, __name)
|
||||||
|
|
||||||
|
_inner: InnerData = super().__getattribute__("_inner")
|
||||||
|
try:
|
||||||
|
return _inner.__getattribute__(__name)
|
||||||
|
except AttributeError:
|
||||||
|
return super().__getattribute__(__name)
|
||||||
|
|
||||||
|
def __setattr__(self, __name, __value):
|
||||||
|
if not __name.startswith("_") and hasattr(self, "_inner"):
|
||||||
|
_inner: InnerData = super().__getattribute__("_inner")
|
||||||
|
return _inner.__setattr__(__name, __value)
|
||||||
|
|
||||||
|
return super().__setattr__(__name, __value)
|
||||||
|
|
||||||
|
def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def add_list_of_other_objects(self, object_list: List[OuterProxy]):
|
||||||
|
d: Dict[Type[OuterProxy], List[OuterProxy]] = defaultdict(list)
|
||||||
|
|
||||||
|
for db_object in object_list:
|
||||||
|
d[type(db_object)].append(db_object)
|
||||||
|
|
||||||
|
for key, value in d.items():
|
||||||
|
self._add_other_db_objects(key, value)
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
"""
|
||||||
|
:raise: IsDynamicException
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if self.dynamic:
|
||||||
|
return id(self._inner)
|
||||||
|
|
||||||
|
return self.id
|
||||||
|
|
||||||
|
def __eq__(self, other: Any):
|
||||||
|
return self.__hash__() == other.__hash__()
|
||||||
|
|
||||||
|
def merge(self, __other: Optional[OuterProxy], override: bool = False):
|
||||||
|
"""
|
||||||
|
1. merges the data of __other in self
|
||||||
|
2. replaces the data of __other with the data of self
|
||||||
|
|
||||||
|
:param __other:
|
||||||
|
:param override:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if __other is None:
|
||||||
|
_ = "debug"
|
||||||
|
return
|
||||||
|
|
||||||
|
self._inner.__merge__(__other._inner, override=override)
|
||||||
|
__other._inner = self._inner
|
||||||
|
|
||||||
|
def mark_as_fetched(self, *url_hash_list: List[str]):
|
||||||
|
for url_hash in url_hash_list:
|
||||||
|
self._fetched_from[url_hash] = {
|
||||||
|
"time": get_unix_time(),
|
||||||
|
"url": url_hash,
|
||||||
|
}
|
||||||
|
|
||||||
|
def already_fetched_from(self, url_hash: str) -> bool:
|
||||||
|
res = self._fetched_from.get(url_hash, None)
|
||||||
|
|
||||||
|
if res is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return get_unix_time() - res["time"] < main_settings["refresh_after"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self) -> Metadata:
|
||||||
|
"""
|
||||||
|
This is an interface.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return Metadata()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
return [self]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
"""
|
||||||
|
This is an interface.
|
||||||
|
It is supposed to return a map of the name and values for all important attributes.
|
||||||
|
This helps in comparing classes for equal data (e.g. being the same song but different attributes)
|
||||||
|
|
||||||
|
TODO
|
||||||
|
Rewrite this approach into a approach, that is centered around statistics, and not binaries.
|
||||||
|
Instead of: one of this matches, it is the same
|
||||||
|
This: If enough attributes are similar enough, they are the same
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Tuple[str, object]]: the first element in the tuple is the name of the attribute, the second the value.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
|
@property
|
||||||
|
@lru_cache()
|
||||||
|
def all_collections(self):
|
||||||
|
r = []
|
||||||
|
|
||||||
|
for key in self._default_factories:
|
||||||
|
val = self._inner.__getattribute__(key)
|
||||||
|
if hasattr(val, "__is_collection__"):
|
||||||
|
r.append(val)
|
||||||
|
|
||||||
|
return r
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"{type(self).__name__}({', '.join(key + ': ' + str(val) for key, val in self.indexing_values)})"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title_string(self) -> str:
|
||||||
|
return str(self.__getattribute__(self.TITEL))
|
689
music_kraken/objects/song.py
Normal file
689
music_kraken/objects/song.py
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import random
|
||||||
|
from collections import defaultdict
|
||||||
|
from typing import List, Optional, Dict, Tuple, Type, Union
|
||||||
|
|
||||||
|
import pycountry
|
||||||
|
|
||||||
|
from ..utils.enums.album import AlbumType, AlbumStatus
|
||||||
|
from .collection import Collection
|
||||||
|
from .formatted_text import FormattedText
|
||||||
|
from .lyrics import Lyrics
|
||||||
|
from .contact import Contact
|
||||||
|
from .metadata import (
|
||||||
|
Mapping as id3Mapping,
|
||||||
|
ID3Timestamp,
|
||||||
|
Metadata
|
||||||
|
)
|
||||||
|
from .option import Options
|
||||||
|
from .parents import OuterProxy, P
|
||||||
|
from .source import Source, SourceCollection
|
||||||
|
from .target import Target
|
||||||
|
from .country import Language, Country
|
||||||
|
from ..utils.string_processing import unify
|
||||||
|
|
||||||
|
from .parents import OuterProxy as Base
|
||||||
|
|
||||||
|
from ..utils.config import main_settings
|
||||||
|
|
||||||
|
"""
|
||||||
|
All Objects dependent
|
||||||
|
"""
|
||||||
|
|
||||||
|
CountryTyping = type(list(pycountry.countries)[0])
|
||||||
|
OPTION_STRING_DELIMITER = " | "
|
||||||
|
|
||||||
|
|
||||||
|
class Song(Base):
|
||||||
|
title: str
|
||||||
|
unified_title: str
|
||||||
|
isrc: str
|
||||||
|
length: int
|
||||||
|
genre: str
|
||||||
|
note: FormattedText
|
||||||
|
tracksort: int
|
||||||
|
|
||||||
|
source_collection: SourceCollection
|
||||||
|
target_collection: Collection[Target]
|
||||||
|
lyrics_collection: Collection[Lyrics]
|
||||||
|
main_artist_collection: Collection[Artist]
|
||||||
|
feature_artist_collection: Collection[Artist]
|
||||||
|
album_collection: Collection[Album]
|
||||||
|
|
||||||
|
_default_factories = {
|
||||||
|
"note": FormattedText,
|
||||||
|
"length": lambda: 0,
|
||||||
|
"source_collection": SourceCollection,
|
||||||
|
"target_collection": Collection,
|
||||||
|
"lyrics_collection": Collection,
|
||||||
|
|
||||||
|
"main_artist_collection": Collection,
|
||||||
|
"album_collection": Collection,
|
||||||
|
"feature_artist_collection": Collection,
|
||||||
|
|
||||||
|
"title": lambda: "",
|
||||||
|
"unified_title": lambda: None,
|
||||||
|
"isrc": lambda: None,
|
||||||
|
"genre": lambda: None,
|
||||||
|
|
||||||
|
"tracksort": lambda: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, title: str = "", unified_title: str = None, isrc: str = None, length: int = None,
|
||||||
|
genre: str = None, note: FormattedText = None, source_list: List[Source] = None,
|
||||||
|
target_list: List[Target] = None, lyrics_list: List[Lyrics] = None,
|
||||||
|
main_artist_list: List[Artist] = None, feature_artist_list: List[Artist] = None,
|
||||||
|
album_list: List[Album] = None, tracksort: int = 0, **kwargs) -> None:
|
||||||
|
|
||||||
|
Base.__init__(**locals())
|
||||||
|
|
||||||
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("album_collection", "main_artist_collection", "feature_artist_collection")
|
||||||
|
TITEL = "title"
|
||||||
|
|
||||||
|
def __init_collections__(self) -> None:
|
||||||
|
self.album_collection.contain_given_in_attribute = {
|
||||||
|
"artist_collection": self.main_artist_collection,
|
||||||
|
}
|
||||||
|
self.album_collection.append_object_to_attribute = {
|
||||||
|
"song_collection": self,
|
||||||
|
}
|
||||||
|
|
||||||
|
self.main_artist_collection.contain_given_in_attribute = {
|
||||||
|
"main_album_collection": self.album_collection
|
||||||
|
}
|
||||||
|
self.feature_artist_collection.append_object_to_attribute = {
|
||||||
|
"feature_song_collection": self
|
||||||
|
}
|
||||||
|
|
||||||
|
def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]):
|
||||||
|
if object_type is Song:
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(object_list, Lyrics):
|
||||||
|
self.lyrics_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(object_list, Artist):
|
||||||
|
self.main_artist_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(object_list, Album):
|
||||||
|
self.album_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
return [
|
||||||
|
('id', self.id),
|
||||||
|
('title', self.unified_title),
|
||||||
|
('isrc', self.isrc),
|
||||||
|
*[('url', source.url) for source in self.source_collection]
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self) -> Metadata:
|
||||||
|
metadata = Metadata({
|
||||||
|
id3Mapping.TITLE: [self.title],
|
||||||
|
id3Mapping.ISRC: [self.isrc],
|
||||||
|
id3Mapping.LENGTH: [self.length],
|
||||||
|
id3Mapping.GENRE: [self.genre],
|
||||||
|
id3Mapping.TRACKNUMBER: [self.tracksort_str],
|
||||||
|
id3Mapping.COMMENT: [self.note.markdown],
|
||||||
|
})
|
||||||
|
|
||||||
|
# metadata.merge_many([s.get_song_metadata() for s in self.source_collection]) album sources have no relevant metadata for id3
|
||||||
|
metadata.merge_many([a.metadata for a in self.album_collection])
|
||||||
|
metadata.merge_many([a.metadata for a in self.main_artist_collection])
|
||||||
|
metadata.merge_many([a.metadata for a in self.feature_artist_collection])
|
||||||
|
metadata.merge_many([lyrics.metadata for lyrics in self.lyrics_collection])
|
||||||
|
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
def get_artist_credits(self) -> str:
|
||||||
|
main_artists = ", ".join([artist.name for artist in self.main_artist_collection])
|
||||||
|
feature_artists = ", ".join([artist.name for artist in self.feature_artist_collection])
|
||||||
|
|
||||||
|
if len(feature_artists) == 0:
|
||||||
|
return main_artists
|
||||||
|
return f"{main_artists} feat. {feature_artists}"
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return f"Song(\"{self.title}\")"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def option_string(self) -> str:
|
||||||
|
return f"{self.__repr__()} " \
|
||||||
|
f"from Album({OPTION_STRING_DELIMITER.join(album.title for album in self.album_collection)}) " \
|
||||||
|
f"by Artist({OPTION_STRING_DELIMITER.join(artist.name for artist in self.main_artist_collection)}) " \
|
||||||
|
f"feat. Artist({OPTION_STRING_DELIMITER.join(artist.name for artist in self.feature_artist_collection)})"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
options = self.main_artist_collection.shallow_list
|
||||||
|
options.extend(self.feature_artist_collection)
|
||||||
|
options.extend(self.album_collection)
|
||||||
|
options.append(self)
|
||||||
|
return options
|
||||||
|
|
||||||
|
@property
|
||||||
|
def tracksort_str(self) -> str:
|
||||||
|
"""
|
||||||
|
if the album tracklist is empty, it sets it length to 1, this song has to be on the Album
|
||||||
|
:returns id3_tracksort: {song_position}/{album.length_of_tracklist}
|
||||||
|
"""
|
||||||
|
if len(self.album_collection) == 0:
|
||||||
|
return f"{self.tracksort}"
|
||||||
|
|
||||||
|
return f"{self.tracksort}/{len(self.album_collection[0].song_collection) or 1}"
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
All objects dependent on Album
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Album(Base):
|
||||||
|
title: str
|
||||||
|
unified_title: str
|
||||||
|
album_status: AlbumStatus
|
||||||
|
album_type: AlbumType
|
||||||
|
language: Language
|
||||||
|
date: ID3Timestamp
|
||||||
|
barcode: str
|
||||||
|
albumsort: int
|
||||||
|
notes: FormattedText
|
||||||
|
|
||||||
|
source_collection: SourceCollection
|
||||||
|
artist_collection: Collection[Artist]
|
||||||
|
song_collection: Collection[Song]
|
||||||
|
label_collection: Collection[Label]
|
||||||
|
|
||||||
|
_default_factories = {
|
||||||
|
"title": lambda: None,
|
||||||
|
"unified_title": lambda: None,
|
||||||
|
"album_status": lambda: None,
|
||||||
|
"barcode": lambda: None,
|
||||||
|
"albumsort": lambda: None,
|
||||||
|
|
||||||
|
"album_type": lambda: AlbumType.OTHER,
|
||||||
|
"language": lambda: Language.by_alpha_2("en"),
|
||||||
|
"date": ID3Timestamp,
|
||||||
|
"notes": FormattedText,
|
||||||
|
|
||||||
|
"source_collection": SourceCollection,
|
||||||
|
"artist_collection": Collection,
|
||||||
|
"song_collection": Collection,
|
||||||
|
"label_collection": Collection,
|
||||||
|
}
|
||||||
|
|
||||||
|
TITEL = "title"
|
||||||
|
|
||||||
|
# This is automatically generated
|
||||||
|
def __init__(self, title: str = None, unified_title: str = None, album_status: AlbumStatus = None,
|
||||||
|
album_type: AlbumType = None, language: Language = None, date: ID3Timestamp = None,
|
||||||
|
barcode: str = None, albumsort: int = None, notes: FormattedText = None,
|
||||||
|
source_list: List[Source] = None, artist_list: List[Artist] = None, song_list: List[Song] = None,
|
||||||
|
label_list: List[Label] = None, **kwargs) -> None:
|
||||||
|
super().__init__(title=title, unified_title=unified_title, album_status=album_status, album_type=album_type,
|
||||||
|
language=language, date=date, barcode=barcode, albumsort=albumsort, notes=notes,
|
||||||
|
source_list=source_list, artist_list=artist_list, song_list=song_list, label_list=label_list,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("song_collection",)
|
||||||
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("artist_collection", "label_collection")
|
||||||
|
|
||||||
|
def __init_collections__(self):
|
||||||
|
self.song_collection.contain_attribute_in_given = {
|
||||||
|
"main_artist_collection": self.artist_collection
|
||||||
|
}
|
||||||
|
|
||||||
|
def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]):
|
||||||
|
if object_type is Song:
|
||||||
|
self.song_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Artist:
|
||||||
|
self.artist_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Album:
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Label:
|
||||||
|
self.label_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
return [
|
||||||
|
('id', self.id),
|
||||||
|
('title', self.unified_title),
|
||||||
|
('barcode', self.barcode),
|
||||||
|
*[('url', source.url) for source in self.source_collection]
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self) -> Metadata:
|
||||||
|
"""
|
||||||
|
TODO
|
||||||
|
- barcode
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return Metadata({
|
||||||
|
id3Mapping.ALBUM: [self.title],
|
||||||
|
id3Mapping.COPYRIGHT: [self.copyright],
|
||||||
|
id3Mapping.LANGUAGE: [self.iso_639_2_lang],
|
||||||
|
id3Mapping.ALBUM_ARTIST: [a.name for a in self.artist_collection],
|
||||||
|
id3Mapping.DATE: [self.date.strftime("%d%m")] if self.date.has_year and self.date.has_month else [],
|
||||||
|
id3Mapping.TIME: [self.date.strftime(("%H%M"))] if self.date.has_hour and self.date.has_minute else [],
|
||||||
|
id3Mapping.YEAR: [str(self.date.year).zfill(4)] if self.date.has_year else [],
|
||||||
|
id3Mapping.RELEASE_DATE: [self.date.timestamp],
|
||||||
|
id3Mapping.ORIGINAL_RELEASE_DATE: [self.date.timestamp],
|
||||||
|
id3Mapping.ALBUMSORTORDER: [str(self.albumsort)] if self.albumsort is not None else []
|
||||||
|
})
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"Album(\"{self.title}\")"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def option_string(self) -> str:
|
||||||
|
return f"{self.__repr__()} " \
|
||||||
|
f"by Artist({OPTION_STRING_DELIMITER.join([artist.name for artist in self.artist_collection])}) " \
|
||||||
|
f"under Label({OPTION_STRING_DELIMITER.join([label.name for label in self.label_collection])})"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
options = [*self.artist_collection, self, *self.song_collection]
|
||||||
|
|
||||||
|
return options
|
||||||
|
|
||||||
|
def update_tracksort(self):
|
||||||
|
"""
|
||||||
|
This updates the tracksort attributes, of the songs in
|
||||||
|
`self.song_collection`, and sorts the songs, if possible.
|
||||||
|
|
||||||
|
It is advised to only call this function, once all the tracks are
|
||||||
|
added to the songs.
|
||||||
|
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if self.song_collection.empty:
|
||||||
|
return
|
||||||
|
|
||||||
|
tracksort_map: Dict[int, Song] = {
|
||||||
|
song.tracksort: song for song in self.song_collection if song.tracksort is not None
|
||||||
|
}
|
||||||
|
|
||||||
|
# place the songs, with set tracksort attribute according to it
|
||||||
|
for tracksort, song in tracksort_map.items():
|
||||||
|
index = tracksort - 1
|
||||||
|
|
||||||
|
"""
|
||||||
|
I ONLY modify the `Collection._data` attribute directly,
|
||||||
|
to bypass the mapping of the attributes, because I will add the item in the next step
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
but for some reason, neither
|
||||||
|
`self.song_collection._data.index(song)`
|
||||||
|
`self.song_collection._data.remove(song)`
|
||||||
|
get the right object.
|
||||||
|
|
||||||
|
I have NO FUCKING CLUE why xD
|
||||||
|
But I just implemented it myself.
|
||||||
|
"""
|
||||||
|
for old_index, temp_song in enumerate(self.song_collection._data):
|
||||||
|
if song is temp_song:
|
||||||
|
break
|
||||||
|
|
||||||
|
# the list can't be empty
|
||||||
|
del self.song_collection._data[old_index]
|
||||||
|
self.song_collection._data.insert(index, song)
|
||||||
|
|
||||||
|
# fill in the empty tracksort attributes
|
||||||
|
for i, song in enumerate(self.song_collection):
|
||||||
|
if song.tracksort is not None:
|
||||||
|
continue
|
||||||
|
song.tracksort = i + 1
|
||||||
|
|
||||||
|
def compile(self, merge_into: bool = False):
|
||||||
|
"""
|
||||||
|
compiles the recursive structures,
|
||||||
|
and does depending on the object some other stuff.
|
||||||
|
|
||||||
|
no need to override if only the recursive structure should be built.
|
||||||
|
override self.build_recursive_structures() instead
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.update_tracksort()
|
||||||
|
self._build_recursive_structures(build_version=random.randint(0, 99999), merge=merge_into)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def copyright(self) -> str:
|
||||||
|
if self.date is None:
|
||||||
|
return ""
|
||||||
|
if self.date.has_year or len(self.label_collection) == 0:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
return f"{self.date.year} {self.label_collection[0].name}"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def iso_639_2_lang(self) -> Optional[str]:
|
||||||
|
if self.language is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.language.alpha_3
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_split(self) -> bool:
|
||||||
|
"""
|
||||||
|
A split Album is an Album from more than one Artists
|
||||||
|
usually half the songs are made by one Artist, the other half by the other one.
|
||||||
|
In this case split means either that or one artist featured by all songs.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return len(self.artist_collection) > 1
|
||||||
|
|
||||||
|
@property
|
||||||
|
def album_type_string(self) -> str:
|
||||||
|
return self.album_type.value
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
All objects dependent on Artist
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Artist(Base):
|
||||||
|
name: str
|
||||||
|
unified_name: str
|
||||||
|
country: Country
|
||||||
|
formed_in: ID3Timestamp
|
||||||
|
notes: FormattedText
|
||||||
|
lyrical_themes: List[str]
|
||||||
|
|
||||||
|
general_genre: str
|
||||||
|
unformated_location: str
|
||||||
|
|
||||||
|
source_collection: SourceCollection
|
||||||
|
contact_collection: Collection[Contact]
|
||||||
|
|
||||||
|
feature_song_collection: Collection[Song]
|
||||||
|
main_album_collection: Collection[Album]
|
||||||
|
label_collection: Collection[Label]
|
||||||
|
|
||||||
|
_default_factories = {
|
||||||
|
"name": str,
|
||||||
|
"unified_name": lambda: None,
|
||||||
|
"country": lambda: None,
|
||||||
|
"unformated_location": lambda: None,
|
||||||
|
|
||||||
|
"formed_in": ID3Timestamp,
|
||||||
|
"notes": FormattedText,
|
||||||
|
"lyrical_themes": list,
|
||||||
|
"general_genre": lambda: "",
|
||||||
|
|
||||||
|
"source_collection": SourceCollection,
|
||||||
|
"feature_song_collection": Collection,
|
||||||
|
"main_album_collection": Collection,
|
||||||
|
"contact_collection": Collection,
|
||||||
|
"label_collection": Collection,
|
||||||
|
}
|
||||||
|
|
||||||
|
TITEL = "name"
|
||||||
|
|
||||||
|
# This is automatically generated
|
||||||
|
def __init__(self, name: str = "", unified_name: str = None, country: Country = None,
|
||||||
|
formed_in: ID3Timestamp = None, notes: FormattedText = None, lyrical_themes: List[str] = None,
|
||||||
|
general_genre: str = None, unformated_location: str = None, source_list: List[Source] = None,
|
||||||
|
contact_list: List[Contact] = None, feature_song_list: List[Song] = None,
|
||||||
|
main_album_list: List[Album] = None, label_list: List[Label] = None, **kwargs) -> None:
|
||||||
|
|
||||||
|
super().__init__(name=name, unified_name=unified_name, country=country, formed_in=formed_in, notes=notes,
|
||||||
|
lyrical_themes=lyrical_themes, general_genre=general_genre,
|
||||||
|
unformated_location=unformated_location, source_list=source_list, contact_list=contact_list,
|
||||||
|
feature_song_list=feature_song_list, main_album_list=main_album_list, label_list=label_list,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("feature_song_collection", "main_album_collection")
|
||||||
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("label_collection",)
|
||||||
|
|
||||||
|
def __init_collections__(self):
|
||||||
|
self.feature_song_collection.append_object_to_attribute = {
|
||||||
|
"feature_artist_collection": self
|
||||||
|
}
|
||||||
|
|
||||||
|
self.main_album_collection.append_object_to_attribute = {
|
||||||
|
"artist_collection": self
|
||||||
|
}
|
||||||
|
|
||||||
|
self.label_collection.append_object_to_attribute = {
|
||||||
|
"current_artist_collection": self
|
||||||
|
}
|
||||||
|
|
||||||
|
def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]):
|
||||||
|
if object_type is Song:
|
||||||
|
# this doesn't really make sense
|
||||||
|
# self.feature_song_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Artist:
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Album:
|
||||||
|
self.main_album_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Label:
|
||||||
|
self.label_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
options = [self, *self.main_album_collection.shallow_list, *self.feature_album]
|
||||||
|
print(options)
|
||||||
|
return options
|
||||||
|
|
||||||
|
def update_albumsort(self):
|
||||||
|
"""
|
||||||
|
This updates the albumsort attributes, of the albums in
|
||||||
|
`self.main_album_collection`, and sorts the albums, if possible.
|
||||||
|
|
||||||
|
It is advised to only call this function, once all the albums are
|
||||||
|
added to the artist.
|
||||||
|
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if len(self.main_album_collection) <= 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
type_section: Dict[AlbumType, int] = defaultdict(lambda: 2, {
|
||||||
|
AlbumType.OTHER: 0, # if I don't know it, I add it to the first section
|
||||||
|
AlbumType.STUDIO_ALBUM: 0,
|
||||||
|
AlbumType.EP: 0,
|
||||||
|
AlbumType.SINGLE: 1
|
||||||
|
}) if main_settings["sort_album_by_type"] else defaultdict(lambda: 0)
|
||||||
|
|
||||||
|
sections = defaultdict(list)
|
||||||
|
|
||||||
|
# order albums in the previously defined section
|
||||||
|
album: Album
|
||||||
|
for album in self.main_album_collection:
|
||||||
|
sections[type_section[album.album_type]].append(album)
|
||||||
|
|
||||||
|
def sort_section(_section: List[Album], last_albumsort: int) -> int:
|
||||||
|
# album is just a value used in loops
|
||||||
|
nonlocal album
|
||||||
|
|
||||||
|
if main_settings["sort_by_date"]:
|
||||||
|
_section.sort(key=lambda _album: _album.date, reverse=True)
|
||||||
|
|
||||||
|
new_last_albumsort = last_albumsort
|
||||||
|
|
||||||
|
for album_index, album in enumerate(_section):
|
||||||
|
if album.albumsort is None:
|
||||||
|
album.albumsort = new_last_albumsort = album_index + 1 + last_albumsort
|
||||||
|
|
||||||
|
_section.sort(key=lambda _album: _album.albumsort)
|
||||||
|
|
||||||
|
return new_last_albumsort
|
||||||
|
|
||||||
|
# sort the sections individually
|
||||||
|
_last_albumsort = 1
|
||||||
|
for section_index in sorted(sections):
|
||||||
|
_last_albumsort = sort_section(sections[section_index], _last_albumsort)
|
||||||
|
|
||||||
|
# merge all sections again
|
||||||
|
album_list = []
|
||||||
|
for section_index in sorted(sections):
|
||||||
|
album_list.extend(sections[section_index])
|
||||||
|
|
||||||
|
# replace the old collection with the new one
|
||||||
|
self.main_album_collection: Collection = Collection(data=album_list, element_type=Album)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
return [
|
||||||
|
('id', self.id),
|
||||||
|
('name', self.unified_name),
|
||||||
|
*[('url', source.url) for source in self.source_collection],
|
||||||
|
*[('contact', contact.value) for contact in self.contact_collection]
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self) -> Metadata:
|
||||||
|
metadata = Metadata({
|
||||||
|
id3Mapping.ARTIST: [self.name]
|
||||||
|
})
|
||||||
|
metadata.merge_many([s.get_artist_metadata() for s in self.source_collection])
|
||||||
|
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
"""
|
||||||
|
def __str__(self, include_notes: bool = False):
|
||||||
|
string = self.name or ""
|
||||||
|
if include_notes:
|
||||||
|
plaintext_notes = self.notes.get_plaintext()
|
||||||
|
if plaintext_notes is not None:
|
||||||
|
string += "\n" + plaintext_notes
|
||||||
|
return string
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"Artist(\"{self.name}\")"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def option_string(self) -> str:
|
||||||
|
return f"{self.__repr__()} " \
|
||||||
|
f"under Label({OPTION_STRING_DELIMITER.join([label.name for label in self.label_collection])})"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
options = [self]
|
||||||
|
options.extend(self.main_album_collection)
|
||||||
|
options.extend(self.feature_song_collection)
|
||||||
|
return options
|
||||||
|
|
||||||
|
@property
|
||||||
|
def feature_album(self) -> Album:
|
||||||
|
return Album(
|
||||||
|
title="features",
|
||||||
|
album_status=AlbumStatus.UNRELEASED,
|
||||||
|
album_type=AlbumType.COMPILATION_ALBUM,
|
||||||
|
is_split=True,
|
||||||
|
albumsort=666,
|
||||||
|
dynamic=True,
|
||||||
|
song_list=self.feature_song_collection.shallow_list
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_all_songs(self) -> List[Song]:
|
||||||
|
"""
|
||||||
|
returns a list of all Songs.
|
||||||
|
probably not that useful, because it is unsorted
|
||||||
|
"""
|
||||||
|
collection = self.feature_song_collection.copy()
|
||||||
|
for album in self.discography:
|
||||||
|
collection.extend(album.song_collection)
|
||||||
|
|
||||||
|
return collection
|
||||||
|
|
||||||
|
@property
|
||||||
|
def discography(self) -> List[Album]:
|
||||||
|
flat_copy_discography = self.main_album_collection.copy()
|
||||||
|
flat_copy_discography.append(self.feature_album)
|
||||||
|
|
||||||
|
return flat_copy_discography
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Label
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Label(Base):
|
||||||
|
COLLECTION_STRING_ATTRIBUTES = ("album_collection", "current_artist_collection")
|
||||||
|
|
||||||
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = COLLECTION_STRING_ATTRIBUTES
|
||||||
|
|
||||||
|
name: str
|
||||||
|
unified_name: str
|
||||||
|
notes: FormattedText
|
||||||
|
|
||||||
|
source_collection: SourceCollection
|
||||||
|
contact_collection: Collection[Contact]
|
||||||
|
|
||||||
|
album_collection: Collection[Album]
|
||||||
|
current_artist_collection: Collection[Artist]
|
||||||
|
|
||||||
|
_default_factories = {
|
||||||
|
"notes": FormattedText,
|
||||||
|
"album_collection": Collection,
|
||||||
|
"current_artist_collection": Collection,
|
||||||
|
"source_collection": SourceCollection,
|
||||||
|
"contact_collection": Collection,
|
||||||
|
"name": lambda: None,
|
||||||
|
"unified_name": lambda: None,
|
||||||
|
}
|
||||||
|
|
||||||
|
TITEL = "name"
|
||||||
|
|
||||||
|
def __init__(self, name: str = None, unified_name: str = None, notes: FormattedText = None,
|
||||||
|
source_list: List[Source] = None, contact_list: List[Contact] = None,
|
||||||
|
album_list: List[Album] = None, current_artist_list: List[Artist] = None, **kwargs) -> None:
|
||||||
|
super().__init__(name=name, unified_name=unified_name, notes=notes, source_list=source_list,
|
||||||
|
contact_list=contact_list, album_list=album_list, current_artist_list=current_artist_list,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
|
return [
|
||||||
|
('id', self.id),
|
||||||
|
('name', self.unified_name),
|
||||||
|
*[('url', source.url) for source in self.source_collection]
|
||||||
|
]
|
||||||
|
|
||||||
|
def _add_other_db_objects(self, object_type: Type[OuterProxy], object_list: List[OuterProxy]):
|
||||||
|
if object_type is Song:
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Artist:
|
||||||
|
self.current_artist_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
if object_type is Album:
|
||||||
|
self.album_collection.extend(object_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def options(self) -> List[P]:
|
||||||
|
options = [self]
|
||||||
|
options.extend(self.current_artist_collection.shallow_list)
|
||||||
|
options.extend(self.album_collection.shallow_list)
|
||||||
|
|
||||||
|
return options
|
||||||
|
|
||||||
|
@property
|
||||||
|
def option_string(self):
|
||||||
|
return self.__repr__()
|
@ -1,47 +1,36 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import List, Dict, Set, Tuple, Optional
|
from typing import List, Dict, Set, Tuple, Optional, Iterable
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from ..utils.enums.source import SourcePages, SourceTypes
|
from ..utils.enums.source import SourcePages, SourceTypes
|
||||||
from ..utils.config import youtube_settings
|
from ..utils.config import youtube_settings
|
||||||
|
|
||||||
from .metadata import Mapping, Metadata
|
from .metadata import Mapping, Metadata
|
||||||
from .parents import DatabaseObject
|
from .parents import OuterProxy
|
||||||
from .collection import Collection
|
from .collection import Collection
|
||||||
|
|
||||||
|
|
||||||
class Source(DatabaseObject):
|
class Source(OuterProxy):
|
||||||
"""
|
url: str
|
||||||
create somehow like that
|
|
||||||
```python
|
page_enum: SourcePages
|
||||||
# url won't be a valid one due to it being just an example
|
referer_page: SourcePages
|
||||||
Source(src="youtube", url="https://youtu.be/dfnsdajlhkjhsd")
|
|
||||||
```
|
audio_url: str
|
||||||
"""
|
|
||||||
COLLECTION_ATTRIBUTES = tuple()
|
_default_factories = {
|
||||||
SIMPLE_ATTRIBUTES = {
|
"audio_url": lambda: None,
|
||||||
"page_enum": None,
|
|
||||||
"url": None,
|
|
||||||
"referer_page": None,
|
|
||||||
"audio_url": None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(
|
# This is automatically generated
|
||||||
self,
|
def __init__(self, page_enum: SourcePages, url: str, referer_page: SourcePages = None, audio_url: str = None,
|
||||||
page_enum: SourcePages,
|
**kwargs) -> None:
|
||||||
url: str = None,
|
|
||||||
id_: str = None,
|
|
||||||
referer_page: SourcePages = None,
|
|
||||||
adio_url: str = None
|
|
||||||
) -> None:
|
|
||||||
DatabaseObject.__init__(self, id_=id_)
|
|
||||||
|
|
||||||
self.page_enum = page_enum
|
if referer_page is None:
|
||||||
self.referer_page = page_enum if referer_page is None else referer_page
|
referer_page = page_enum
|
||||||
|
|
||||||
self.url = url
|
super().__init__(url=url, page_enum=page_enum, referer_page=referer_page, audio_url=audio_url, **kwargs)
|
||||||
self.audio_url = adio_url
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def match_url(cls, url: str, referer_page: SourcePages) -> Optional["Source"]:
|
def match_url(cls, url: str, referer_page: SourcePages) -> Optional["Source"]:
|
||||||
@ -97,6 +86,10 @@ class Source(DatabaseObject):
|
|||||||
Mapping.ARTIST_WEBPAGE_URL: [self.url]
|
Mapping.ARTIST_WEBPAGE_URL: [self.url]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def hash_url(self) -> str:
|
||||||
|
return self.url.strip().lower().lstrip("https://").lstrip("http://")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def metadata(self) -> Metadata:
|
def metadata(self) -> Metadata:
|
||||||
return self.get_song_metadata()
|
return self.get_song_metadata()
|
||||||
@ -121,15 +114,15 @@ class Source(DatabaseObject):
|
|||||||
|
|
||||||
|
|
||||||
class SourceCollection(Collection):
|
class SourceCollection(Collection):
|
||||||
def __init__(self, source_list: List[Source]):
|
def __init__(self, data: Optional[Iterable[Source]] = None, **kwargs):
|
||||||
self._page_to_source_list: Dict[SourcePages, List[Source]] = defaultdict(list)
|
self._page_to_source_list: Dict[SourcePages, List[Source]] = defaultdict(list)
|
||||||
|
|
||||||
super().__init__(data=source_list, element_type=Source)
|
super().__init__(data=data, **kwargs)
|
||||||
|
|
||||||
def map_element(self, source: Source):
|
def _map_element(self, __object: Source, **kwargs):
|
||||||
super().map_element(source)
|
super()._map_element(__object, **kwargs)
|
||||||
|
|
||||||
self._page_to_source_list[source.page_enum].append(source)
|
self._page_to_source_list[__object.page_enum].append(__object)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def source_pages(self) -> Set[SourcePages]:
|
def source_pages(self) -> Set[SourcePages]:
|
@ -1,11 +1,13 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Tuple, TextIO
|
from typing import List, Tuple, TextIO, Union
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from .parents import DatabaseObject
|
from .parents import OuterProxy
|
||||||
from ..utils.config import main_settings, logging_settings
|
from ..utils.config import main_settings, logging_settings
|
||||||
from ..utils.string_processing import fit_to_file_system
|
from ..utils.string_processing import fit_to_file_system
|
||||||
|
|
||||||
@ -13,7 +15,7 @@ from ..utils.string_processing import fit_to_file_system
|
|||||||
LOGGER = logging.getLogger("target")
|
LOGGER = logging.getLogger("target")
|
||||||
|
|
||||||
|
|
||||||
class Target(DatabaseObject):
|
class Target(OuterProxy):
|
||||||
"""
|
"""
|
||||||
create somehow like that
|
create somehow like that
|
||||||
```python
|
```python
|
||||||
@ -22,32 +24,26 @@ class Target(DatabaseObject):
|
|||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
SIMPLE_ATTRIBUTES = {
|
file_path: Path
|
||||||
"_file": None,
|
|
||||||
"_path": None
|
|
||||||
}
|
|
||||||
COLLECTION_ATTRIBUTES = tuple()
|
|
||||||
|
|
||||||
def __init__(
|
_default_factories = {
|
||||||
self,
|
}
|
||||||
file: str = None,
|
|
||||||
path: str = None,
|
# This is automatically generated
|
||||||
dynamic: bool = False,
|
def __init__(self, file_path: Union[Path, str], relative_to_music_dir: bool = False, **kwargs) -> None:
|
||||||
relative_to_music_dir: bool = False
|
if not isinstance(file_path, Path):
|
||||||
) -> None:
|
file_path = Path(file_path)
|
||||||
super().__init__(dynamic=dynamic)
|
|
||||||
self._file: Path = Path(fit_to_file_system(file))
|
if relative_to_music_dir:
|
||||||
self._path: Path = fit_to_file_system(Path(main_settings["music_directory"], path) if relative_to_music_dir else Path(path))
|
file_path = Path(main_settings["music_directory"], file_path)
|
||||||
|
|
||||||
|
super().__init__(file_path=fit_to_file_system(file_path), **kwargs)
|
||||||
|
|
||||||
self.is_relative_to_music_dir: bool = relative_to_music_dir
|
self.is_relative_to_music_dir: bool = relative_to_music_dir
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return str(self.file_path)
|
return str(self.file_path)
|
||||||
|
|
||||||
@property
|
|
||||||
def file_path(self) -> Path:
|
|
||||||
return Path(self._path, self._file)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def indexing_values(self) -> List[Tuple[str, object]]:
|
def indexing_values(self) -> List[Tuple[str, object]]:
|
||||||
return [('filepath', self.file_path)]
|
return [('filepath', self.file_path)]
|
||||||
@ -68,14 +64,14 @@ class Target(DatabaseObject):
|
|||||||
return self.file_path.stat().st_size
|
return self.file_path.stat().st_size
|
||||||
|
|
||||||
def create_path(self):
|
def create_path(self):
|
||||||
self._path.mkdir(parents=True, exist_ok=True)
|
self.file_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
def copy_content(self, copy_to: "Target"):
|
def copy_content(self, copy_to: Target):
|
||||||
if not self.exists:
|
if not self.exists:
|
||||||
LOGGER.warning(f"No file exists at: {self.file_path}")
|
LOGGER.warning(f"No file exists at: {self.file_path}")
|
||||||
return
|
return
|
||||||
|
|
||||||
with self.open("rb") as read_from:
|
with open(self.file_path, "rb") as read_from:
|
||||||
copy_to.create_path()
|
copy_to.create_path()
|
||||||
with open(copy_to.file_path, "wb") as write_to:
|
with open(copy_to.file_path, "wb") as write_to:
|
||||||
write_to.write(read_from.read())
|
write_to.write(read_from.read())
|
||||||
@ -88,7 +84,7 @@ class Target(DatabaseObject):
|
|||||||
|
|
||||||
total_size = int(r.headers.get('content-length'))
|
total_size = int(r.headers.get('content-length'))
|
||||||
|
|
||||||
with self.open('wb') as f:
|
with open(self.file_path, 'wb') as f:
|
||||||
try:
|
try:
|
||||||
"""
|
"""
|
||||||
https://en.wikipedia.org/wiki/Kilobyte
|
https://en.wikipedia.org/wiki/Kilobyte
|
@ -2,5 +2,6 @@ from .encyclopaedia_metallum import EncyclopaediaMetallum
|
|||||||
from .musify import Musify
|
from .musify import Musify
|
||||||
from .youtube import YouTube
|
from .youtube import YouTube
|
||||||
from .youtube_music import YoutubeMusic
|
from .youtube_music import YoutubeMusic
|
||||||
|
from .bandcamp import Bandcamp
|
||||||
|
|
||||||
from .abstract import Page, INDEPENDENT_DB_OBJECTS
|
from .abstract import Page, INDEPENDENT_DB_OBJECTS
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user