Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 69 additions & 23 deletions beagle/common.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,74 @@
from copy import deepcopy as deepcopy


def fix_query_list(request_query, key_list):
query_dict = dict(request_query)
new_query_dict = deepcopy(query_dict)
for single_param in query_dict:
query_value = query_dict.get(single_param)
if "[]" in single_param:
new_param = single_param.replace("[]", "")
new_query_dict[new_param] = new_query_dict.pop(single_param)
single_param = new_param
if query_value:
if single_param in key_list:
if type(query_value) == list:
if "," in query_value[0]:
new_query_dict[single_param] = query_value[0].split(",")
from copy import deepcopy
from typing import Any, Dict, Iterable

import logging

logger = logging.getLogger(__name__)


def fix_query_list(
request_query: Iterable,
key_list: list[str]
) -> Dict[str, Any]:
"""
Normalize query parameters.

- Converts keys ending with '[]' to their base name.
- Ensures parameters in key_list are always returned as lists.
- Converts comma-separated values into lists.
- Returns single values for parameters not in key_list.
"""
try:
query_dict = dict(request_query)
new_query_dict = deepcopy(query_dict)

for param_name, value in query_dict.items():

# Skip empty values
if not value:
continue

normalized_param = param_name

# Remove [] suffix from parameter names
if normalized_param.endswith("[]"):
normalized_param = normalized_param[:-2]
new_query_dict[normalized_param] = new_query_dict.pop(param_name)

# Parameters expected to be lists
if normalized_param in key_list:

if isinstance(value, list):
if len(value) == 1 and "," in value[0]:
new_query_dict[normalized_param] = value[0].split(",")
else:
new_query_dict[single_param] = query_value
new_query_dict[normalized_param] = value
else:
new_query_dict[single_param] = [query_value]
new_query_dict[normalized_param] = [value]

# Parameters expected to be scalar values
else:
new_query_dict[single_param] = query_value[0]
return new_query_dict
if isinstance(value, list):
new_query_dict[normalized_param] = value[0]
else:
new_query_dict[normalized_param] = value

return new_query_dict

except Exception:
logger.exception("Failed to normalize query parameters.")
raise


def str2bool(singleStr):
return str(singleStr).lower() in ("yes", "true", "t", "1")
def str2bool(value: Any) -> bool:
"""
Convert common string representations to boolean.
"""
return str(value).strip().lower() in {
"yes",
"true",
"t",
"1",
"y",
"on",
}