forked from FujiwaraChoki/MoneyPrinter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
118 lines (92 loc) · 3.4 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os
import sys
import json
import random
import logging
import zipfile
import requests
from termcolor import colored
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def clean_dir(path: str) -> None:
"""
Removes every file in a directory.
Args:
path (str): Path to directory.
Returns:
None
"""
try:
if not os.path.exists(path):
os.mkdir(path)
logger.info(f"Created directory: {path}")
for file in os.listdir(path):
file_path = os.path.join(path, file)
os.remove(file_path)
logger.info(f"Removed file: {file_path}")
logger.info(colored(f"Cleaned {path} directory", "green"))
except Exception as e:
logger.error(f"Error occurred while cleaning directory {path}: {str(e)}")
def fetch_songs(zip_url: str) -> None:
"""
Downloads songs into songs/ directory to use with geneated videos.
Args:
zip_url (str): The URL to the zip file containing the songs.
Returns:
None
"""
try:
logger.info(colored(f" => Fetching songs...", "magenta"))
files_dir = "../Songs"
if not os.path.exists(files_dir):
os.mkdir(files_dir)
logger.info(colored(f"Created directory: {files_dir}", "green"))
else:
# Skip if songs are already downloaded
return
# Download songs
response = requests.get(zip_url)
# Save the zip file
with open("../Songs/songs.zip", "wb") as file:
file.write(response.content)
# Unzip the file
with zipfile.ZipFile("../Songs/songs.zip", "r") as file:
file.extractall("../Songs")
# Remove the zip file
os.remove("../Songs/songs.zip")
logger.info(colored(" => Downloaded Songs to ../Songs.", "green"))
except Exception as e:
logger.error(colored(f"Error occurred while fetching songs: {str(e)}", "red"))
def choose_random_song() -> str:
"""
Chooses a random song from the songs/ directory.
Returns:
str: The path to the chosen song.
"""
try:
songs = os.listdir("../Songs")
song = random.choice(songs)
logger.info(colored(f"Chose song: {song}", "green"))
return f"../Songs/{song}"
except Exception as e:
logger.error(colored(f"Error occurred while choosing random song: {str(e)}", "red"))
def check_env_vars() -> None:
"""
Checks if the necessary environment variables are set.
Returns:
None
Raises:
SystemExit: If any required environment variables are missing.
"""
try:
required_vars = ["PEXELS_API_KEY", "TIKTOK_SESSION_ID", "IMAGEMAGICK_BINARY"]
missing_vars = [var + os.getenv(var) for var in required_vars if os.getenv(var) is None or (len(os.getenv(var)) == 0)]
if missing_vars:
missing_vars_str = ", ".join(missing_vars)
logger.error(colored(f"The following environment variables are missing: {missing_vars_str}", "red"))
logger.error(colored("Please consult 'EnvironmentVariables.md' for instructions on how to set them.", "yellow"))
sys.exit(1) # Aborts the program
except Exception as e:
logger.error(f"Error occurred while checking environment variables: {str(e)}")
sys.exit(1) # Aborts the program if an unexpected error occurs