# Path: mppsolar/outputs/baseoutput.py
# class baseoutput:
#     def __str__(self):
#         return "the base class for the output processors, not used directly"
# 
# Path: mppsolar/helpers.py
# def get_kwargs(kwargs, key, default=None):
#     if key not in kwargs or not kwargs[key]:
#         return default
#     return kwargs[key]
# 
# Path: mppsolar/helpers.py
# def key_wanted(key, filter=None, excl_filter=None):
#     # remove any specifically excluded keys
#     if excl_filter is not None and excl_filter.search(key):
#         # log.debug(f"key_wanted: key {key} matches excl_filter {excl_filter} so key excluded")
#         return False
#     if filter is None:
#         # log.debug(
#         #    f"key_wanted: No filter and key {key} not excluded by excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     elif filter.search(key):
#         # log.debug(
#         #    f"key_wanted: key {key} matches filter {filter} and not excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     else:
#         # log.debug(f"key_wanted: key {key} does not match filter {filter} so key excluded")
#         return False


import json as js
import logging
import re
from .baseoutput import baseoutput
from ..helpers import get_kwargs
from ..helpers import key_wanted
        log.debug(f"__init__: kwargs {kwargs}")

    def output(self, *args, **kwargs):
        log.info("Using output processor: json")
        log.debug(f"kwargs {kwargs}")
        data = get_kwargs(kwargs, "data")
        keep_case = get_kwargs(kwargs, "keep_case")
        data.pop("raw_response", None)

        filter = get_kwargs(kwargs, "filter")
        if filter is not None:
            filter = re.compile(filter)
        excl_filter = get_kwargs(kwargs, "excl_filter")
        if excl_filter is not None:
            excl_filter = re.compile(excl_filter)

        output = {}
        for key in data:
            value = data[key]
            if isinstance(value, list):
                value = data[key][0]
            # unit = data[key][1]
            # remove spaces
            key = key.replace(" ", "_")
            if not keep_case:
                # make lowercase
                key = key.lower()
            if key_wanted(key, filter, excl_filter):
                output[key] = value


# Path: mppsolar/outputs/baseoutput.py
# class baseoutput:
#     def __str__(self):
#         return "the base class for the output processors, not used directly"
# 
# Path: mppsolar/helpers.py
# def get_kwargs(kwargs, key, default=None):
#     if key not in kwargs or not kwargs[key]:
#         return default
#     return kwargs[key]
# 
# Path: mppsolar/helpers.py
# def key_wanted(key, filter=None, excl_filter=None):
#     # remove any specifically excluded keys
#     if excl_filter is not None and excl_filter.search(key):
#         # log.debug(f"key_wanted: key {key} matches excl_filter {excl_filter} so key excluded")
#         return False
#     if filter is None:
#         # log.debug(
#         #    f"key_wanted: No filter and key {key} not excluded by excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     elif filter.search(key):
#         # log.debug(
#         #    f"key_wanted: key {key} matches filter {filter} and not excl_filter {excl_filter} so key wanted"
#         # )
#         return True
#     else:
#         # log.debug(f"key_wanted: key {key} does not match filter {filter} so key excluded")
#         return False


# Path: mppsolar/outputs/json.py
import json as js
import logging
import re
from .baseoutput import baseoutput
from ..helpers import get_kwargs
from ..helpers import key_wanted

        log.debug(f"__init__: kwargs {kwargs}")

    def output(self, *args, **kwargs):
        log.info("Using output processor: json")
        log.debug(f"kwargs {kwargs}")
        data = get_kwargs(kwargs, "data")
        keep_case = get_kwargs(kwargs, "keep_case")
        data.pop("raw_response", None)

        filter = get_kwargs(kwargs, "filter")
        if filter is not None:
            filter = re.compile(filter)
        excl_filter = get_kwargs(kwargs, "excl_filter")
        if excl_filter is not None:
            excl_filter = re.compile(excl_filter)

        output = {}
        for key in data:
            value = data[key]
            if isinstance(value, list):
                value = data[key][0]
            # unit = data[key][1]
            # remove spaces
            key = key.replace(" ", "_")
            if not keep_case:
                # make lowercase
                key = key.lower()
            if key_wanted(key, filter, excl_filter):
                output[key] = value


        print(js.dumps(output))