Esempio n. 1
0
    def element_fill_with_defaults(self, element_name):
        """
        Fills the config with any defaults for element_name

        If item is a dict, then calls dict_with_defaults
        
        """


        config_item=getattr(self, element_name, None)
        default_item=get_system_defaults().get(element_name, None)

        if config_item is None:
            if default_item is None:
                error_msg="Element %s not in defaults or config" % element_name
                self.log.critical(error_msg)

            else:
                config_item=default_item
        
        if type(config_item) is dict:
            if type(default_item) is dict:
                config_item=self.dict_with_defaults(element_name)
        else:
            if type(default_item) is dict:
                error_msg="Config item %s is not a dict, but it is in the default!" % element_name    
                self.log.critical(error_msg)

            
        setattr(self, element_name, config_item)
Esempio n. 2
0
 def dict_with_defaults(self, element_name):
     """
     Returns config.element_name with any keys missing replaced with system defaults
     
     Only works for configs where the element is a dict
     """
     config_dict=copy(getattr(self, element_name, dict()))
     
     default_dict=get_system_defaults().get(element_name, dict())
     required=default_dict.keys()
         
     for dict_key in required:
         ## key automatically in default...
         if dict_key not in config_dict:
             config_dict[dict_key]=default_dict[dict_key]
     
         if type(config_dict[dict_key]) is dict:
             if type(default_dict[dict_key]) is dict:
                 config_dict[dict_key]=self.nested_dict_with_defaults(element_name, dict_key)
         else:
             if type(default_dict[dict_key]) is dict:
                 error_msg="You've created a config where %s.%s is not a dict, but it is in the default config!"%(element_name, dict_key)
                 self.log.critical(error_msg)
             
     return config_dict
Esempio n. 3
0
    def fill_with_defaults(self):
        """
        Fills with defaults
        >>> config=Config(dict(forecast_cap=22.0, forecast_scalar_estimate=dict(backfill=False), forecast_weight_estimate=dict(correlation_estimate=dict(min_periods=40))))
        >>> config
        Config with elements: forecast_cap, forecast_scalar_estimate, forecast_weight_estimate
        >>> config.fill_with_defaults()
        >>> config.forecast_scalar
        1.0
        >>> config.forecast_cap
        22.0
        >>> config.forecast_scalar_estimate['pool_instruments']
        True
        >>> config.forecast_scalar_estimate['backfill']
        False
        >>> config.forecast_weight_estimate['correlation_estimate']['min_periods']
        40
        >>> config.forecast_weight_estimate['correlation_estimate']['ew_lookback']
        500
        """
        self.log.msg("Adding config defaults")
        
        existing_elements=self._elements
        default_elements=list(get_system_defaults().keys())
        
        new_elements=list(set(existing_elements+default_elements))
        [self.element_fill_with_defaults(element_name) for element_name in new_elements]

        setattr(self, "_elements", new_elements)
Esempio n. 4
0
    def fill_with_defaults(self):
        """
        Fills with defaults
        >>> config=Config(dict(forecast_cap=22.0, forecast_scalar_estimate=dict(backfill=False), forecast_weight_estimate=dict(correlation_estimate=dict(min_periods=40))))
        >>> config
        Config with elements: forecast_cap, forecast_scalar_estimate, forecast_weight_estimate
        >>> config.fill_with_defaults()
        >>> config.forecast_scalar
        1.0
        >>> config.forecast_cap
        22.0
        >>> config.forecast_scalar_estimate['pool_instruments']
        True
        >>> config.forecast_scalar_estimate['backfill']
        False
        >>> config.forecast_weight_estimate['correlation_estimate']['min_periods']
        40
        >>> config.forecast_weight_estimate['correlation_estimate']['ew_lookback']
        500
        """
        self.log.msg("Adding config defaults")

        self_as_dict = self.as_dict()
        default_dict = get_system_defaults()

        new_dict = fill_config_dict_with_defaults(self_as_dict, default_dict)

        self._create_config_from_dict(new_dict)
