logger.debug("text[]='%s'", type(text))
if not isinstance(text, str):
- logger.debug("text[]='%s' is not 'str' - SKIPPED!", type(text))
+ logger.debug("text[]='%s' is not of type 'str' - SKIPPED!", type(text))
continue
elif validators.domain(text.strip()):
logger.debug("text='%s' is a domain - SKIPPED!", text.strip())
domain_helper.raise_on(domain)
if not isinstance(headers, dict):
- raise ValueError(f"Parameter headers[]='{type(headers)}' is not 'dict'")
+ raise ValueError(f"Parameter headers[]='{type(headers)}' is not of type 'dict'")
# Default headers with no CSRF
reqheaders = headers
def set_all(key: str, rows: list, value: any):
logger.debug("key='%s',rows()=%d,value[]='%s' - CALLED!", key, len(rows), type(value))
if not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif not key_exists(key):
logger.debug("Cache for key='%s' not initialized.", key)
_cache[key] = dict()
def set_sub_key(key: str, sub: str, value: any):
logger.debug("key='%s',sub='%s',value[]='%s' - CALLED!", key, sub, type(value))
if not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif not isinstance(sub, str):
- raise ValueError(f"Parameter sub[]='{type(sub)}' is not 'str'")
+ raise ValueError(f"Parameter sub[]='{type(sub)}' is not of type 'str'")
elif not key_exists(key):
raise Exception(f"Cache for key='{key}' is not initialized, but function invoked")
def sub_key_exists(key: str, sub: str) -> bool:
logger.debug("key='%s',sub='%s' - CALLED!", key, sub)
if not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif not isinstance(sub, str):
- raise ValueError(f"Parameter sub[]='{type(sub)}' is not 'str'")
+ raise ValueError(f"Parameter sub[]='{type(sub)}' is not of type 'str'")
elif not key_exists(key):
raise Exception(f"Cache for key='{key}' is not initialized, but function invoked")
def get(key: str) -> any:
logger.debug("key[%s]='%s' - CALLED!", type(key), key)
if not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif key == "":
raise ValueError("Parameter 'key' is empty")
elif not key in _config:
logger.debug("domain='%s',cookies()=%d - CALLED!", domain, len(cookies))
domain_helper.raise_on(domain)
if not isinstance(cookies, dict):
- raise ValueError(f"Parameter cookies[]='{type(cookies)}' is not 'dict'")
+ raise ValueError(f"Parameter cookies[]='{type(cookies)}' is not of type 'dict'")
_cookies[domain] = cookies
def has_key(lists: list, key: str, value: any) -> bool:
logger.debug("lists()=%d,key='%s',value[]='%s' - CALLED!", len(lists), key, type(value))
if not isinstance(lists, list):
- raise ValueError(f"Parameter lists[]='{type(lists)}' is not 'list'")
+ raise ValueError(f"Parameter lists[]='{type(lists)}' is not of type 'list'")
elif not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif key == "":
raise ValueError("Parameter 'key' is empty")
for row in lists:
logger.debug("row[%s]='%s", type(row), row)
if not isinstance(row, dict):
- raise ValueError(f"row[]='{type(row)}' is not 'dict'")
+ raise ValueError(f"row[]='{type(row)}' is not of type 'dict'")
elif not key in row:
raise KeyError(f"Cannot find key='{key}'")
elif row[key] == value:
def raise_on(domain: str):
logger.debug("domain='%s' - CALLED!", domain)
if not isinstance(domain, str):
- raise ValueError(f"Parameter domain[]='{type(domain)}' is not 'str'")
+ raise ValueError(f"Parameter domain[]='{type(domain)}' is not of type 'str'")
elif domain == "":
raise ValueError("Parameter 'domain' is empty")
elif domain.lower() != domain:
raise_on(domain)
if not isinstance(url, str):
- raise ValueError(f"Parameter url[]='%s' is not 'str'", type(url))
+ raise ValueError(f"Parameter url[]='%s' is not of type 'str'", type(url))
elif url == "":
raise ValueError("Parameter 'url' is empty")
def reason(string: str) -> str:
logger.debug("string='%s' - CALLED!", string)
if not isinstance(string, str):
- raise ValueError(f"Parameter string[]='{type(string)}' is not 'str'")
+ raise ValueError(f"Parameter string[]='{type(string)}' is not of type 'str'")
# Strip string
string = string.strip()
def domain(string: str) -> str:
logger.debug("string='%s' - CALLED!", string)
if not isinstance(string, str):
- raise ValueError(f"Parameter string[]='{type(string)}' is not 'str'")
+ raise ValueError(f"Parameter string[]='{type(string)}' is not of type 'str'")
# All lower-case and strip spaces out + last dot
string = string.lower().strip().rstrip(".")
def strip_powered_by(software: str) -> str:
logger.debug("software='%s' - CALLED!", software)
if not isinstance(software, str):
- raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'")
elif software == "":
raise ValueError("Parameter 'software' is empty")
elif "powered by" not in software:
def strip_hosted_on(software: str) -> str:
logger.debug("software='%s' - CALLED!", software)
if not isinstance(software, str):
- raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'")
elif software == "":
raise ValueError("Parameter 'software' is empty")
elif "hosted on" not in software:
def strip_until(software: str, until: str) -> str:
logger.debug("software='%s',until='%s' - CALLED!", software, until)
if not isinstance(software, str):
- raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'")
elif software == "":
raise ValueError("Parameter 'software' is empty")
elif not isinstance(until, str):
- raise ValueError(f"Parameter until[]='{type(until)}' is not 'str'")
+ raise ValueError(f"Parameter until[]='{type(until)}' is not of type 'str'")
elif until == "":
raise ValueError("Parameter 'until' is empty")
elif not until in software:
domain_helper.raise_on(domain)
if not isinstance(origin, str) and origin is not None:
- raise ValueError(f"Parameter origin[]='{type(origin)}' is not 'str'")
+ raise ValueError(f"Parameter origin[]='{type(origin)}' is not of type 'str'")
elif not isinstance(command, str):
- raise ValueError(f"Parameter command[]='{type(command)}' is not 'str'")
+ raise ValueError(f"Parameter command[]='{type(command)}' is not of type 'str'")
elif command == "":
raise ValueError("Parameter 'command' is empty")
elif software is None:
logger.debug("Determined software='%s' for domain='%s'", software, domain)
elif not isinstance(software, str):
- raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'")
logger.debug("Checking if domain='%s' is registered ...", domain)
if not instances.is_registered(domain):
domain_helper.raise_on(domain)
if not isinstance(software, str) and software is not None:
- raise ValueError(f"software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"software[]='{type(software)}' is not of type 'str'")
if software == "misskey":
logger.debug("Invoking misskey.fetch_peers(%s) ...", domain)
break
if not isinstance(peers, list):
- logger.warning("peers[]='%s' is not 'list', maybe bad API response?", type(peers))
+ logger.warning("peers[]='%s' is not of type 'list', maybe bad API response?", type(peers))
peers = list()
logger.debug("Invoking instances.set_total_peers(%s,%d) ...", domain, len(peers))
domain_helper.raise_on(domain)
if not isinstance(path, str) and path is not None:
- raise ValueError(f"Parameter path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"Parameter path[]='{type(path)}' is not of type 'str'")
logger.debug("Fetching nodeinfo from domain='%s' ...", domain)
nodeinfo = fetch_wellknown_nodeinfo(domain)
for link in nodeinfo["links"]:
logger.debug("link[%s]='%s'", type(link), link)
if not isinstance(link, dict) or not "rel" in link:
- logger.debug("link[]='%s' is not 'dict' or no element 'rel' found - SKIPPED!", type(link))
+ logger.debug("link[]='%s' is not of type 'dict' or no element 'rel' found - SKIPPED!", type(link))
continue
elif link["rel"] != niid:
logger.debug("link[re]='%s' does not matched niid='%s' - SKIPPED!", link["rel"], niid)
domain_helper.raise_on(domain)
if not isinstance(path, str):
- raise ValueError(f"path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"path[]='{type(path)}' is not of type 'str'")
elif path == "":
raise ValueError("Parameter 'path' is empty")
domain_helper.raise_on(domain)
if not isinstance(path, str) and path is not None:
- raise ValueError(f"Parameter path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"Parameter path[]='{type(path)}' is not of type 'str'")
logger.debug("Determining software for domain='%s',path='%s'", domain, path)
software = None
def add_peers(rows: dict) -> list:
logger.debug("rows[]='%s' - CALLED!", type(rows))
if not isinstance(rows, dict):
- raise ValueError(f"Parameter rows[]='{type(rows)}' is not 'dict'")
+ raise ValueError(f"Parameter rows[]='{type(rows)}' is not of type 'dict'")
peers = list()
for key in ["linked", "allowed", "blocked"]:
domain_helper.raise_on(domain)
if not isinstance(path, str):
- raise ValueError(f"path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"path[]='{type(path)}' is not of type 'str'")
elif path == "":
raise ValueError("Parameter 'path' is empty")
elif not isinstance(data, str):
- raise ValueError(f"data[]='{type(data)}' is not 'str'")
+ raise ValueError(f"data[]='{type(data)}' is not of type 'str'")
elif not isinstance(headers, dict):
- raise ValueError(f"headers[]='{type(headers)}' is not 'list'")
+ raise ValueError(f"headers[]='{type(headers)}' is not of type 'list'")
json_reply = {
"status_code": 200,
def fetch_api_url(url: str, timeout: tuple) -> dict:
logger.debug("url='%s',timeout()=%d - CALLED!", url, len(timeout))
if not isinstance(url, str):
- raise ValueError(f"Parameter url[]='{type(url)}' is not 'str'")
+ raise ValueError(f"Parameter url[]='{type(url)}' is not of type 'str'")
elif url == "":
raise ValueError("Parameter 'url' is empty")
elif not isinstance(timeout, tuple):
- raise ValueError(f"timeout[]='{type(timeout)}' is not 'tuple'")
+ raise ValueError(f"timeout[]='{type(timeout)}' is not of type 'tuple'")
json_reply = {
"status_code": 200,
domain_helper.raise_on(domain)
if not isinstance(path, str):
- raise ValueError(f"path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"path[]='{type(path)}' is not of type 'str'")
elif path == "":
raise ValueError("Parameter 'path' is empty")
elif not isinstance(headers, dict):
- raise ValueError(f"headers[]='{type(headers)}' is not 'list'")
+ raise ValueError(f"headers[]='{type(headers)}' is not of type 'list'")
elif not isinstance(timeout, tuple):
- raise ValueError(f"timeout[]='{type(timeout)}' is not 'tuple'")
+ raise ValueError(f"timeout[]='{type(timeout)}' is not of type 'tuple'")
json_reply = {
"status_code": 200,
domain_helper.raise_on(domain)
if not isinstance(blocklist, list):
- raise ValueError(f"Parameter blocklist[]='{type(blocklist)}' is not 'list'")
+ raise ValueError(f"Parameter blocklist[]='{type(blocklist)}' is not of type 'list'")
elif len(blocklist) == 0:
raise ValueError("Parameter 'blocklist' is empty")
domain_helper.raise_on(domain)
if not isinstance(path, str):
- raise ValueError(f"Parameter path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"Parameter path[]='{type(path)}' is not of type 'str'")
elif path == "":
raise ValueError("Parameter 'path' is empty")
elif not isinstance(headers, dict):
- raise ValueError(f"headers[]='{type(headers)}' is not 'dict'")
+ raise ValueError(f"headers[]='{type(headers)}' is not of type 'dict'")
elif not isinstance(timeout, tuple):
- raise ValueError(f"timeout[]='{type(timeout)}' is not 'tuple'")
+ raise ValueError(f"timeout[]='{type(timeout)}' is not of type 'tuple'")
try:
logger.debug("Sending GET request to '%s%s' ...", domain, path)
def update_reason(reason: str, blocker: str, blocked: str, block_level: str):
logger.debug("reason='%s',blocker='%s',blocked='%s',block_level='%s' - CALLED!", reason, blocker, blocked, block_level)
if not isinstance(reason, str) and reason is not None:
- raise ValueError(f"Parameter reason[]='{type(reason)}' is not 'str'")
+ raise ValueError(f"Parameter reason[]='{type(reason)}' is not of type 'str'")
elif not isinstance(blocker, str):
- raise ValueError(f"Parameter blocker[]='{type(blocker)}' is not 'str'")
+ raise ValueError(f"Parameter blocker[]='{type(blocker)}' is not of type 'str'")
elif blocker == "":
raise ValueError("Parameter 'blocker' is empty")
elif blocker.lower() != blocker:
raise ValueError(f"Parameter blocker='{blocker}' must be all lower-case")
elif not isinstance(blocked, str):
- raise ValueError(f"Parameter blocked[]='{type(blocked)}' is not 'str'")
+ raise ValueError(f"Parameter blocked[]='{type(blocked)}' is not of type 'str'")
elif blocked == "":
raise ValueError("Parameter 'blocked' is empty")
elif blocked.lower() != blocked:
raise ValueError(f"Parameter blocked='{blocked}' must be all lower-case")
elif not isinstance(block_level, str):
- raise ValueError(f"Parameter block_level[]='{type(block_level)}' is not 'str'")
+ raise ValueError(f"Parameter block_level[]='{type(block_level)}' is not of type 'str'")
elif block_level == "":
raise ValueError("Parameter 'block_level' is empty")
elif block_level in ["accept", "suspend", "silence", "nsfw"]:
def update_last_seen(blocker: str, blocked: str, block_level: str):
logger.debug("blocker='%s',blocked='%s',block_level='%s' - CALLED!", blocker, blocked, block_level)
if not isinstance(blocker, str):
- raise ValueError(f"Parameter blocker[]='{type(blocker)}' is not 'str'")
+ raise ValueError(f"Parameter blocker[]='{type(blocker)}' is not of type 'str'")
elif blocker == "":
raise ValueError("Parameter 'blocker' is empty")
elif blocker.lower() != blocker:
raise ValueError(f"Parameter blocker='{blocker}' must be all lower-case")
elif not isinstance(blocked, str):
- raise ValueError(f"Parameter blocked[]='{type(blocked)}' is not 'str'")
+ raise ValueError(f"Parameter blocked[]='{type(blocked)}' is not of type 'str'")
elif blocked == "":
raise ValueError("Parameter 'blocked' is empty")
elif blocked.lower() != blocked:
raise ValueError(f"Parameter blocked='{blocked}' must be all lower-case")
elif not isinstance(block_level, str):
- raise ValueError(f"Parameter block_level[]='{type(block_level)}' is not 'str'")
+ raise ValueError(f"Parameter block_level[]='{type(block_level)}' is not of type 'str'")
elif block_level == "":
raise ValueError("Parameter 'block_level' is empty")
elif block_level in ["accept", "suspend", "silence", "nsfw"]:
logger.debug("key='%s',domain='%s',value[]='%s' - CALLED!", key, domain, type(value))
domain_helper.raise_on(domain)
if not isinstance(key, str):
- raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
+ raise ValueError(f"Parameter key[]='{type(key)}' is not of type 'str'")
elif key == "":
raise ValueError("Parameter 'key' is empty")
elif not key in _pending:
domain_helper.raise_on(domain)
if not isinstance(origin, str) and origin is not None:
- raise ValueError(f"origin[]='{type(origin)}' is not 'str'")
+ raise ValueError(f"origin[]='{type(origin)}' is not of type 'str'")
elif origin == "":
raise ValueError("Parameter 'origin' is empty")
elif not isinstance(command, str):
- raise ValueError(f"command[]='{type(command)}' is not 'str'")
+ raise ValueError(f"command[]='{type(command)}' is not of type 'str'")
elif command == "":
raise ValueError("Parameter 'command' is empty")
elif not isinstance(path, str) and path is not None:
- raise ValueError(f"path[]='{type(path)}' is not 'str'")
+ raise ValueError(f"path[]='{type(path)}' is not of type 'str'")
elif path == "":
raise ValueError("Parameter 'path' is empty")
elif not isinstance(software, str) and software is not None:
- raise ValueError(f"software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"software[]='{type(software)}' is not of type 'str'")
elif software == "":
raise ValueError("Parameter 'software' is empty")
elif origin is not None and not validators.domain(origin.split("/")[0]):
domain_helper.raise_on(domain)
if not isinstance(column, str):
- raise ValueError(f"Parameter column[]='{type(column)}' is not 'str'")
+ raise ValueError(f"Parameter column[]='{type(column)}' is not of type 'str'")
elif column not in ["last_instance_fetch", "last_blocked"]:
raise ValueError(f"Parameter column='{column}' is not expected")
elif not is_registered(domain):
domain_helper.raise_on(domain)
if not isinstance(char, str):
- raise ValueError(f"Parameter char[]='{type(char)}' is not 'str'")
+ raise ValueError(f"Parameter char[]='{type(char)}' is not of type 'str'")
elif char == "":
raise ValueError("Parameter 'char' is empty")
elif not char in domain:
raise ValueError(f"char='{char}' not found in domain='{domain}' but function invoked")
elif not isinstance(blocked_hash, str) and blocked_hash is not None:
- raise ValueError(f"Parameter blocked_hash[]='{type(blocked_hash)}' is not 'str'")
+ raise ValueError(f"Parameter blocked_hash[]='{type(blocked_hash)}' is not of type 'str'")
# Init row
row = None
domain_helper.raise_on(domain)
if not isinstance(peers, list):
- raise ValueError(f"Parameter peers[]='{type(peers)}' is not 'list'")
+ raise ValueError(f"Parameter peers[]='{type(peers)}' is not of type 'list'")
# Set timestamp
_set_data("total_peers", domain, len(peers))
domain_helper.raise_on(domain)
if not isinstance(blocks, list):
- raise ValueError(f"Parameter blocks[]='{type(blocks)}' is not 'list'")
+ raise ValueError(f"Parameter blocks[]='{type(blocks)}' is not of type 'list'")
# Set timestamp
_set_data("total_blocks", domain, len(blocks))
domain_helper.raise_on(domain)
if not isinstance(url, str) and url is not None:
- raise ValueError(f"Parameter url[]='{type(url)}' is not 'str'")
+ raise ValueError(f"Parameter url[]='{type(url)}' is not of type 'str'")
elif url == "":
raise ValueError("Parameter 'url' is empty")
domain_helper.raise_on(domain)
if not isinstance(mode, str) and mode is not None:
- raise ValueError(f"Parameter mode[]='{type(mode)}' is not 'str'")
+ raise ValueError(f"Parameter mode[]='{type(mode)}' is not of type 'str'")
elif mode == "":
raise ValueError("Parameter 'mode' is empty")
domain_helper.raise_on(domain)
if not isinstance(status, bool):
- raise ValueError(f"Parameter status[]='{type(status)}' is not 'bool'")
+ raise ValueError(f"Parameter status[]='{type(status)}' is not of type 'bool'")
# Set timestamp
_set_data("has_obfuscation", domain, status)
domain_helper.raise_on(domain)
if not isinstance(software, str) and software is not None:
- raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+ raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'")
elif software == "":
raise ValueError("Parameter 'software' is empty")
domain_helper.raise_on(domain)
if not isinstance(nodeinfo_url, str):
- raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not 'str'")
+ raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not of type 'str'")
elif nodeinfo_url == "":
raise ValueError("Parameter 'nodeinfo_url' is empty")
domain_helper.raise_on(domain)
if not isinstance(nodeinfo_url, str):
- raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not 'str'")
+ raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not of type 'str'")
elif nodeinfo_url == "":
raise ValueError("Parameter 'nodeinfo_url' is empty")
logger.warning("row()=%d does not contain key 'host': row='%s',domain='%s' - SKIPPED!", len(row), row, domain)
continue
elif not isinstance(row["host"], str):
- logger.warning("row[host][]='%s' is not 'str' - SKIPPED!", type(row['host']))
+ logger.warning("row[host][]='%s' is not of type 'str' - SKIPPED!", type(row['host']))
continue
elif not utils.is_domain_wanted(row["host"]):
logger.debug("row[host]='%s' is not wanted, domain='%s' - SKIPPED!", row['host'], domain)
domain_helper.raise_on(domain)
if not isinstance(nodeinfo_url, str):
- raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not 'str'")
+ raise ValueError(f"Parameter nodeinfo_url[]='{type(nodeinfo_url)}' is not of type 'str'")
elif nodeinfo_url == "":
raise ValueError("Parameter 'nodeinfo_url' is empty")
def fetch_url(url: str, headers: dict, timeout: tuple) -> requests.models.Response:
logger.debug("url='%s',headers()=%d,timeout(%d)='%s' - CALLED!", url, len(headers), len(timeout), timeout)
if not isinstance(url, str):
- raise ValueError(f"Parameter url[]='{type(url)}' is not 'str'")
+ raise ValueError(f"Parameter url[]='{type(url)}' is not of type 'str'")
elif url == "":
raise ValueError("Parameter 'url' is empty")
elif not isinstance(headers, dict):
- raise ValueError(f"Parameter headers[]='{type(headers)}' is not 'dict'")
+ raise ValueError(f"Parameter headers[]='{type(headers)}' is not of type 'dict'")
elif not isinstance(timeout, tuple):
- raise ValueError(f"Parameter timeout[]='{type(timeout)}' is not 'tuple'")
+ raise ValueError(f"Parameter timeout[]='{type(timeout)}' is not of type 'tuple'")
logger.debug("Parsing url='%s' ...", url)
components = urlparse(url)
domain_helper.raise_on(blocker)
if not isinstance(command, str):
- raise ValueError(f"Parameter command[]='{type(command)}' is not 'str'")
+ raise ValueError(f"Parameter command[]='{type(command)}' is not of type 'str'")
elif command == "":
raise ValueError("Parameter 'command' is empty")
def find_domains(tags: bs4.element.ResultSet, search: str) -> list:
logger.debug("tags[%s]()=%d,search='%s' - CALLED!", type(tags), len(tags), search)
if not isinstance(tags, bs4.element.ResultSet):
- raise ValueError(f"Parameter tags[]='{type(tags)}' is not 'ResultSet'")
+ raise ValueError(f"Parameter tags[]='{type(tags)}' is not of type 'ResultSet'")
elif not isinstance(search, str):
- raise ValueError(f"Parameter search[]='{type(search)}' is not 'str'")
+ raise ValueError(f"Parameter search[]='{type(search)}' is not of type 'str'")
elif search == "":
raise ValueError("Parameter 'search' is empty")
wanted = True
if not isinstance(domain, str):
- raise ValueError(f"Parameter domain[]='{type(domain)}' is not 'str'")
+ raise ValueError(f"Parameter domain[]='{type(domain)}' is not of type 'str'")
elif domain == "":
raise ValueError("Parameter 'domain' is empty")
elif domain.lower() != domain: