2 Commits

Author SHA1 Message Date
f629565e77 bump to v0.4.1
All checks were successful
git-sync-with-mirror / git-sync (push) Successful in 13s
CI / test (push) Successful in 48s
2026-03-22 21:27:50 -05:00
1f8c13adff feat: improve 429 handling with Tor support and clean CI
All checks were successful
git-sync-with-mirror / git-sync (push) Successful in 11s
CI / test (push) Successful in 50s
- Retry with new Tor identity on 429
- Improve error logging
- Remove .build.yml and .drone.yml
2026-03-22 21:25:57 -05:00
4 changed files with 10 additions and 26 deletions

View File

@@ -1,12 +0,0 @@
image: debian/buster
packages:
- python3-pip
- virtualenv
tasks:
- test: |
cd yt-local
virtualenv -p python3 venv
source venv/bin/activate
python --version
pip install -r requirements-dev.txt
pytest

View File

@@ -1,10 +0,0 @@
kind: pipeline
name: default
steps:
- name: test
image: python:3.7.3
commands:
- pip install --upgrade pip
- pip install -r requirements-dev.txt
- pytest

View File

@@ -372,10 +372,16 @@ def fetch_url(url, headers=(), timeout=15, report_text=None, data=None,
if not use_tor or not settings.route_tor:
logger.warning(f'YouTube returned 429 but Tor is not enabled. Consider enabling Tor routing.')
raise FetchError('429', reason=response.reason, ip=ip)
else:
# Tor is enabled but we've exhausted retries
logger.error(f'YouTube blocked request - Tor exit node overutilized after {max_retries} retries. Exit IP: {ip}')
raise FetchError('429', reason=response.reason, ip=ip,
error_message='Tor exit node overutilized after multiple retries')
logger.error(f'YouTube blocked request - Tor exit node overutilized. Exit IP: {ip}')
# For Tor: get new identity immediately on 429
if use_tor and settings.route_tor:
logger.info(f'YouTube blocked request - Tor exit node overutilized. Exit IP: {ip}. Getting new identity...')
# get new identity
error = tor_manager.new_identity(start_time)
if error:
raise FetchError(
@@ -384,7 +390,7 @@ def fetch_url(url, headers=(), timeout=15, report_text=None, data=None,
else:
continue # retry with new identity
# Calculate delay with exponential backoff and jitter
# For non-Tor: exponential backoff
delay = (base_delay * (2 ** attempt)) + random.uniform(0, 1)
logger.info(f'Rate limited (429). Waiting {delay:.1f}s before retry {attempt + 1}/{max_retries}...')
time.sleep(delay)

View File

@@ -1,3 +1,3 @@
from __future__ import unicode_literals
__version__ = 'v0.4.0'
__version__ = 'v0.4.1'