-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomponents.py
More file actions
90 lines (76 loc) · 2.88 KB
/
components.py
File metadata and controls
90 lines (76 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File for shared functions and reusable FastHtml components
from fasthtml.common import *
from datetime import date, datetime, timezone
from functools import wraps
import hashlib
from models import User
from config import SALT, LOGFILE
import logging
logging.basicConfig(filename=LOGFILE, level=logging.INFO, format='%(asctime)s %(message)s')
logger = logging.getLogger(__name__)
def get_password_hash(plain_password):
pwd_salt = plain_password + SALT
hashed_password = hashlib.sha256(pwd_salt.encode())
return hashed_password.hexdigest()
# comvert a datetime string in iso format to a date string
def datestring(dts):
dt= date.strftime(dts)
return dt.strftime("%a %d %b %Y")
def common_header(nav_items: list[str], title, session):
buttons= [(A(Button(item), href=f"/{item}/".lower())) for item in nav_items]
query = User.select().where(User.name == session.get('auth'))
if query.exists():
buttons.append(A(Button(session.get('auth')), href='/logout'))
else:
buttons.append(A(Button('Login'), href='/login'))
buttons.insert(0, H1(title))
return Container( Nav( *buttons ),)
#preceeds and interposes hrs between items in a list
def hr_separated( items):
list= [Hr()]
for item in items:
list.append(item)
list.append(Hr())
return list
#fixed width link. Text within is left justified - see mystyles.css
def Linked_label( text, href):
return( Div(A(text, href='{}'.format(href), style="width: 30em, text-align: left")))
def AifEqual( var1, var2, title, href ):
logging.info("var1 is {}, var2 is {}".format(var1,var2))
if var1 or var2:
if var1 == var2:
return A(title, href=href)
def AifEqualAND( var1, var2, condition, title, href):
logging.info("in AifEqualAND, href is {}".format(href))
if condition:
return AifEqual( var1, var2, title, href)
def AifNEAND( var1, var2, condition, title, href):
if not condition:
return AifEqualAND( var1, var2, True, title, href)
def AifEqualToggle( var1, var2, title1, title2, toggle_value, href):
if var1 and var2:
if var1 == var2:
if toggle_value:
return A(title1, href=href)
else:
return A(title2, href=href)
def AifNE( var1, var2, title, href ):
if var1 != var2:
return A(title, href=href)
'''
def AifExists(var, title, target):
if var:
return A( title, href=target)
return
'''
def ButtonifLoggedIn( var1, style, title, href):
logging.info("In ButtonifEqual var1 is {}".format(var1))
if var1:
return A(Button(title), href=href)
def ButtonRight(title, href):
return Div(A( Button(title, href='#'), href=href), style='text-align:right')
if __name__ == '__main__':
dt = datetime.now(timezone.utc)
logging.info("datetime is {}".format(dt))
logging.info("date is {}".format(dt.date()))
print(dt.strftime("%a %d %b %Y"))