def create_query()

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)