Ejemplo n.º 1
0
    def __init__ (self, config_yaml):
        """ Parse a yaml configuration string """
        configdef = yaml.safe_load(io.StringIO(config_yaml))         

        if "filters" not in configdef:
            configdef = dict(filters=[configdef])

        self._configs = []

        for definition in configdef["filters"]:
            config = Bunch( valid_from = None
                         , volume_follows = False
                         , copy_last_price = False
                         , copy_last_volume = False
                         , qualifier_include_filters = []
                         , qualifier_exclude_filters = []
                         , exclude_filters = [] )

            if "filter" in definition and definition["filter"] != None:
                for exclude_filter in definition["filter"]:
                    parts = exclude_filter.split(",")
                    if parts[0] == "floor":
                        config.exclude_filters.append(FloorFilter(float(parts[1]), "price"))
                    elif parts[0] == "cap":
                        config.exclude_filters.append(CapFilter(float(parts[1]), "price"))    
                    elif parts[0] == "step":
                        config.exclude_filters.append(StepFilter(int(parts[1]), float(parts[2]), float(parts[3]), "price"))
                    else:
                        raise Exception("Unknown filter (%s)" % (parts[0]))   
            
            if "remove" in definition and definition["remove"] != None:
                for exclude_filter in definition["remove"]:
                    config.qualifier_exclude_filters.append(QualifierFilter(exclude_filter))
            
            if "allow" in definition and definition["allow"] != None:
                for include_filter in definition["allow"]:
                    config.qualifier_include_filters.append(QualifierFilter(include_filter))

            if "volFollows" in definition: config.volume_follows = definition["volFollows"] 
            if "copyLast" in definition and definition["copyLast"] != None:
                config.copy_last_price = definition["copyLast"] 
                config.copy_last_volume = definition["copyLast"] 
            if "volumeLimit" in definition and definition["volumeLimit"] != None:
                config.exclude_filters.append(CapFilter(definition["volumeLimit"], "volume"))
            if "validFrom" in definition and definition["validFrom"] != None:
                valid_from = datetime.datetime.strptime(definition["validFrom"], "%Y-%m-%d %H:%M:%S")
                valid_from.replace(tzinfo=pytz.utc)
                config.valid_from = common.Time.tick(valid_from)
            if "weekTimezone" in definition and definition["weekTimezone"] != None:
                config.exclude_filters.append(WeekendFilter(definition["weekTimezone"], definition["weekEnd"], definition["weekStart"]))

            self._configs.append(config)
        
        self._config_index = 0
        self._config_count = len(self._configs)