in msticpy/data/query_source.py [0:0]
def create_query(self, formatters: Dict[str, Callable] = None, **kwargs) -> str:
"""
Return query with values from kwargs and defaults substituted.
Parameters
----------
formatters : Dict[str, Callable]
Dictionary of custom parameter formatters indexed
by data type
kwargs: Mapping[str, Any]
Set of parameter name, value pairs used to
populate the template query.
Returns
-------
str
The populated query
Raises
------
ValueError
If one or more parameters with no default values
are not supplied.
Notes
-----
Parameters supplied as arguments will override any
parameter defaults (see `default_params` property).
"""
param_dict = {
name: value.get("default", None) for name, value in self.params.items()
}
param_dict.update(self.resolve_param_aliases(kwargs))
missing_params = {
name: value for name, value in param_dict.items() if value is None
}
if missing_params:
raise ValueError(
"These required parameters were not set: ", f"{missing_params.keys()}"
)
# Handle formatting for datetimes and cases where a format
# template has been supplied
for p_name, settings in self.params.items():
# These types may require custom extraction
if settings["type"] == "datetime":
param_dict[p_name] = self._convert_datetime(param_dict[p_name])
if settings["type"] == "list":
param_dict[p_name] = self._parse_param_list(param_dict[p_name])
# The parameter may need custom formatting
fmt_template = settings.get("format", None)
if fmt_template:
# custom formatting template in the query definition
param_dict[p_name] = fmt_template.format(param_dict[p_name])
elif settings["type"] == "datetime" and isinstance(
param_dict[p_name], datetime
):
if formatters and "datetime" in formatters:
param_dict[p_name] = formatters["datetime"](param_dict[p_name])
else:
param_dict[p_name] = self._format_datetime_default(
param_dict[p_name]
)
elif settings["type"] == "list":
if formatters and "list" in formatters:
param_dict[p_name] = formatters["list"](param_dict[p_name])
else:
param_dict[p_name] = self._format_list_default(param_dict[p_name])
return self._query.format(**param_dict)