pulse-engine 0.2.12__tar.gz → 0.2.13__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.
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/PKG-INFO +1 -1
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/pyproject.toml +1 -1
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/providers/youtube_captions.py +36 -25
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/README.md +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/audio_transcription.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/batcher.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/digital_news.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/digital_news_metadata.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/exceptions.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/opensearch_storage.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/speech_content.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/speech_metadata.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/config.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/factory.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/providers/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/providers/deepgram.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/providers/openai_whisper.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/providers/selfhosted_job.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/source.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/twitter.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/youtube_downloader.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/youtube_metadata.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/api/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/api/v1/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/api/v1/auth.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/api/v1/health.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/api/v1/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/chain_recovery.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/main.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/cookiecutter.json +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/.gitignore +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/Dockerfile +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/pipeline.yaml +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/pyproject.toml +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/src/pulse_{{cookiecutter.product_slug}}/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/tests/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/tests/unit/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/pulse-{{cookiecutter.product_name}}/tests/unit/test_manifest.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/client.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/config.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/error_handlers.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/exceptions.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/job_token.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/logging.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/scope.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/core/security.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/pipeline_sync.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/repository.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/runner.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/tasks.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cron/translator.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/database.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/dependencies.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backend_deployment_repository.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/exceptions.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/native_lambda.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/prefect_ecs.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/prefect_k8s.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/registry.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/infra_provisioner.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/job_launcher.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/repository.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/adapter.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/client.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/evolution/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/adapters/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/noop.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/prefect.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/repository.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/stage_models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/stage_repository.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/main.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/__main__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/server.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/tools_jobs.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/tools_kb.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/tools_modules.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/tools_pipelines.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/mcp/tools_processor.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/middleware/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/middleware/rate_limit.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/middleware/request_id.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/middleware/security_headers.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/middleware/tenant.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/notifications/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/notifications/apprise_notifier.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/config_parser.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/expression.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/models.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/repositories.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/router_modules.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/router_pipelines.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/service.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/airflow_status.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/airflow_translator.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/prefect_status.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/prefect_translator.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/analysis.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/chunking.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/prompts.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/topic_splitter.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/core_processor.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/postprocessor.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/preprocessor.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/llm/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/llm/provider.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/ocr/gemini.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/pipeline.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/embeddings.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/tasks.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/preprocessor/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/preprocessor/tasks.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/registry.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/lambda_runner.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/pipeline_runner.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/prefect_pipeline_flow.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/prefect_runner.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/s3.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/secrets.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/services/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/services/bootstrap.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/services/opensearch.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/connectors/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/connectors/athena.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/connectors/base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/connectors/opensearch.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/knowledge_base.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/router.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/schemas.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/testing/__init__.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/testing/fixtures.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/testing/mocks.py +0 -0
- {pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/worker.py +0 -0
|
@@ -107,21 +107,45 @@ class YouTubeCaptionsProvider(TranscriptionProvider):
|
|
|
107
107
|
|
|
108
108
|
return await asyncio.to_thread(_sync)
|
|
109
109
|
|
|
110
|
-
async def
|
|
111
|
-
self, video_id: str,
|
|
112
|
-
) ->
|
|
113
|
-
"""
|
|
110
|
+
async def _fetch_subtitle_content(
|
|
111
|
+
self, video_id: str, base_opts: dict[str, Any], langs: list[str]
|
|
112
|
+
) -> tuple[str, str] | None:
|
|
113
|
+
"""Return (vtt_content, detected_lang) by extracting subtitle URLs directly.
|
|
114
|
+
|
|
115
|
+
Uses extract_info(process=True) to get signed subtitle URLs, then downloads
|
|
116
|
+
via urllib. Avoids ydl.download() which triggers format resolution and fails
|
|
117
|
+
with "Requested format is not available" on restricted format sets from
|
|
118
|
+
data-centre IPs (GCP/AWS) when using tv_embedded player client.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
def _sync() -> tuple[str, str] | None:
|
|
122
|
+
import urllib.request
|
|
114
123
|
|
|
115
|
-
def _sync() -> Path | None:
|
|
116
124
|
try:
|
|
117
125
|
import yt_dlp as _yt
|
|
118
126
|
except ImportError:
|
|
119
127
|
return None
|
|
120
128
|
url = f"https://www.youtube.com/watch?v={video_id}"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
129
|
+
# ignore_no_formats_error prevents DownloadError when tv_embedded
|
|
130
|
+
# returns a restricted format set from data-centre IPs with cookies.
|
|
131
|
+
fetch_opts = {**base_opts, "ignore_no_formats_error": True}
|
|
132
|
+
with _yt.YoutubeDL(fetch_opts) as ydl:
|
|
133
|
+
info = ydl.extract_info(url, download=False, process=True) or {}
|
|
134
|
+
for lang in langs:
|
|
135
|
+
for src in ("subtitles", "automatic_captions"):
|
|
136
|
+
entries = info.get(src, {}).get(lang, [])
|
|
137
|
+
vtt_entry = next(
|
|
138
|
+
(e for e in entries if e.get("ext") == "vtt" and e.get("url")),
|
|
139
|
+
None,
|
|
140
|
+
)
|
|
141
|
+
if not vtt_entry:
|
|
142
|
+
continue
|
|
143
|
+
req = urllib.request.Request(
|
|
144
|
+
vtt_entry["url"], headers={"User-Agent": "Mozilla/5.0"}
|
|
145
|
+
)
|
|
146
|
+
content = urllib.request.urlopen(req, timeout=30).read().decode("utf-8")
|
|
147
|
+
return content, lang
|
|
148
|
+
return None
|
|
125
149
|
|
|
126
150
|
return await asyncio.to_thread(_sync)
|
|
127
151
|
|
|
@@ -182,30 +206,17 @@ class YouTubeCaptionsProvider(TranscriptionProvider):
|
|
|
182
206
|
selected=selected,
|
|
183
207
|
)
|
|
184
208
|
|
|
185
|
-
opts = {
|
|
186
|
-
**base_opts,
|
|
187
|
-
"writesubtitles": True,
|
|
188
|
-
"writeautomaticsub": True,
|
|
189
|
-
"subtitleslangs": selected[:1],
|
|
190
|
-
"subtitlesformat": "vtt",
|
|
191
|
-
"outtmpl": str(tmp / "%(id)s"),
|
|
192
|
-
}
|
|
193
|
-
|
|
194
209
|
try:
|
|
195
|
-
|
|
210
|
+
result = await self._fetch_subtitle_content(video_id, base_opts, selected)
|
|
196
211
|
except Exception as exc:
|
|
197
212
|
raise TranscriptionUnavailable(
|
|
198
213
|
f"yt-dlp subtitle fetch failed for {video_id}: {exc}"
|
|
199
214
|
) from exc
|
|
200
215
|
|
|
201
|
-
if not
|
|
216
|
+
if not result:
|
|
202
217
|
raise TranscriptionUnavailable(f"no subtitles found for {video_id}")
|
|
203
218
|
|
|
204
|
-
|
|
205
|
-
stem = vtt_path.stem # e.g. "abc123.hi"
|
|
206
|
-
detected = stem.rsplit(".", 1)[-1] if "." in stem else language
|
|
207
|
-
|
|
208
|
-
content = vtt_path.read_text(encoding="utf-8")
|
|
219
|
+
content, detected = result
|
|
209
220
|
segments = _parse_vtt(content)
|
|
210
221
|
|
|
211
222
|
if not segments:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/audio_transcription.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/digital_news_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/config.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/service.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/adapters/transcription/source.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/cli/templates/cookiecutter.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/exceptions.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/native_lambda.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/prefect_ecs.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/prefect_k8s.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/backends/registry.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/deployment/infra_provisioner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/extractor/orchestrator/prefect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/notifications/apprise_notifier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/__init__.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/airflow_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/pipeline/translators/prefect_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/core/topic_splitter.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/core_processor.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/postprocessor.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/defaults/preprocessor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/__init__.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/embeddings.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/postprocessor/tasks.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/preprocessor/__init__.py
RENAMED
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/processor/preprocessor/tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/runners/prefect_pipeline_flow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_engine-0.2.12 → pulse_engine-0.2.13}/src/pulse_engine/storage/connectors/opensearch.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|