| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- from .user import user
- from .user import user_builder
- from .user import user_factory
- from .exception import in_collection_exception
- class users_collection:
- """
- This is responsible for managing users in the system. It could login new
- users, or load them by ApiKey.
- """
- def __init__(self):
- """
- This create new collection.
- """
- self.__by_apikey = dict()
- self.__by_nick = dict()
- def get_by_nick(self, nick: str) -> user | None:
- """
- This function return user by nick.
- Parameters:
- nick (str): Nick of the user to get
- Returns:
- (user | None): User with that nick, or None
- """
- if self.exists(nick):
- return self.__by_nick[nick]
- return None
- def exists(self, nick: str) -> bool:
- """
- This function check that user with given nick exists in the
- collection.
- Parameters:
- nick (str): Nick of the user to check
- Returns:
- (bool): True when user exists, or False if not
- """
- return nick in self.__by_nick
-
- @property
- def all(self) -> list:
- """
- This return all users in the collection, as list, like in the
- config file.
- """
- return list(self.__by_apikey.values())
-
- def add(self, target: user) -> object:
- """
- This add new user to the collection. When ApiKey or login already
- exists in the collection, then error had been raised.
- Parameters:
- target (user): New user to add
- Returns:
- (object): This object itself
- """
- if target.apikey in self.__by_apikey:
- error = "User with ApiKey \"" + target.apikey + "\" "
- error = error + "already in collection."
- raise in_collection_exception(error)
- if target.nick in self.__by_nick:
- error = "User with nick \"" + target.nick + "\" "
- error = error + "already in collection."
- raise in_collection_exception(error)
- self.__by_apikey[target.apikey] = target
- self.__by_nick[target.nick] = target
- return self
- def login(self, nick: str, password: str) -> user | None:
- """
- This try to login user by nick and password. When nick or password
- had been wrong, then None had been returned. When nick and password
- are correct, then return that user.
- Parameters:
- nick (str): Nick of the user
- password (str): Password of the user
- Returns:
- (user): User with that nick and password, if exists
- (None): When user with that nick and password not exists
- """
- if not nick in self.__by_nick:
- return None
- target = self.__by_nick[nick]
- if target.password != password:
- return None
- return target
- def remove(self, target: user) -> object:
- """
- This function remove target user from collection.
- Parameters:
- target (user): Target user to remove from collection
- Returns:
- (object): This object itself
- """
- exists = target.nick in self.__by_nick
- exists = target.apikey in self.__by_apikey
- if not exists:
- raise in_collection_exception("Can not found required user.")
- by_nick = self.__by_nick.copy()
- by_apikey = self.__by_apikey.copy()
- by_nick.pop(target.nick)
- by_apikey.pop(target.apikey)
- self.__by_nick = by_nick
- self.__by_apikey = by_apikey
- return self
- def get(self, apikey: str) -> user | None:
- """
- This try to load user by ApiKey. When user with that ApiKey exists
- then return it. When not, return None.
- Parameters:
- apikey (str): ApiKey of the user to load
- Returns:
- (user): User with that ApiKey
- (None): When user with that ApiKey not exists
- """
- if not apikey in self.__by_apikey:
- return None
- return self.__by_apikey[apikey]
|