Source code for minehost.session

import requests

[docs]class IncorrectLoginException(Exception): """Raised when the given email and passwords are incorrect. """ pass
[docs]class InvalidSessionException(Exception): """Raised when the current session is logged out or timed out. """ pass
[docs]class Session(requests.Session): """Wrapper object around the requests.Session. Checks if it's logged on every request. """
[docs] def __init__(self, email: str = None, password: str = None): """Initializes session if email and password are given. :param email: If provided with password will try to login. :type email: str, optional :param password: If provided with email will try to login. :type password: str, optional """ super().__init__() if email is not None and password is not None: self.login(email, password)
[docs] def login(self, email: str, password: str): """Attempts to login using the given credentials. :param email: Email used to login. :type email: str :param password: Password associated to given email. :type password: str :raises IncorrectLoginException: Raised on failed login. """ requests.Session.request(self, "POST", "https://minehost.lt/prisijungimas-prie-sistemos", data = { "login": email, "password": password }) if not self.isValid(): raise IncorrectLoginException()
[docs] def logout(self): """The session becomes invalid and will raise error if tried to request anything. """ self.get("/logout")
[docs] def request(self, method, url, *args, **kvargs) -> requests.Response: """Wrapper function around the default requests.request method. Instead of giving the whole url like "https://minehost.lt/logout" now you only need to write "/logout".` :return: requests.Response object """ response = requests.Session.request(self, method, "https://minehost.lt"+url, *args, **kvargs) # Basic check to see if the session is still logged in. Looks for the logout button. if response.text.find("href=\"/logout\"") == -1 and response.text.find("src=\"/img/logo.png\"") > 0: raise InvalidSessionException() return response
[docs] def isValid(self) -> bool: """Returns true if current session is logged in, otherwise false. :return: True if logged in. """ res = self.get("/valdymo-pultas") return res.text.find("<meta http-equiv=\"refresh\" content=\"0;url=/prisijungimas-prie-sistemos\">") == -1