from bson.objectid import ObjectId from .mongo import Model from pymongo.errors import DuplicateKeyError import hashlib class User(Model): @staticmethod def dict_to_object(dictionary): u = User( first_name=dictionary["first_name"], last_name=dictionary["last_name"], email=dictionary["email"], hashed_password=dictionary["hashed_password"] ) u.__id = str(dictionary["_id"]) return u def to_dict(self): res = {} if self.__id is not None: res["_id"] = self.__id if self.__first_name is not None: res["first_name"] = self.__first_name if self.__last_name is not None: res["last_name"] = self.__last_name if self.__email is not None: res["email"] = self.__email if self.__hashed_password is not None: res["hashed_password"] = self.__hashed_password return res def __init__(self, first_name, last_name, email, hashed_password): self.__id = None self.__first_name = first_name self.__last_name = last_name self.__email = email self.__hashed_password = hashed_password @staticmethod def get_collection(): return Model.get_db()["users"] def get_id(self): return self.__id def store(self): try: add_document = User.get_collection().insert_one(self.to_dict()) self.__id = str(add_document.inserted_id) except DuplicateKeyError: print("Error occurred") @staticmethod def find_by_username(email): u = User.get_collection().find_one({"email": email}) if u is not None: return User.dict_to_object(u) return u @staticmethod def find_by_id(object_id): u = User.get_collection().find_one({"_id": ObjectId(object_id)}) if u is not None: return User.dict_to_object(u) return u def compare_password(self, new_password): new_hashed_password = hashlib.md5(new_password.encode()).hexdigest() return self.__hashed_password == new_hashed_password