From 536261dce7d695857a6ea685293c00d8d07dc0e2 Mon Sep 17 00:00:00 2001 From: CustomIcon Date: Fri, 19 Apr 2024 20:02:44 +0000 Subject: [PATCH] pre-commit and red pill --- .gitignore | 2 +- .pre-commit-config.yaml | 32 +++++ README.md | 2 +- assets/favicon.png | Bin 4383 -> 4186 bytes assets/icon.png | Bin 4383 -> 4186 bytes main.py | 8 +- modules/__init__.py | 2 +- modules/home.py | 15 +-- modules/settings/__init__.py | 2 +- modules/settings/functions/__init__.py | 2 +- modules/settings/functions/config.py | 45 +++---- modules/settings/functions/theme.py | 5 +- modules/settings/settings.py | 156 +++++++++++++------------ requirements.txt | 2 +- utils/__init__.py | 8 +- utils/title.py | 3 +- utils/view.py | 3 +- utils/views.py | 5 +- 18 files changed, 167 insertions(+), 125 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.gitignore b/.gitignore index 5155582..377b907 100644 --- a/.gitignore +++ b/.gitignore @@ -158,4 +158,4 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ -config.ini \ No newline at end of file +config.ini diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..d68e411 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,32 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-docstring-first + - id: debug-statements + - id: double-quote-string-fixer + - id: requirements-txt-fixer + - id: check-added-large-files + - id: check-ast + - id: check-builtin-literals + - id: check-case-conflict + - id: destroyed-symlinks + - id: check-merge-conflict + - id: debug-statements + - id: detect-private-key + - id: fix-byte-order-marker + - id: mixed-line-ending + - repo: https://github.com/hhatto/autopep8 + rev: v2.1.0 + hooks: + - id: autopep8 + - repo: https://github.com/asottile/add-trailing-comma + rev: v3.1.0 + hooks: + - id: add-trailing-comma + - repo: https://github.com/asottile/pyupgrade + rev: v3.15.2 + hooks: + - id: pyupgrade diff --git a/README.md b/README.md index 0ac302f..33690b5 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ To run the app: ``` flet run [app_directory] -``` \ No newline at end of file +``` diff --git a/assets/favicon.png b/assets/favicon.png index f84f52771a539487af8c7d0b62cd557619bf652a..c630155602e14dfb0ea3ac0279ef1049d4927918 100644 GIT binary patch literal 4186 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 literal 4383 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 diff --git a/assets/icon.png b/assets/icon.png index f84f52771a539487af8c7d0b62cd557619bf652a..c630155602e14dfb0ea3ac0279ef1049d4927918 100644 GIT binary patch literal 4186 zcmX9?c_38Z7az-@LB_ssLnOICoXO`c!*j6M9ZIQHn*Wray4?X#j(}O2SxkqzG zqjYjF6$gEKQ_AIxkn_k1x%knxuPPEBCRj9ElNlPB0W%{xLWk#&7BD4FJ8lSK_SjF3ZdUK)p_UVO*S*!4lhv9w%Bf; z!Gh~8zeXBwP@Wd9mQ^g9ZL)G_)9C%=7KaW8RgByhz& z>jRA{5oKU*|HUbKBl&%5^$B*=+SByK)@!QIXN>kE;e21Lajqo zgJeN%)buF;l%D=6V%h|7egFCM-QyQHysy7L+=fZ%LfECVwqT%L{5YHqs4j8r98g?~ zn@l8?=QvQ4Qj9whpMcQf`cp;%xpl3JSsg8Dp*sgvwpe<~ZGRSa)Fd|>wF&?%J$NzoPMR}OK-?k>B4+NdASxc+x861*)g`e#lknaEk?$q z!C+I;OlHF&C!teSPw#}7-WQ{x_eZIgp?78!G;ytHcV9=jl_Bx#ZkoAd^ED68zf36- zIWk_u1y&(3=P%6j3^J#PjlfH6-V3cmvjLaQZAB4LO_!Vhtk;9OWc$bWquCPt2;pn* z`hv6sa^>W#UcH?^UtKeyurgFnD7#~a&BV6MoYp^zC@ZzAG8h9Eq}n-I9>efG4+M-- z>H7VFwRk*EesS|prn{dX0@bJJ?lq>IrD;;CFUyYl^K)tGlH20ZtE%6`3SYF(nc+rE z+UwL&3#lJydmXe&Ek=bgHsj~EVC$lyHDUR()LG8r@`DH2bwSHq*}b><`AwVD#!h8; zpx$Dd5FB5~amOL+r{X$#RWtawW%z@&Xk3^P->bxsT zX#;e6#=X`buqG}BKD*%TTWu{|ii{Ky*|gLi@z84fdoiVgj_`Ul1Mkc%kT;){!Pp!L z%x(aosDMaMuKW^PyCIse_r9u zk+IR{3=twEC0TI~dRr1ElyqIbXQ=2UPEN9vm6efw##Gn5E;B9d?^?9v^}yH8t1TtHMWd>qSMMReXik@tt)WVoy#x!+yW|o3b_* zivB_>u-fqt+tsnyl0rZR^`JMb6Zu-sp7iwbvC<*Ey|t5)l(Zs6=R-s+7s^yV?qZL{NW?crlb#;8;!eLy82g1~ypq&S zHp1}M+jQ5In&l##O%qWo&}uC1*ISuN1Y6?QlD`XCuN`mdd(Oz@^$$X8Gv-Uac#gdqX$0?!PPDy4`1X~O1my@Dk7aLgh(mf(r%^Ep2)@Aa$@51` z$H5^nu@mEE!EJ}YsLpOgi}_N(xKv9^B^Lj}`8<57Y(U}AP?XEkEIY)HacrmWQ~-md zB^=xEJq*VMw+qN9a^3uJHUES$rmf%Za9?;*O>*`ZQf2nR&({wGvy~&TT~B+Y0@4mL z@Jg})CHhDE6uneT&LVA7E3!UorS=Y zOMa4Wrpf$|3Y#rN=uip|lOb_X8}ChaJKaAU1c5o=tA$_y7ur+{nFEX~YUzNzYV1h9 z%jSlqLkQ0CLI8I=4%~g2J=3L#uzzHFaB##fr8pH}rWV_F)`Prv`LM!Sx%h9vpa)** zPl2U%h$u*^$qQL1UHQYSDP8j(>)xKzgJPX5fXX0^M^@84EsK)6L;0|E?X1L3)%7m= zd|~WGlmzb})q}G(?dOOuQMrz|xIsliT6eaZlB;mUp&zzf6esPp#7Od0-+@CI0dMXRB5L36Sf5!;Ku2j?!zFFbtHAH^s%iZzwW=K1oDG zgK1~DGyzr__p|ZNeE0X)KB}HGVDsy;FG@TkL(;fi&`c2xV+hQD$xN*HpuNlC_d5p`MPzPr13x~aV@nvS3&oR9XIYNr-LEONuhGkyAfLGa;u{`r zl!4iRw6fP45O#U@g`$r5D?KT?%WIh-GYqemUZZ~PGgFiSQK_yGhGZ^|P5`s3^tg^N7*=ZkxGl~uD3D=M;2qoP3A$u0 zE^ou{Gcp_WF!40N**gcRovWW5RPWeZ?=V1iVDs}f7pa%QzI=oyl#Xv;rTuhEQE57` zXjVFV!X3^iD%Tf|(p$JFcJ}v8$?J{arpKW2hgXJ>B>{;E?8JvZ$Dm>2Fjf|W8%-xa z3Pu$zX*S%*Yq~2#uyrr)1!l;VO9Ik_)3Kh`la?q1E=#lVXAn!zOIOA&3~-QfExIhl z6Yt3!YiRod?iZ+eA+c2a@cueC$en!slAj+m@gXn4TV7o~1*PGL z>ES4*P#A)O57_kddbl4urWhwcerc%;n7{>rUsX5vy*XeJ3b;_@ggo}tQU;=ODdv{%(30~|~92lsOWy>J}0wT{*gYK1}Ve*JSur z-;j^AFU}orwZiCEZFQCZyDf%u+s90`+m=1wMd>Ayd%CUf{5?!f#0%6TtojQdS9EGtvzLY zwn)QOx^f(kOMfgnW#X|svG1Kbj`>fcCvy9MR{%cgc04PzBYTF*3|ivA>!aL2I^N~H z_Z|yTpZfY#^o=E!f$!9*YXoB7BK-#P+OGIJ?;rkmooV{OH<)Z4%n)Z(X_tq;o7=%VgLnuAm$&vhB7=_u5 s-KBLRuAzZ(^AF4TK5KJ}?%WZB5%N!fm?0A$_*noly@W)R8{LlkA8oV^`2YX_ literal 4383 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 diff --git a/main.py b/main.py index feddd47..28d7a8e 100644 --- a/main.py +++ b/main.py @@ -3,15 +3,17 @@ from utils import views_handler def main(page: ft.Page): - page.title = "BillPay" + page.title = 'BillPay' # print("Initial route:", page.route) + def route_change(e): # print("Route change:", e.route) page.views.clear() page.views.append( - views_handler(page)[page.route] + views_handler(page)[page.route], ) page.update() + def view_pop(e): # print("View pop:", e.view) page.views.pop() @@ -23,4 +25,4 @@ def main(page: ft.Page): page.go(page.route) -ft.app(target=main, assets_dir="assets") \ No newline at end of file +ft.app(target=main, assets_dir='assets') diff --git a/modules/__init__.py b/modules/__init__.py index 2101c42..a33f265 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -2,4 +2,4 @@ from .home import Home from .settings import Settings -__all__ = ["Home", "Settings"] \ No newline at end of file +__all__ = ['Home', 'Settings'] diff --git a/modules/home.py b/modules/home.py index 99fbc92..5efd69b 100644 --- a/modules/home.py +++ b/modules/home.py @@ -2,18 +2,19 @@ import flet as ft from utils import AppView, Title from modules.settings import config + def Home(page: ft.Page): return AppView( - "/", + '/', [ ft.AppBar( title=ft.Text(Title(__file__)), actions=[ ft.IconButton( icon=ft.icons.SETTINGS, - on_click=lambda _: page.go("/settings"), - ) - ] + on_click=lambda _: page.go('/settings'), + ), + ], ), ft.Container( height=100, @@ -21,11 +22,11 @@ def Home(page: ft.Page): content=ft.Column( controls=[ ft.Text( - "Goodmorning," + 'Goodmorning,', ), ft.Text( - config.get("general", "name") - ) + config.get('general', 'name'), + ), ], ), ), diff --git a/modules/settings/__init__.py b/modules/settings/__init__.py index 0341fbb..7dff65a 100644 --- a/modules/settings/__init__.py +++ b/modules/settings/__init__.py @@ -1,4 +1,4 @@ from .settings import Settings from .functions import config -__all__ = ["Settings", "config"] \ No newline at end of file +__all__ = ['Settings', 'config'] diff --git a/modules/settings/functions/__init__.py b/modules/settings/functions/__init__.py index f7aa0de..1a5cc42 100644 --- a/modules/settings/functions/__init__.py +++ b/modules/settings/functions/__init__.py @@ -1,3 +1,3 @@ from .config import config from .theme import Theme -__all__ = ['config', 'Theme'] \ No newline at end of file +__all__ = ['config', 'Theme'] diff --git a/modules/settings/functions/config.py b/modules/settings/functions/config.py index 218c078..9647aa2 100644 --- a/modules/settings/functions/config.py +++ b/modules/settings/functions/config.py @@ -5,8 +5,8 @@ static = """ [general] name = CustomIcon -phone = -email = +phone = +email = [apps] dhiraagu = true @@ -17,44 +17,45 @@ stelco = true medianet = true [dhiraagu] -phone = -otp = -cookie = +phone = +otp = +cookie = [ooredoo] -phone = -otp = -cookie = +phone = +otp = +cookie = [hdc] -property = -nid = +property = +nid = [mwsc] -meter_no = -account_no = -mobile_no = +meter_no = +account_no = +mobile_no = [stelco] -account_no = -bill_no = +account_no = +bill_no = [medianet] -account_no = -nid = -phone = +account_no = +nid = +phone = """ + class Config(ConfigParser): def __init__(self) -> None: super().__init__() - if not os.path.exists("config.ini"): + if not os.path.exists('config.ini'): self.initialize(content=static) - self.read("config.ini") + self.read('config.ini') def initialize(self, content): - with open("config.ini", 'a+') as file: + with open('config.ini', 'a+') as file: file.write(content) -config = Config() \ No newline at end of file +config = Config() diff --git a/modules/settings/functions/theme.py b/modules/settings/functions/theme.py index 7375cae..febd161 100644 --- a/modules/settings/functions/theme.py +++ b/modules/settings/functions/theme.py @@ -1,9 +1,10 @@ import flet as ft + class Theme: def __init__(self, page: ft.Page) -> None: self.page = page - + def change(self, theme: ft.ThemeMode = None): if theme: self.page.theme_mode = theme @@ -13,4 +14,4 @@ class Theme: if self.page.theme_mode == ft.ThemeMode.LIGHT else ft.ThemeMode.LIGHT ) - self.page.update() \ No newline at end of file + self.page.update() diff --git a/modules/settings/settings.py b/modules/settings/settings.py index 595049a..8bdefe2 100644 --- a/modules/settings/settings.py +++ b/modules/settings/settings.py @@ -2,11 +2,12 @@ import flet as ft from utils import AppView, Title from .functions import Theme + def Settings(page: ft.Page): settingsContainer = ft.ListView( - expand=True + expand=True, ) - settingsContainer.controls.append(ft.Text("General")) + settingsContainer.controls.append(ft.Text('General')) generalSettings = ft.Container( content=ft.Column( controls=[ @@ -17,16 +18,16 @@ def Settings(page: ft.Page): [ ft.ListTile( leading=ft.Icon(ft.icons.PERSON), - title=ft.Text("Username"), + title=ft.Text('Username'), subtitle=ft.Text( - "The greeting message" + 'The greeting message', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked username"), - ) + on_click=lambda _: print('clicked username'), + ), ), ft.Card( content=ft.Container( @@ -35,16 +36,16 @@ def Settings(page: ft.Page): [ ft.ListTile( leading=ft.Icon(ft.icons.PHONE), - title=ft.Text("Phone"), + title=ft.Text('Phone'), subtitle=ft.Text( - "Personal Phone number" + 'Personal Phone number', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked phone"), - ) + on_click=lambda _: print('clicked phone'), + ), ), ft.Card( content=ft.Container( @@ -53,16 +54,16 @@ def Settings(page: ft.Page): [ ft.ListTile( leading=ft.Icon(ft.icons.EMAIL), - title=ft.Text("Email"), + title=ft.Text('Email'), subtitle=ft.Text( - "Personal Email" + 'Personal Email', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked email"), - ) + on_click=lambda _: print('clicked email'), + ), ), ft.Card( content=ft.Container( @@ -71,25 +72,25 @@ def Settings(page: ft.Page): [ ft.ListTile( leading=ft.Icon(ft.icons.CARD_TRAVEL), - title=ft.Text("NID"), + title=ft.Text('NID'), subtitle=ft.Text( - "National Idenity Number" + 'National Idenity Number', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked email"), - ) + on_click=lambda _: print('clicked email'), + ), ), - ] - ) + ], + ), ) settingsContainer.controls.append( - generalSettings + generalSettings, ) settingsContainer.controls.append(ft.Divider()) - settingsContainer.controls.append(ft.Text("Notifications")) + settingsContainer.controls.append(ft.Text('Notifications')) notificationsSettings = ft.Container( content=ft.Column( controls=[ @@ -100,25 +101,25 @@ def Settings(page: ft.Page): [ ft.ListTile( leading=ft.Icon(ft.icons.TELEGRAM), - title=ft.Text("Telegram"), + title=ft.Text('Telegram'), subtitle=ft.Text( - "Telegram Notifications for reminders and Bill pays" + 'Telegram Notifications for reminders and Bill pays', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked username"), - ) + on_click=lambda _: print('clicked username'), + ), ), - ] - ) + ], + ), ) settingsContainer.controls.append( - notificationsSettings + notificationsSettings, ) settingsContainer.controls.append(ft.Divider()) - settingsContainer.controls.append(ft.Text("Apps")) + settingsContainer.controls.append(ft.Text('Apps')) appsSettings = ft.Container( content=ft.Column( controls=[ @@ -131,18 +132,18 @@ def Settings(page: ft.Page): leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, - src="https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png" + src='https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png', ), - title=ft.Text("Dhiraagu"), + title=ft.Text('Dhiraagu'), subtitle=ft.Text( - "An ISP Service." + 'An ISP Service.', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked dhiraagu"), - ) + on_click=lambda _: print('clicked dhiraagu'), + ), ), ft.Card( content=ft.Container( @@ -153,18 +154,18 @@ def Settings(page: ft.Page): leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, - src="https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg" + src='https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg', ), - title=ft.Text("Ooredoo"), + title=ft.Text('Ooredoo'), subtitle=ft.Text( - "An ISP Service." + 'An ISP Service.', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked ooredoo"), - ) + on_click=lambda _: print('clicked ooredoo'), + ), ), ft.Card( content=ft.Container( @@ -175,18 +176,18 @@ def Settings(page: ft.Page): leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, - src="https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png" + src='https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png', ), - title=ft.Text("STELCO"), + title=ft.Text('STELCO'), subtitle=ft.Text( - "Electricity Bills" + 'Electricity Bills', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked stelco"), - ) + on_click=lambda _: print('clicked stelco'), + ), ), ft.Card( content=ft.Container( @@ -197,18 +198,18 @@ def Settings(page: ft.Page): leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, - src="https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg" + src='https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg', ), - title=ft.Text("MWSC"), + title=ft.Text('MWSC'), subtitle=ft.Text( - "Water Bills" + 'Water Bills', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked mwsc"), - ) + on_click=lambda _: print('clicked mwsc'), + ), ), ft.Card( content=ft.Container( @@ -219,25 +220,26 @@ def Settings(page: ft.Page): leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, - src="https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg" + src='https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg', ), - title=ft.Text("Medianet"), + title=ft.Text('Medianet'), subtitle=ft.Text( - "Online Television Service" + 'Online Television Service', ), ), - ] + ], ), padding=10, - on_click=lambda _: print("clicked medianet"), - ) + on_click=lambda _: print('clicked medianet'), + ), ), - ] - ) + ], + ), ) settingsContainer.controls.append(appsSettings) settingsContainer.controls.append(ft.Divider()) - settingsContainer.controls.append(ft.Text("Theme")) + settingsContainer.controls.append(ft.Text('Theme')) + def _on_theme_change(e): Theme(page).change() themeSettings = ft.Container( @@ -248,29 +250,29 @@ def Settings(page: ft.Page): content=ft.Container( ft.Switch( value=True, - label=" Switch to dark theme", - on_change=_on_theme_change + label=' Switch to dark theme', + on_change=_on_theme_change, ), ), padding=10, on_click=None, - ) + ), ), - ] - ) + ], + ), ) settingsContainer.controls.append(themeSettings) return AppView( - "/settings", + '/settings', [ ft.AppBar( leading=ft.IconButton( ft.icons.ARROW_BACK_IOS_NEW_ROUNDED, - on_click=lambda _: page.go("/") + on_click=lambda _: page.go('/'), ), title=ft.Text(Title(str(__file__))), - bgcolor=ft.colors.TRANSPARENT + bgcolor=ft.colors.TRANSPARENT, ), - settingsContainer + settingsContainer, ], ) diff --git a/requirements.txt b/requirements.txt index d54c7ec..40e195a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -flet==0.22.* \ No newline at end of file +flet==0.22.* diff --git a/utils/__init__.py b/utils/__init__.py index 7e21ba1..aff5c80 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -3,7 +3,7 @@ from .title import Title from .views import views_handler __all__ = [ - "AppView", - "Title", - "views_handler" -] \ No newline at end of file + 'AppView', + 'Title', + 'views_handler', +] diff --git a/utils/title.py b/utils/title.py index 845f035..d7900b6 100644 --- a/utils/title.py +++ b/utils/title.py @@ -1,4 +1,5 @@ import os + def Title(title: str): - return str(os.path.basename(title)).replace('.py', '').title() \ No newline at end of file + return str(os.path.basename(title)).replace('.py', '').title() diff --git a/utils/view.py b/utils/view.py index 1b98bd0..5fcbf73 100644 --- a/utils/view.py +++ b/utils/view.py @@ -1,7 +1,8 @@ import flet as ft + class AppView(ft.View): def __init__(self, route, controls): super().__init__() self.controls = controls - self.route = route \ No newline at end of file + self.route = route diff --git a/utils/views.py b/utils/views.py index 2ee72b2..fd36d8b 100644 --- a/utils/views.py +++ b/utils/views.py @@ -1,7 +1,8 @@ from modules import Home, Settings + def views_handler(page): return { '/': Home(page), - '/settings': Settings(page) - } \ No newline at end of file + '/settings': Settings(page), + }