import toga from toga.style import Pack from toga.style.pack import COLUMN, ROW, END, START, CENTER, HIDDEN, JUSTIFY # from justgetit.constants import SCREENHEIGHT, SCREENWIDTH import asyncio from justgetit.constants import * import httpx from justgetit.basepage import BasePage class Login(BasePage): def __init__(self, *args, **kwargs): """ This page allows the user to login Login details will be kept for a week after the user last uses this app :param self: login-screen :param args: args for super :param kwargs: kwars for super """ # set button and image self.first_menu_button_icon = 'register' self.first_menu_button_callback = self.goto_registration self.page_pngimage = 'login' super().__init__(*args, **kwargs) # Name input self.name_input = toga.TextInput( placeholder="Could be you here", style=Pack( width=250, margin_bottom=10 ) ) # Password input self.password_input = toga.PasswordInput( placeholder="Feeling lucky?", style=Pack( width=250, margin_bottom=20 ) ) # Save button save_button = toga.Button( icon=toga.Icon("images/save"), style=Pack( width=50, margin=10, ), on_press=self.login_button_pressed) save_button_box= toga.Column( children=[save_button], style=Pack( flex=1, align_items=START, margin=20 ) ) # wrapping up the windows elements self.content_box.add(self.name_input) self.content_box.add(self.password_input) self.content_box.add(save_button_box) async def login_button_pressed(self, widget): self.result = 0 self.message = '' user = self.name_input.value pwd = self.password_input.value if len(user)>0 and len(pwd)>0: data = {'user': user, 'password': pwd} try: async with httpx.AsyncClient() as client: response = await client.post(API+'/login', data=data) payload = response.json() print(payload) self.result = int(payload['status']) if 'message' in payload: self.message = payload['message'] except httpx.RequestError as exc: self.result = -2 if self.result == 1: # store login etc in config self.app.configuration.store_login(user, pwd) # goto lists screen self.app.goto_next_page_by_name(PAGE_LISTS) else: await self.app.main_window.dialog( toga.InfoDialog("Login error", self.message) ) def goto_registration(self, dummy): self.app.goto_next_page_by_name(PAGE_REGISTER)