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)