from enum import Enum import enum from json import JSONEncoder import json class Countrycode(Enum): NL = "NL", DE = "DE", BE = "BE" class Auctionbrand(str, Enum): NONE = "NONE", TWK = "TWK" OVM = "OVM" AP = "AP" class GeonameLocation: def __init__(self, geonameid=0, name="", asciiname="", alternatenames=[], latitude=0, longitude=0, countrycode: Countrycode = Countrycode.NL, modificationdate=""): self.geonameid = geonameid self.name = name self.asciiname = asciiname self.alternatenames = alternatenames self.latitude = latitude self.longitude = longitude self.countrycode = countrycode self.modificationdate = modificationdate class Maplocation: def __init__(self, lat=0, long=0, numberofauctions=0, geonamelocation: GeonameLocation = None, auctions=[]): self.lat = lat self.long = long self.numberofauctions = numberofauctions self.geonamelocation = geonamelocation self.auctions = auctions class Auction: def __init__(self, auctionbrand: Auctionbrand = Auctionbrand.NONE, city="", countrycode: Countrycode = Countrycode.NL, name="", starttime=None, closingtime=None, url="", imageurl="", numberoflots=0, geonamelocation: GeonameLocation = None, multiplelocations=False): self.city = city self.countrycode = countrycode self.name = name self.starttime = str(starttime) self.closingtime = str(closingtime) self.url = url self.imageurl = imageurl self.numberoflots = numberoflots self.geonamelocation = geonamelocation self.brand = auctionbrand self.multiplelocations = multiplelocations class JsonEncoder(JSONEncoder): # def default(self, o): # return o.__dict__ # try 2 def default(self, obj): # Only serialize public, instance-level attributes if hasattr(obj, '__dict__'): return { key: self.serialize(value) for key, value in obj.__dict__.items() if not key.startswith('_') # skip private/protected } return super().default(obj) def serialize(self, value): if isinstance(value, list): return [self.serialize(item) for item in value] elif isinstance(value, dict): return {k: self.serialize(v) for k, v in value.items()} elif isinstance(value, enum.Enum): return value.name # or value.value elif hasattr(value, '__dict__'): return self.default(value) # dive into nested object else: try: json.dumps(value) return value except (TypeError, OverflowError): return str(value)