ytdl-sub 2026.1.23__tar.gz → 2026.1.23.post1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/PKG-INFO +1 -1
  2. ytdl_sub-2026.1.23.post1/src/ytdl_sub/__init__.py +1 -0
  3. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/script.py +37 -23
  4. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/PKG-INFO +1 -1
  5. ytdl_sub-2026.1.23/src/ytdl_sub/__init__.py +0 -1
  6. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/LICENSE +0 -0
  7. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/README.md +0 -0
  8. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/pyproject.toml +0 -0
  9. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/setup.cfg +0 -0
  10. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/__init__.py +0 -0
  11. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/entrypoint.py +0 -0
  12. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/output_summary.py +0 -0
  13. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/output_transaction_log.py +0 -0
  14. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/parsers/__init__.py +0 -0
  15. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/parsers/cli_to_sub.py +0 -0
  16. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/parsers/dl.py +0 -0
  17. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/cli/parsers/main.py +0 -0
  18. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/__init__.py +0 -0
  19. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/config_file.py +0 -0
  20. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/config_validator.py +0 -0
  21. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/defaults.py +0 -0
  22. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/overrides.py +0 -0
  23. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/plugin/__init__.py +0 -0
  24. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/plugin/plugin.py +0 -0
  25. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/plugin/plugin_mapping.py +0 -0
  26. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/plugin/plugin_operation.py +0 -0
  27. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/plugin/preset_plugins.py +0 -0
  28. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/preset.py +0 -0
  29. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/preset_options.py +0 -0
  30. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/validators/__init__.py +0 -0
  31. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/validators/options.py +0 -0
  32. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/config/validators/variable_validation.py +0 -0
  33. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/__init__.py +0 -0
  34. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/info_json/__init__.py +0 -0
  35. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/info_json/info_json_downloader.py +0 -0
  36. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/source_plugin.py +0 -0
  37. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/url/__init__.py +0 -0
  38. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/url/downloader.py +0 -0
  39. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/url/validators.py +0 -0
  40. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/ytdl_options_builder.py +0 -0
  41. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/downloaders/ytdlp.py +0 -0
  42. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/__init__.py +0 -0
  43. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/base_entry.py +0 -0
  44. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/entry.py +0 -0
  45. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/entry_parent.py +0 -0
  46. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/script/__init__.py +0 -0
  47. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/script/custom_functions.py +0 -0
  48. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/script/function_scripts.py +0 -0
  49. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/script/variable_definitions.py +0 -0
  50. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/script/variable_types.py +0 -0
  51. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/variables/__init__.py +0 -0
  52. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/entries/variables/override_variables.py +0 -0
  53. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/main.py +0 -0
  54. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/__init__.py +0 -0
  55. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/audio_extract.py +0 -0
  56. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/chapters.py +0 -0
  57. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/date_range.py +0 -0
  58. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/embed_thumbnail.py +0 -0
  59. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/file_convert.py +0 -0
  60. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/filter_exclude.py +0 -0
  61. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/filter_include.py +0 -0
  62. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/format.py +0 -0
  63. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/internal/__init__.py +0 -0
  64. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/internal/view.py +0 -0
  65. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/match_filters.py +0 -0
  66. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/music_tags.py +0 -0
  67. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/nfo_tags.py +0 -0
  68. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/output_directory_nfo_tags.py +0 -0
  69. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/split_by_chapters.py +0 -0
  70. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/square_thumbnail.py +0 -0
  71. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/static_nfo_tags.py +0 -0
  72. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/subtitles.py +0 -0
  73. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/throttle_protection.py +0 -0
  74. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/plugins/video_tags.py +0 -0
  75. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/__init__.py +0 -0
  76. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/__init__.py +0 -0
  77. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/download_deletion_options.yaml +0 -0
  78. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/filter_duration.yaml +0 -0
  79. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/filter_keywords.yaml +0 -0
  80. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/media_quality.yaml +0 -0
  81. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/players.yaml +0 -0
  82. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/throttle_protection.yaml +0 -0
  83. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/url.yaml +0 -0
  84. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/url_bilateral.yaml +0 -0
  85. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/helpers/url_categorized.yaml +0 -0
  86. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/internal/__init__.py +0 -0
  87. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/internal/view.yaml +0 -0
  88. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music/__init__.py +0 -0
  89. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music/albums_from_chapters.yaml +0 -0
  90. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music/albums_from_playlists.yaml +0 -0
  91. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music/singles.yaml +0 -0
  92. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music/soundcloud.yaml +0 -0
  93. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music_videos/__init__.py +0 -0
  94. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music_videos/music_video_base.yaml +0 -0
  95. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music_videos/music_video_extras.yaml +0 -0
  96. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/music_videos/music_videos.yaml +0 -0
  97. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/tv_show/__init__.py +0 -0
  98. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml +0 -0
  99. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml +0 -0
  100. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_by_date.yaml +0 -0
  101. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml +0 -0
  102. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/__init__.py +0 -0
  103. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/__init__.py +0 -0
  104. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/array_functions.py +0 -0
  105. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/boolean_functions.py +0 -0
  106. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/conditional_functions.py +0 -0
  107. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/date_functions.py +0 -0
  108. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/error_functions.py +0 -0
  109. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/json_functions.py +0 -0
  110. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/map_functions.py +0 -0
  111. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/numeric_functions.py +0 -0
  112. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/print_functions.py +0 -0
  113. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/regex_functions.py +0 -0
  114. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/functions/string_functions.py +0 -0
  115. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/parser.py +0 -0
  116. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/script_output.py +0 -0
  117. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/__init__.py +0 -0
  118. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/array.py +0 -0
  119. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/function.py +0 -0
  120. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/map.py +0 -0
  121. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/resolvable.py +0 -0
  122. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/syntax_tree.py +0 -0
  123. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/variable.py +0 -0
  124. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/types/variable_dependency.py +0 -0
  125. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/utils/__init__.py +0 -0
  126. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/utils/exception_formatters.py +0 -0
  127. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/utils/exceptions.py +0 -0
  128. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/utils/name_validation.py +0 -0
  129. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/script/utils/type_checking.py +0 -0
  130. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/__init__.py +0 -0
  131. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/base_subscription.py +0 -0
  132. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/subscription.py +0 -0
  133. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/subscription_download.py +0 -0
  134. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/subscription_validators.py +0 -0
  135. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +0 -0
  136. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/thread/__init__.py +0 -0
  137. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/thread/log_entries_downloaded_listener.py +0 -0
  138. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/__init__.py +0 -0
  139. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/chapters.py +0 -0
  140. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/datetime.py +0 -0
  141. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/exceptions.py +0 -0
  142. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/ffmpeg.py +0 -0
  143. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/file_handler.py +0 -0
  144. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/file_lock.py +0 -0
  145. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/file_path.py +0 -0
  146. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/logger.py +0 -0
  147. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/retry.py +0 -0
  148. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/script.py +0 -0
  149. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/scriptable.py +0 -0
  150. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/subtitles.py +0 -0
  151. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/system.py +0 -0
  152. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/thumbnail.py +0 -0
  153. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/xml.py +0 -0
  154. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/utils/yaml.py +0 -0
  155. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/__init__.py +0 -0
  156. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/audo_codec_validator.py +0 -0
  157. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/file_path_validators.py +0 -0
  158. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/nfo_validators.py +0 -0
  159. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/regex_validator.py +0 -0
  160. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/source_variable_validator.py +0 -0
  161. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/strict_dict_validator.py +0 -0
  162. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/string_datetime.py +0 -0
  163. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/string_formatter_validators.py +0 -0
  164. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/string_select_validator.py +0 -0
  165. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/validators/validators.py +0 -0
  166. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/ytdl_additions/__init__.py +0 -0
  167. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py +0 -0
  168. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/SOURCES.txt +0 -0
  169. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/dependency_links.txt +0 -0
  170. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/entry_points.txt +0 -0
  171. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/requires.txt +0 -0
  172. {ytdl_sub-2026.1.23 → ytdl_sub-2026.1.23.post1}/src/ytdl_sub.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ytdl-sub
