# Path: dftimewolf/lib/errors.py
# class DFTimewolfError(Exception):
# class BadConfigurationError(DFTimewolfError):
# class RecipeParseError(DFTimewolfError):
# class CommandLineParseError(DFTimewolfError):
# class CriticalError(DFTimewolfError):
#   def __init__(self,
#                message: Optional[str]=None,
#                name: Optional[str]=None,
#                stacktrace: Optional[str]=None,
#                critical: bool=False,
#                unexpected: bool=False) -> None:


import json
from typing import Dict, Any
from dftimewolf.lib import errors
    """Loads extra configuration parameters from a JSON configuration file.

    Args:
      filename (str): name of the JSON configuration file.

    Returns:
      bool: True if config was successfully loaded, False otherwise.
    """
    try:
      with open(filename, 'rb') as configuration_file:
        json_string = configuration_file.read()
        cls.LoadExtraData(json_string)
        return True
    except (IOError, OSError):
      pass
    return False

  @classmethod
  def LoadExtraData(cls, json_string: bytes) -> None:
    """Loads extra configuration parameters from a JSON string.

    Args:
      json_string (bytes): JSON string that contains the configuration.

    Raises:
      BadConfigurationError: if the JSON string cannot be read.
    """
    try:
      json_dict = json.loads(json_string)
    except ValueError as exception:

# Path: dftimewolf/lib/errors.py
# class DFTimewolfError(Exception):
# class BadConfigurationError(DFTimewolfError):
# class RecipeParseError(DFTimewolfError):
# class CommandLineParseError(DFTimewolfError):
# class CriticalError(DFTimewolfError):
#   def __init__(self,
#                message: Optional[str]=None,
#                name: Optional[str]=None,
#                stacktrace: Optional[str]=None,
#                critical: bool=False,
#                unexpected: bool=False) -> None:


# Path: dftimewolf/config.py
import json
from typing import Dict, Any
from dftimewolf.lib import errors

    """Loads extra configuration parameters from a JSON configuration file.

    Args:
      filename (str): name of the JSON configuration file.

    Returns:
      bool: True if config was successfully loaded, False otherwise.
    """
    try:
      with open(filename, 'rb') as configuration_file:
        json_string = configuration_file.read()
        cls.LoadExtraData(json_string)
        return True
    except (IOError, OSError):
      pass
    return False

  @classmethod
  def LoadExtraData(cls, json_string: bytes) -> None:
    """Loads extra configuration parameters from a JSON string.

    Args:
      json_string (bytes): JSON string that contains the configuration.

    Raises:
      BadConfigurationError: if the JSON string cannot be read.
    """
    try:
      json_dict = json.loads(json_string)
    except ValueError as exception:

      raise errors.BadConfigurationError((