def __setattr__(self, name, value): if name in self.WHERE: value = self.WHERE[name] if (hasattr(self, "_Model__attributtes") and name in self.__attributtes and "datatype" in self.__attributtes[name]): datatype = self.__attributtes[name]["datatype"] new_value = None if value is None: new_value = value elif datatype == 'int': new_value = int(value) elif datatype == 'float': new_value = float(value) elif datatype == 'str': new_value = str(value) elif datatype == 'object_id': if value is None: new_value = ObjectId() elif type(value) is bytes: new_value = ObjectId(value) elif type(value) is str: new_value = ObjectId(bytes(value)) else: new_value = value elif datatype == 'date': if type(value) is str: new_value = datetime.datetime.strptime(value, '%Y-%m-%d').date() elif type(value) is int: new_value = datetime.date.fromtimestamp(value) elif type(value) is datetime.date: new_value = value else: new_value = None elif datatype == 'list': if type(value) is list: new_value = ModelList(value) elif datatype == 'dict': if type(value) is dict: new_value = ModelObject( name, self.__attributtes[name]["attributes"], **value) new_value.DB = self.DB new_value.COLLECTION = self.COLLECTION if datatype not in ['list', 'dict']: self.__updated__attr[name] = new_value return object.__setattr__(self, name, new_value) return object.__setattr__(self, name, value)