From 07275f900dbbac9c1a5f6eb18b8e18f1955355da Mon Sep 17 00:00:00 2001 From: electro199 <109358640+electro199@users.noreply.github.com> Date: Fri, 6 Jun 2025 21:11:21 +0500 Subject: [PATCH] Delete test.py --- test.py | 508 -------------------------------------------------------- 1 file changed, 508 deletions(-) delete mode 100644 test.py diff --git a/test.py b/test.py deleted file mode 100644 index 4c3b517..0000000 --- a/test.py +++ /dev/null @@ -1,508 +0,0 @@ -# from typing import Annotated, Literal, Optional -# from pydantic import BaseModel, Field, StringConstraints - - -# class RedditCreds(BaseModel): -# client_id: Annotated[ -# str, -# StringConstraints( -# min_length=12, max_length=30, pattern=r"^[-a-zA-Z0-9._~+/]+=*$" -# ), -# ] = Field(..., description="The ID of your Reddit app of SCRIPT type") - -# client_secret: Annotated[ -# str, -# StringConstraints( -# min_length=20, max_length=40, pattern=r"^[-a-zA-Z0-9._~+/]+=*$" -# ), -# ] = Field(..., description="The SECRET of your Reddit app of SCRIPT type") - -# username: Annotated[ -# str, StringConstraints(min_length=3, max_length=20, pattern=r"^[-_0-9a-zA-Z]+$") -# ] = Field(..., description="The username of your Reddit account") - -# password: Annotated[str, StringConstraints(min_length=8)] = Field( -# ..., description="The password of your Reddit account" -# ) - -# twofa: Optional[bool] = Field(False, description="Whether Reddit 2FA is enabled") - - -# class RedditThread(BaseModel): -# random: Optional[bool] = Field( -# False, description="If true, picks a random thread instead of asking for URL" -# ) - -# subreddit: Annotated[ -# str, StringConstraints(min_length=3, max_length=20, pattern=r"[_0-9a-zA-Z\+]+$") -# ] = Field(..., description="Name(s) of subreddit(s), '+' separated") - -# post_id: Annotated[Optional[str], StringConstraints(pattern=r"^[+a-zA-Z0-9]*$")] = ( -# Field("", description="Specify a Reddit post ID if desired") -# ) - -# max_comment_length: Annotated[int, Field(ge=10, le=10000)] = Field( -# 500, description="Max number of characters per comment" -# ) - -# min_comment_length: Annotated[int, Field(ge=0, le=10000)] = Field( -# 1, description="Min number of characters per comment" -# ) - -# post_lang: Optional[str] = Field( -# "", description="Target language code for translation (e.g., 'es-cr')" -# ) - -# min_comments: Annotated[int, Field(ge=10)] = Field( -# 20, description="Minimum number of comments required" -# ) - - -# class RedditThreadExtras(BaseModel): -# min_comments: Annotated[ -# int, -# Field( -# default=20, -# ge=10, -# le=999999, -# description="The minimum number of comments a post should have to be included. Default is 20.", -# examples=[29], -# ), -# ] - - -# class AIConfig(BaseModel): -# ai_similarity_enabled: Annotated[ -# bool, -# Field( -# default=False, -# description="Threads read from Reddit are sorted based on their similarity to the keywords given below.", -# ), -# ] -# ai_similarity_keywords: Annotated[ -# str, -# Field( -# default="", -# description="Every keyword or sentence, separated by commas, is used to sort Reddit threads based on similarity.", -# examples=["Elon Musk, Twitter, Stocks"], -# ), -# ] - - -# class SettingsTTS(BaseModel): -# voice_choice: Annotated[ -# Literal[ -# "elevenlabs", -# "streamlabspolly", -# "tiktok", -# "googletranslate", -# "awspolly", -# "pyttsx", -# ], -# Field( -# default="tiktok", -# description="The voice platform used for TTS generation.", -# examples=["tiktok"], -# ), -# ] -# random_voice: Annotated[ -# bool, -# Field( -# default=True, -# description="Randomizes the voice used for each comment.", -# examples=[True], -# ), -# ] -# elevenlabs_voice_name: Annotated[ -# Literal[ -# "Adam", "Antoni", "Arnold", "Bella", "Domi", "Elli", "Josh", "Rachel", "Sam" -# ], -# Field( -# default="Bella", -# description="The voice used for ElevenLabs.", -# examples=["Bella"], -# ), -# ] -# elevenlabs_api_key: Annotated[ -# str, -# Field( -# default="", -# description="ElevenLabs API key.", -# examples=["21f13f91f54d741e2ae27d2ab1b99d59"], -# ), -# ] -# aws_polly_voice: Annotated[ -# str, -# Field( -# default="Matthew", -# description="The voice used for AWS Polly.", -# examples=["Matthew"], -# ), -# ] -# streamlabs_polly_voice: Annotated[ -# str, -# Field( -# default="Matthew", -# description="The voice used for Streamlabs Polly.", -# examples=["Matthew"], -# ), -# ] -# tiktok_voice: Annotated[ -# str, -# Field( -# default="en_us_001", -# description="The voice used for TikTok TTS.", -# examples=["en_us_006"], -# ), -# ] -# tiktok_sessionid: Annotated[ -# str, -# Field( -# default="", -# description="TikTok sessionid needed for TikTok TTS.", -# examples=["c76bcc3a7625abcc27b508c7db457ff1"], -# ), -# ] -# python_voice: Annotated[ -# str, -# Field( -# default="1", -# description="The index of the system TTS voices (starts from 0).", -# examples=["1"], -# ), -# ] -# py_voice_num: Annotated[ -# str, -# Field( -# default="2", -# description="The number of system voices available.", -# examples=["2"], -# ), -# ] -# silence_duration: Annotated[ -# float, -# Field( -# default=0.3, -# description="Time in seconds between TTS comments.", -# examples=["0.1"], -# ), -# ] -# no_emojis: Annotated[ -# bool, -# Field( -# default=False, -# description="Whether to remove emojis from the comments.", -# examples=[False], -# ), -# ] -# openai_api_url: Annotated[ -# str, -# Field( -# default="https://api.openai.com/v1/", -# description="The API endpoint URL for OpenAI TTS generation.", -# examples=["https://api.openai.com/v1/"], -# ), -# ] -# openai_api_key: Annotated[ -# str, -# Field( -# default="", -# description="Your OpenAI API key for TTS generation.", -# examples=["sk-abc123def456..."], -# ), -# ] -# openai_voice_name: Annotated[ -# Literal[ -# "alloy", "ash", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer" -# ], -# Field( -# default="alloy", -# description="The voice used for OpenAI TTS generation.", -# examples=["alloy"], -# ), -# ] -# openai_model: Annotated[ -# Literal["tts-1", "tts-1-hd"], -# Field( -# default="tts-1", -# description="The model variant used for OpenAI TTS generation.", -# examples=["tts-1"], -# ), -# ] - - -# class SettingsBackground(BaseModel): -# background_video: Annotated[ -# str, -# Field( -# default="minecraft", -# description="Sets the background for the video based on game name", -# examples=["rocket-league"], -# ), -# StringConstraints(strip_whitespace=True), -# ] = "minecraft" - -# background_audio: Annotated[ -# str, -# Field( -# default="lofi", -# description="Sets the background audio for the video", -# examples=["chill-summer"], -# ), -# StringConstraints(strip_whitespace=True), -# ] = "lofi" - -# background_audio_volume: Annotated[ -# float, -# Field( -# default=0.15, -# ge=0, -# le=1, -# description="Sets the volume of the background audio. If you don't want background audio, set it to 0.", -# examples=[0.05], -# ), -# ] = 0.15 - -# enable_extra_audio: Annotated[ -# bool, -# Field( -# default=False, -# description="Used if you want to render another video without background audio in a separate folder", -# ), -# ] = False - -# background_thumbnail: Annotated[ -# bool, -# Field( -# default=False, -# description="Generate a thumbnail for the video (put a thumbnail.png file in the assets/backgrounds directory.)", -# ), -# ] = False - -# background_thumbnail_font_family: Annotated[ -# str, -# Field( -# default="arial", -# description="Font family for the thumbnail text", -# examples=["arial"], -# ), -# ] = "arial" - -# background_thumbnail_font_size: Annotated[ -# int, -# Field( -# default=96, -# description="Font size in pixels for the thumbnail text", -# examples=[96], -# ), -# ] = 96 - -# background_thumbnail_font_color: Annotated[ -# str, -# Field( -# default="255,255,255", -# description="Font color in RGB format for the thumbnail text", -# examples=["255,255,255"], -# ), -# ] = "255,255,255" - - -# class Settings(BaseModel): -# allow_nsfw: Annotated[ -# bool, -# Field( -# default=False, -# description="Whether to allow NSFW content. True or False.", -# examples=[False], -# ), -# ] -# theme: Annotated[ -# Literal["dark", "light", "transparent"], -# Field( -# default="dark", -# description="Sets the Reddit theme. For story mode, 'transparent' is also allowed.", -# examples=["light"], -# ), -# ] -# times_to_run: Annotated[ -# int, -# Field( -# default=1, -# ge=1, -# description="Used if you want to run multiple times. Must be an int >= 1.", -# examples=[2], -# ), -# ] -# opacity: Annotated[ -# float, -# Field( -# default=0.9, -# ge=0.0, -# le=1.0, -# description="Sets the opacity of comments when overlaid over the background.", -# examples=[0.8], -# ), -# ] -# storymode: Annotated[ -# bool, -# Field( -# default=False, -# description="Only read out title and post content. Great for story-based subreddits.", -# examples=[False], -# ), -# ] -# storymodemethod: Annotated[ -# Literal[0, 1], -# Field( -# default=1, -# description="Style used for story mode: 0 = static image, 1 = fancy video.", -# examples=[1], -# ), -# ] -# storymode_max_length: Annotated[ -# int, -# Field( -# default=1000, -# ge=1, -# description="Max length (in characters) of the story mode video.", -# examples=[1000], -# ), -# ] -# resolution_w: Annotated[ -# int, -# Field( -# default=1080, -# description="Sets the width in pixels of the final video.", -# examples=[1440], -# ), -# ] -# resolution_h: Annotated[ -# int, -# Field( -# default=1920, -# description="Sets the height in pixels of the final video.", -# examples=[2560], -# ), -# ] -# zoom: Annotated[ -# float, -# Field( -# default=1.0, -# ge=0.1, -# le=2.0, -# description="Sets the browser zoom level. Useful for making text larger.", -# examples=[1.1], -# ), -# ] -# channel_name: Annotated[ -# str, -# Field( -# default="Reddit Tales", -# description="Sets the channel name for the video.", -# examples=["Reddit Stories"], -# ), -# ] -# tts: SettingsTTS -# background: SettingsBackground - - -# class Reddit(BaseModel): -# creds: RedditCreds -# thread: RedditThread - - -# class Config(BaseModel): -# reddit: Reddit -# ai: AIConfig -# settings: Settings - - -# # from pydantic import ValidationError -# # import toml - -# # try: -# # with open("config.toml") as f: -# # t = toml.load(f) - -# # c = Config(**t) -# # print(c.model_dump()) - -# # except ValidationError as e: -# # print(e.json(indent=2)) - -# from typing import get_args, get_origin -# from pydantic import BaseModel, Field, ValidationError -# from pydantic.fields import FieldInfo -# import sys -# from pydantic_core import PydanticUndefined - -# def prompt_recursive(model_class: type[BaseModel], prefix="") -> BaseModel: -# obj = model_class.model_construct() -# for field_name, field in model_class.model_fields.items(): -# value = getattr(obj, field_name, PydanticUndefined) -# if isinstance(field.annotation, type) and issubclass(field.annotation, BaseModel): -# # Recurse into nested model -# # print(f"\n[{prefix + field_name}]") -# nested = prompt_recursive(field.annotation, prefix=prefix + field_name + ".") -# setattr(obj, field_name, nested) -# continue - -# if value is not PydanticUndefined and value is not None: -# continue # Already has a value - -# # Print the description -# description = field.description or "" -# default_str = f" (✨ default: {field.default})" if field.default is not PydanticUndefined else "" -# prompt = f"🧩 {field_name}: \n{description}{default_str}\n> " - -# while True: -# raw_input = input(prompt).strip() -# if raw_input == "" and field.default is not PydanticUndefined: -# value_to_assign = field.default -# else: -# try: -# # Try parsing based on field type -# value_to_assign = parse_value(raw_input, field.annotation) -# except Exception as e: -# print(f"⚠️ Invalid input: {e}") -# continue - -# try: -# # Validate single field using Pydantic's validator -# model_class.__pydantic_validator__.validate_assignment(obj, field_name, value_to_assign) -# setattr(obj, field_name, value_to_assign) -# break -# except ValidationError as ve: -# for err in ve.errors(): -# print(f"❌ {err['loc'][0]}: {err['msg']}") -# return obj - -# def parse_value(raw: str, expected_type: type): -# origin = get_origin(expected_type) -# args = get_args(expected_type) - -# if expected_type == bool: -# if raw.lower() in ["true", "yes", "1"]: -# return True -# elif raw.lower() in ["false", "no", "0"]: -# return False -# else: -# raise ValueError("Expected true/false") -# elif expected_type == int: -# return int(raw) -# elif expected_type == float: -# return float(raw) -# elif expected_type == str: -# return raw -# elif origin is list and args: -# return [parse_value(v.strip(), args[0]) for v in raw.split(",")] -# else: -# raise ValueError(f"Unsupported type: {expected_type}") - -# background_config = prompt_recursive(Config) -# print(background_config) - -from utils.settings import get_config - - -print(get_config()) \ No newline at end of file