feat: correct optional variable behavour

pull/861/head
CordlessCoder 2 years ago
parent b10b9a9cc5
commit 4d9ce59f24

@ -15,21 +15,21 @@ random = { optional = true, options = [
false, false,
], default = false, type = "bool", explanation = "If set to no, it will ask you a thread link to extract the thread, if yes it will randomize it. Default: 'False'", example = "True" } ], default = false, type = "bool", explanation = "If set to no, it will ask you a thread link to extract the thread, if yes it will randomize it. Default: 'False'", example = "True" }
subreddit = { optional = false, regex = "[_0-9a-zA-Z]+$", nmin = 3, nmax = 21, explanation = "what subreddit to pull posts from, the name of the sub, not the URL", example = "AskReddit", oob_error = "A subreddit name HAS to be between 3 and 20 characters" } subreddit = { optional = false, regex = "[_0-9a-zA-Z]+$", nmin = 3, nmax = 21, explanation = "what subreddit to pull posts from, the name of the sub, not the URL", example = "AskReddit", oob_error = "A subreddit name HAS to be between 3 and 20 characters" }
post_id = { optional = false, regex = "^((?!://|://).)*$", explanation = "Used if you want to use a specific post.", example = "urdtfx" } post_id = { optional = true, regex = "^((?!://|://).)*$", explanation = "Used if you want to use a specific post.", example = "urdtfx" }
max_comment_length = { default = 500, optional = false, nmin = 10, nmax = 10000, type = "int", explanation = "max number of characters a comment can have. default is 500", example = 500, oob_error = "the max comment length should be between 10 and 10000" } max_comment_length = { default = 500, optional = false, nmin = 10, nmax = 10000, type = "int", explanation = "max number of characters a comment can have. default is 500", example = 500, oob_error = "the max comment length should be between 10 and 10000" }
[settings] [settings]
allow_nsfw = { optional = true, type = "bool", default = false, example = false, options = [ allow_nsfw = { optional = false, type = "bool", default = false, example = false, options = [
true, true,
false, false,
], explanation = "Whether to allow NSFW content, True or False" } ], explanation = "Whether to allow NSFW content, True or False" }
theme = { optional = true, default = "light", example = "dark", options = [ theme = { optional = false, default = "light", example = "dark", options = [
"dark", "dark",
"light", "light",
], explanation = "sets the Reddit theme, either LIGHT or DARK" } ], explanation = "sets the Reddit theme, either LIGHT or DARK" }
times_to_run = { optional = true, default = 1, example = 2, explanation = "used if you want to run multiple times. set to an int e.g. 4 or 29 or 1", type = "int", nmin = 1, oob_error = "It's very hard to run something less than once." } times_to_run = { optional = false, default = 1, example = 2, explanation = "used if you want to run multiple times. set to an int e.g. 4 or 29 or 1", type = "int", nmin = 1, oob_error = "It's very hard to run something less than once." }
opacity = { optional = true, default = 0.9, example = 0.8, explanation = "Sets the opacity of the comments when overlayed over the background", type = "float", nmin = 0, nmax = 1, oob_error = "The opacity HAS to be between 0 and 1", input_error = "The opacity HAS to be a decimal number between 0 and 1" } opacity = { optional = false, default = 0.9, example = 0.8, explanation = "Sets the opacity of the comments when overlayed over the background", type = "float", nmin = 0, nmax = 1, oob_error = "The opacity HAS to be between 0 and 1", input_error = "The opacity HAS to be a decimal number between 0 and 1" }
storymode = { optional = true, type = "bool", default = false, example = false, options = [ storymode = { optional = true, type = "bool", default = false, example = false, options = [
true, true,
false, false,

@ -1,86 +0,0 @@
REDDIT_CLIENT_ID="" #fFAGRNJru1FTz70BzhT3Zg
#EXPLANATION the ID of your Reddit app of SCRIPT type
#RANGE 12:30
#MATCH_REGEX [-a-zA-Z0-9._~+/]+=*$
#OOB_ERROR The ID should be over 12 and under 30 characters, double check your input.
REDDIT_CLIENT_SECRET="" #fFAGRNJru1FTz70BzhT3Zg
#EXPLANATION the SECRET of your Reddit app of SCRIPT type
#RANGE 20:40
#MATCH_REGEX [-a-zA-Z0-9._~+/]+=*$
#OOB_ERROR The secret should be over 20 and under 40 characters, double check your input.
REDDIT_USERNAME="" #asdfghjkl
#EXPLANATION the username of your reddit account
#RANGE 3:20
#MATCH_REGEX [-_0-9a-zA-Z]+$
#OOB_ERROR A username HAS to be between 3 and 20 characters
REDDIT_PASSWORD="" #fFAGRNJru1FTz70BzhT3Zg
#EXPLANATION the password of your reddit account
#RANGE 8:None
#OOB_ERROR Password too short
#OPTIONAL
RANDOM_THREAD="no"
# If set to no, it will ask you a thread link to extract the thread, if yes it will randomize it. Default: "no"
REDDIT_2FA="" #no
#MATCH_REGEX ^(yes|no)
#EXPLANATION Whether you have Reddit 2FA enabled, Valid options are "yes" and "no"
SUBREDDIT="AskReddit"
#EXPLANATION what subreddit to pull posts from, the name of the sub, not the URL
#RANGE 3:20
#MATCH_REGEX [_0-9a-zA-Z]+$
#OOB_ERROR A subreddit name HAS to be between 3 and 20 characters
ALLOW_NSFW="False"
#EXPLANATION Whether to allow NSFW content, True or False
#MATCH_REGEX ^(True|False)$
POST_ID=""
#MATCH_REGEX ^((?!://|://).)*$
#EXPLANATION Used if you want to use a specific post. example of one is urdtfx
THEME="LIGHT" #dark
#EXPLANATION sets the Reddit theme, either LIGHT or DARK
#MATCH_REGEX ^(dark|light|DARK|LIGHT)$
TIMES_TO_RUN="" #2
#EXPLANATION used if you want to run multiple times. set to an int e.g. 4 or 29 and leave blank for 1
MAX_COMMENT_LENGTH="500" #500
#EXPLANATION max number of characters a comment can have. default is 500
#RANGE 0:10000
#MATCH_TYPE int
#OOB_ERROR the max comment length should be between 0 and 10000
OPACITY="1" #.8
#EXPLANATION Sets the opacity of the comments when overlayed over the background
#RANGE 0:1
#MATCH_TYPE float
#OOB_ERROR The opacity HAS to be between 0 and 1
# If you want to translate the comments to another language, set the language code here.
# If empty, no translation will be done.
POSTLANG=""
#EXPLANATION Activates the translation feature, set the language code for translate or leave blank
TTSCHOICE="Polly"
#EXPLANATION the backend used for TTS. Without anything specified, the user will be prompted to choose one.
# IMPORTANT NOTE: if you use translate, you need to set this to googletranslate or tiktok and use custom voice in your language
STREAMLABS_VOICE="Joanna"
#EXPLANATION Sets the voice for the Streamlabs Polly TTS Engine. Check the file for more information on different voices.
AWS_VOICE="Joanna"
#EXPLANATION Sets the voice for the AWS Polly TTS Engine. Check the file for more information on different voices.
TIKTOK_VOICE="en_us_006"
#EXPLANATION Sets the voice for the TikTok TTS Engine. Check the file for more information on different voices.
#OPTIONAL
STORYMODE="False"
# IN-PROGRESS - not yet implemented

@ -5,7 +5,7 @@ from os import name
from reddit.subreddit import get_subreddit_threads from reddit.subreddit import get_subreddit_threads
from utils.cleanup import cleanup from utils.cleanup import cleanup
from utils.console import print_markdown, print_step from utils.console import print_markdown, print_step
from utils.tomlchecker import check_toml from utils.settings import check_toml
# from utils.checker import envUpdate # from utils.checker import envUpdate
from video_creation.background import download_background, chop_background_video from video_creation.background import download_background, chop_background_video

@ -46,7 +46,12 @@ def handle_input(
extra_info="", extra_info="",
options: list = None, options: list = None,
default=NotImplemented, default=NotImplemented,
optional=False,
): ):
if optional:
console.print(message + "\n[green]This is an optional value. Do you want to skip it? (y/n)")
if input().casefold().startswith("y"):
return None
if default is not NotImplemented: if default is not NotImplemented:
console.print( console.print(
"[green]" "[green]"

@ -1,7 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# import os # import os
import toml import toml
from rich import pretty
from rich.console import Console from rich.console import Console
import re import re
@ -25,6 +24,8 @@ def check(value, checks, name):
incorrect = False incorrect = False
if value == {}: if value == {}:
if skip_opt and "optional" in checks and checks["optional"] is True:
return None
incorrect = True incorrect = True
if not incorrect and "type" in checks: if not incorrect and "type" in checks:
try: try:
@ -88,6 +89,7 @@ def check(value, checks, name):
if "oob_error" in checks if "oob_error" in checks
else "Input out of bounds(Value too high/low/long/short)", else "Input out of bounds(Value too high/low/long/short)",
options=checks["options"] if "options" in checks else None, options=checks["options"] if "options" in checks else None,
optional=checks["optional"] if "optional" in checks else False,
) )
return value return value
@ -103,10 +105,13 @@ def crawl_and_check(obj: dict, path: list, checks: dict = {}, name=""):
def check_vars(path, checks): def check_vars(path, checks):
global config global config
global skip_opt
skip_opt = "skip_opt" in config
crawl_and_check(config, path, checks) crawl_and_check(config, path, checks)
def check_toml(template_file, config_file) -> bool: def check_toml(template_file, config_file) -> (bool, dict):
global config
try: try:
template = toml.load(template_file) template = toml.load(template_file)
except Exception as error: except Exception as error:
@ -115,7 +120,6 @@ def check_toml(template_file, config_file) -> bool:
) )
return False return False
try: try:
global config
config = toml.load(config_file) config = toml.load(config_file)
except (toml.TomlDecodeError): except (toml.TomlDecodeError):
console.print( console.print(
@ -160,7 +164,7 @@ If you see any prompts, that means that you have unset/incorrectly set variables
""" """
) )
crawl(template, check_vars) crawl(template, check_vars)
# pretty.pprint(config) config["skip_opt"] = True
with open(config_file, "w") as f: with open(config_file, "w") as f:
toml.dump(config, f) toml.dump(config, f)
return config return config
@ -168,3 +172,7 @@ If you see any prompts, that means that you have unset/incorrectly set variables
if __name__ == "__main__": if __name__ == "__main__":
check_toml(".config.template.toml", "config.toml") check_toml(".config.template.toml", "config.toml")
if __name__ == "__main__":
check_toml(".config.template.toml", "config.toml")
check_toml(".config.template.toml", "config.toml")
Loading…
Cancel
Save