3
- Version: 2026.1.23
3
+ Version: 2026.1.23.post1
4
4
  Summary: Automate downloading metadata generation with YoutubeDL
5
5
  Author: Jesse Bannon
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -0,0 +1 @@
1
+ __pypi_version__ = "2026.01.23.post1";__local_version__ = "2026.01.23+264e458"
@@ -1,5 +1,6 @@
1
1
  # pylint: disable=missing-raises-doc
2
2
  import copy
3
+ from collections import defaultdict
3
4
  from typing import Dict
4
5
  from typing import List
5
6
  from typing import Optional
@@ -38,59 +39,71 @@ class Script:
38
39
  ``{ %custom_function: syntax }``
39
40
  """
40
41
 
41
- def _ensure_no_cycle(
42
+ def _throw_cycle_error(
42
43
  self, name: str, dep: str, deps: List[str], definitions: Dict[str, SyntaxTree]
43
44
  ):
44
- if dep not in definitions:
45
- return # does not exist, will throw downstream in parser
46
-
47
- if name in deps + [dep]:
48
- type_name, pre = (
49
- ("custom functions", "%") if definitions is self._functions else ("variables", "")
50
- )
51
- cycle_deps = [name] + deps + [dep]
52
- cycle_deps_str = " -> ".join([f"{pre}{name}" for name in cycle_deps])
45
+ type_name, pre = (
46
+ ("custom functions", "%") if definitions is self._functions else ("variables", "")
47
+ )
48
+ cycle_deps = [name] + deps + [dep]
49
+ cycle_deps_str = " -> ".join([f"{pre}{name}" for name in cycle_deps])
53
50
 
54
- raise CycleDetected(f"Cycle detected within these {type_name}: {cycle_deps_str}")
51
+ raise CycleDetected(f"Cycle detected within these {type_name}: {cycle_deps_str}")
55
52
 
56
53
  def _traverse_variable_dependencies(
57
54
  self,
58
55
  variable_name: str,
59
56
  variable_dependency: SyntaxTree,
60
57
  deps: List[str],
58
+ ensured: Dict[str, Set[str]],
61
59
  ) -> None:
62
60
  for dep in variable_dependency.variables:
63
- self._ensure_no_cycle(
64
- name=variable_name, dep=dep.name, deps=deps, definitions=self._variables
65
- )
61
+ if variable_name == dep.name:
62
+ self._throw_cycle_error(
63
+ name=variable_name, dep=dep.name, deps=deps, definitions=self._variables
64
+ )
65
+
66
+ if dep.name in ensured[variable_name]:
67
+ continue
68
+
66
69
  self._traverse_variable_dependencies(
67
70
  variable_name=variable_name,
68
71
  variable_dependency=self._variables[dep.name],
69
72
  deps=deps + [dep.name],
73
+ ensured=ensured,
70
74
  )
75
+ ensured[variable_name].add(dep.name)
71
76
 
72
77
  for custom_func in variable_dependency.custom_function_dependencies(
73
78
  custom_function_definitions=self._functions
74
79
  ):
75
80
  for dep in self._functions[custom_func.name].variables:
76
- self._ensure_no_cycle(
77
- name=variable_name,
78
- dep=dep.name,
79
- deps=deps + [custom_func.definition_name()],
80
- definitions=self._variables,
81
- )
81
+ if variable_name == dep.name:
82
+ self._throw_cycle_error(
83
+ name=variable_name,
84
+ dep=dep.name,
85
+ deps=deps + [custom_func.definition_name()],
86
+ definitions=self._variables,
87
+ )
88
+ if dep.name in ensured[variable_name]:
89
+ continue
90
+
82
91
  self._traverse_variable_dependencies(
83
92
  variable_name=variable_name,
84
93
  variable_dependency=self._variables[dep.name],
85
94
  deps=deps + [custom_func.definition_name(), dep.name],
95
+ ensured=ensured,
86
96
  )
97
+ ensured[variable_name].add(dep.name)
87
98
 
88
99
  def _ensure_no_variable_cycles(self, variables: Dict[str, SyntaxTree]):
100
+ ensured: Dict[str, Set[str]] = defaultdict(set)
89
101
  for variable_name, variable_definition in variables.items():
90
102
  self._traverse_variable_dependencies(
91
103
  variable_name=variable_name,
92
104
  variable_dependency=variable_definition,
93
105
  deps=[],
106
+ ensured=ensured,
94
107
  )
95
108
 
96
109
  def _traverse_custom_function_dependencies(
@@ -100,9 +113,10 @@ class Script:
100
113
  deps: List[str],
101
114
  ) -> None:
102
115
  for dep in custom_function_dependency.custom_functions:
103
- self._ensure_no_cycle(
104
- name=custom_function_name, dep=dep.name, deps=deps, definitions=self._functions
105
- )
116
+ if custom_function_name == dep.name:
117
+ self._throw_cycle_error(
118
+ name=custom_function_name, dep=dep.name, deps=deps, definitions=self._functions
119
+ )
106
120
  self._traverse_custom_function_dependencies(
107
121
  custom_function_name=custom_function_name,
108
122
  custom_function_dependency=self._functions[dep.name],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ytdl-sub
3
- Version: 2026.1.23
3
+ Version: 2026.1.23.post1
4
4
  Summary: Automate downloading metadata generation with YoutubeDL
5
5
  Author: Jesse Bannon
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1 +0,0 @@
1
- __pypi_version__ = "2026.01.23";__local_version__ = "2026.01.23+c4e112e"
File without changes