Chattr / src /chattr /utils.py
MH0386's picture
Upload folder using huggingface_hub
fbf421d verified
raw
history blame
2.02 kB
"""This module contains utility functions for the Chattr app."""
from logging import getLogger
from pathlib import Path
from typing import Optional
from m3u8 import M3U8, load
from pydantic import HttpUrl, ValidationError
from pydub import AudioSegment
from requests import Session
logger = getLogger(__name__)
def is_url(value: Optional[str]) -> bool:
"""
Check if a string is a valid URL.
Args:
value: The string to check. Can be None.
Returns:
bool: True if the string is a valid URL, False otherwise.
"""
if value is None:
return False
try:
HttpUrl(value)
return True
except ValidationError:
return False
def download_file(url: HttpUrl, path: Path) -> None:
"""
Download a file from a URL and save it to a local path.
Args:
url: The URL to download the file from.
path: The local file path where the downloaded file will be saved.
Returns:
None
Raises:
requests.RequestException: If the HTTP request fails.
IOError: If file writing fails.
"""
if str(url).endswith(".m3u8"):
_playlist: M3U8 = load(url)
url: str = str(url).replace("playlist.m3u8", _playlist.segments[0].uri)
print(url)
session = Session()
response = session.get(url, stream=True, timeout=30)
response.raise_for_status()
with open(path, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
def convert_audio_to_wav(input_path: Path, output_path: Path) -> None:
"""
Convert an audio file from aac to WAV format.
Args:
input_path: The path to the input aac file.
output_path: The path to the output WAV file.
Returns:
None
"""
logger.info(f"Converting {input_path} to WAV format")
audio = AudioSegment.from_file(input_path, "aac")
audio.export(output_path, "wav")
logger.info(f"Converted {input_path} to {output_path}")