Esempio n. 5
0
    def dict_with_defaults(self, element_name):
        """
        Returns config.element_name with any keys missing replaced with system defaults

        Only works for configs where the element is a dict
        """
        config_dict = copy(getattr(self, element_name, dict()))

        default_dict = get_system_defaults().get(element_name, dict())
        required = default_dict.keys()

        for dict_key in required:
            # key automatically in default...
            if dict_key not in config_dict:
                config_dict[dict_key] = default_dict[dict_key]

            if isinstance(config_dict[dict_key], dict):
                if isinstance(default_dict[dict_key], dict):
                    config_dict[dict_key] = self.nested_dict_with_defaults(
                        element_name, dict_key)
            else:
                if isinstance(default_dict[dict_key], dict):
                    error_msg = "You've created a config where %s.%s is not a dict, but it is in the default config!" % (
                        element_name, dict_key)
                    self.log.critical(error_msg)

        return config_dict
Esempio n. 6
0
    def element_fill_with_defaults(self, element_name):
        """
        Fills the config with any defaults for element_name

        If item is a dict, then calls dict_with_defaults

        """

        config_item = getattr(self, element_name, None)
        default_item = get_system_defaults().get(element_name, None)

        if config_item is None:
            if default_item is None:
                error_msg = "Element %s not in defaults or config" % element_name
                self.log.critical(error_msg)

            else:
                config_item = default_item

        if isinstance(config_item, dict):
            if isinstance(default_item, dict):
                config_item = self.dict_with_defaults(element_name)
        else:
            if isinstance(default_item, dict):
                error_msg = "Config item %s is not a dict, but it is in the default!" % element_name
                self.log.critical(error_msg)

        setattr(self, element_name, config_item)
Esempio n. 7
0
    def fill_with_defaults(self):
        """
        Fills with defaults
        >>> config=Config(dict(forecast_cap=22.0, forecast_scalar_estimate=dict(backfill=False), forecast_weight_estimate=dict(correlation_estimate=dict(min_periods=40))))
        >>> config
        Config with elements: forecast_cap, forecast_scalar_estimate, forecast_weight_estimate
        >>> config.fill_with_defaults()
        >>> config.forecast_scalar
        1.0
        >>> config.forecast_cap
        22.0
        >>> config.forecast_scalar_estimate['pool_instruments']
        True
        >>> config.forecast_scalar_estimate['backfill']
        False
        >>> config.forecast_weight_estimate['correlation_estimate']['min_periods']
        40
        >>> config.forecast_weight_estimate['correlation_estimate']['ew_lookback']
        500
        """
        self.log.msg("Adding config defaults")

        existing_elements = self._elements
        default_elements = list(get_system_defaults().keys())

        new_elements = list(set(existing_elements + default_elements))
        [
            self.element_fill_with_defaults(element_name)
            for element_name in new_elements
        ]

        setattr(self, "_elements", new_elements)
Esempio n. 8
0
def get_list_of_private_then_default_key_values(list_of_key_names,
                                                fail_if_any_missing=True):
    result_dict = {}
    system_defaults_dict = get_system_defaults()
    private_config_dict = get_private_config()

    for key_name in list_of_key_names:
        key_value = get_private_then_default_key_value(
            key_name,
            system_defaults_dict=system_defaults_dict,
            private_config_dict=private_config_dict,
            raise_error=fail_if_any_missing)
        result_dict[key_name] = key_value

    return result_dict
Esempio n. 9
0
    def nested_dict_with_defaults(self, element_name, dict_name):
        """
        Returns config.element_name[dict_name] with any keys required replaced with system defaults
        
        Only works for configs where the element is a nested dict
        """
        element_in_config = copy(getattr(self, element_name, dict()))
        nested_config_dict = element_in_config.get(dict_name, dict())

        element_in_default = get_system_defaults().get(element_name, dict())
        nested_default_dict = element_in_default.get(dict_name, dict())

        required = nested_default_dict.keys()

        if len(required) > 0:

            for dict_key in required:
                if dict_key not in nested_config_dict:
                    nested_config_dict[dict_key] = nested_default_dict[
                        dict_key]

        return nested_config_dict
Esempio n. 10
0
    def nested_dict_with_defaults(self, element_name, dict_name):
        """
        Returns config.element_name[dict_name] with any keys required replaced with system defaults
        
        Only works for configs where the element is a nested dict
        """
        element_in_config=copy(getattr(self, element_name, dict()))
        nested_config_dict=element_in_config.get(dict_name,dict())

        element_in_default=get_system_defaults().get(element_name, dict())
        nested_default_dict=element_in_default.get(dict_name, dict())

        required=nested_default_dict.keys()

        if len(required)>0:
            
            for dict_key in required:
                if dict_key not in nested_config_dict:
                    nested_config_dict[dict_key]=nested_default_dict[dict_key]
                
            
        return nested_config_dict