feat: add is_logged check to methods that require auth

This commit is contained in:
2022-10-04 01:24:11 -03:00
parent d6889ee081
commit 505ce8308f

View File

@@ -2,16 +2,29 @@ import aiohttp
import logging import logging
from ppgee.http import HttpClient from ppgee.http import HttpClient
from ppgee.pages import FrequencyPage from ppgee.pages import FrequencyPage
from functools import wraps
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def is_logged_check(method):
@wraps(method)
def wrapper(self, *args, **kwargs):
print("checking if logged in", self.is_logged)
if not self.is_logged:
raise Exception("You must be logged in to use this method")
return method(self, *args, **kwargs)
return wrapper
class PPGEE: class PPGEE:
def __init__(self, user: str, password: str) -> None: def __init__(self, user: str | None = None, password: str | None = None) -> None:
self.user = user self.user = user
self.password = password self.password = password
self.session: aiohttp.ClientSession self.session: aiohttp.ClientSession
self.http: HttpClient self.http: HttpClient
self.is_logged: bool = False
async def start(self): async def start(self):
self.session = aiohttp.ClientSession() self.session = aiohttp.ClientSession()
@@ -27,18 +40,26 @@ class PPGEE:
return self return self
async def __aexit__(self, exc_type, exc, tb) -> None: async def __aexit__(self, exc_type, exc, tb) -> None:
await self.logoff() if self.is_logged:
await self.logoff()
await self.close() await self.close()
async def login(self) -> str: async def login(self) -> None:
logger.info("Logging in...") logger.info("Logging in...")
return await self.http.login(self.user, self.password) if self.user and self.password:
await self.http.login(self.user, self.password)
self.is_logged = True
else:
logger.info("Logged in without credentials")
@is_logged_check
async def frequency(self) -> FrequencyPage: async def frequency(self) -> FrequencyPage:
logger.info("Requesting frequency page...") logger.info("Requesting frequency page...")
html = await self.http.frequency() html = await self.http.frequency()
return FrequencyPage(html, self.http.frequency_confirmation) return FrequencyPage(html, self.http.frequency_confirmation)
async def logoff(self) -> str: @is_logged_check
async def logoff(self) -> None:
logger.info("Logging off...") logger.info("Logging off...")
return await self.http.logoff() self.is_logged = False
await self.http.logoff()