Add getenv to common.utils

This commit is contained in:
tcely 2025-03-09 09:34:36 -04:00 committed by GitHub
parent 3c94e5a0b3
commit c2653b76a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,3 +1,4 @@
import os
import string
from datetime import datetime
from urllib.parse import urlunsplit, urlencode, urlparse
@ -6,6 +7,44 @@ from yt_dlp.utils import LazyList
from .errors import DatabaseConnectionError
def getenv(key, default=None, /, *, integer=False, string=True):
'''
Guarantees a returned type from calling `os.getenv`
The caller can request the integer type,
or use the default string type.
'''
args = dict(key=key, default=default, integer=integer, string=string)
supported_types = dict(zip(args.keys(), (
(str,), # key
(
bool,
float,
int,
str,
None.__class__,
), # default
(bool,) * (len(args.keys()) - 2),
)))
unsupported_type_msg = 'Unsupported type for positional argument, "{}": {}'
for k, t in supported_types.items():
v = args[k]
assert isinstance(v, t), unsupported_type_msg.format(k, type(v))
d = str(default) if default is not None else None
# just in case `os` wasn't already imported
import os
r = os.getenv(key, d)
if r is None:
if string: r = str()
if integer: r = int()
elif integer:
r = int(float(r))
return r
def parse_database_connection_string(database_connection_string):
'''
Parses a connection string in a URL style format, such as: