import json import datetime class ConfigParser(object): def __init__(self, filename): with open(filename, "r") as f: self.jsonContent = json.load(f) self.events = dict() self.settings = dict() self.__parseSettings() self.__parseEvents() self.__parseModuleSettings() def __parseModuleSettings(self): self.modules = self.jsonContent["modules"] def __parseSettings(self): self.settings = self.jsonContent["settings"] def __parseDateRange(self, val ): _from = self.__fromisoformat(val["from"]) _to = self.__fromisoformat(val["to"]) val["from"] = _from val["to"] = _to def __fromisoformat(self, val): d = val.split("-") if len(d) == 3: return datetime.date(year=int(d[0]), month=int(d[1]), day=int(d[2])) elif len(d) == 2: return datetime.date(year=self.settings["year"], month=int(d[0]), day=int(d[1])) def __parseEvents(self): self.events = self.jsonContent["events"] for key, val in self.events.items(): dates = val["dates"] for ev in dates: self.__parseDateRange(ev) def printEvents(self): for key, val in self.events.items(): dates = val["dates"] print("%s\n================" % (val["name"]) ) for ev in dates: print("from: %s until: %s ---> %s" % (ev["from"], ev["to"], ev["name"]) ) def getEvent(self, date, eventName=None): for key,val in self.events.items(): if eventName: if key == eventName: for d in val["dates"]: _from = d["from"] _to = d["to"] if date >= _from and date <= _to: return (key, d) else: for d in val["dates"]: _from = d["from"] _to = d["to"] if date >= _from and date <= _to: return (key, d) return None if __name__ == "__main__": c = ConfigParser("test.json") startDate = datetime.date(2020,1,1) for i in range(0,366): d = startDate + datetime.timedelta(days=i) ev = c.getEvent(d) if ev: print(d, ev[0], ev[1]["name"])