11
11
db = SQLAlchemy (app )
12
12
13
13
14
- class User (db .Model ):
14
+ class User (db .Model ): # user class
15
15
"""
16
16
A user model to store the level and experience points (XP).
17
17
"""
18
18
19
- id = db .Column (db .Integer , primary_key = True , unique = True , nullable = False )
20
- username = db .Column (db .String (80 ), unique = True , nullable = False )
21
- xp = db .Column (db .Float , default = 0 )
22
- xp_required = db .Column (db .Float , default = 1 )
23
- total_xp = db .Column (db .Float , default = 0 )
24
- level = db .Column (db .Integer , default = 1 )
19
+ id = db .Column (db .Integer , primary_key = True , unique = True , nullable = False ) # user id
20
+ username = db .Column (db .String (80 ), unique = True , nullable = False ) # username
21
+ xp = db .Column (db .Float , default = 0 ) # user XP
22
+ xp_required = db .Column (db .Float , default = 1 ) # user XP required
23
+ total_xp = db .Column (db .Float , default = 0 ) # user total XP
24
+ level = db .Column (db .Integer , default = 1 ) # user level
25
25
26
- def add_xp (self , amount ):
26
+ def add_xp (self , amount ): # add XP
27
27
"""
28
28
Add XP (experience points) to the user.
29
29
"""
30
- self .xp += amount
31
- self .total_xp += amount
32
- while self .xp >= self .xp_required :
30
+ self .xp += amount # add XP by amount
31
+ self .total_xp += amount # add total XP by amount
32
+ while (
33
+ self .xp >= self .xp_required
34
+ ): # if user XP is greater than or equal to XP required
33
35
self .xp -= self .xp_required
34
36
self .xp_required = round (
35
37
self .xp_required + self .xp_required * 1 / math .sqrt (self .level )
36
38
)
37
- self .level += 1
39
+ self .level += 1 # increase level
38
40
39
- def get_xp_required (self ):
41
+ def get_xp_required (self ): # get required XP to next level
40
42
"""
41
43
Get the required XP for the user to level up.
42
44
"""
43
45
return self .xp_required
44
46
45
- def get_level_progress (self ):
47
+ def get_level_progress (self ): # get level progress
46
48
"""
47
49
Get the level progress as a percentage.
48
50
"""
49
51
return (self .xp / self .xp_required ) * 100
50
52
51
53
52
- @app .template_filter ("short_numeric" )
53
- def short_numeric_filter (value ):
54
+ @app .template_filter ("short_numeric" ) # short numeric filter
55
+ def short_numeric_filter (value ): # get number in short numeric form with abbreviations
54
56
"""
55
57
Get the abbreviated numeric value.
56
58
"""
@@ -77,50 +79,52 @@ def short_numeric_filter(value):
77
79
"OD" ,
78
80
"ND" ,
79
81
"V" ,
80
- ]
82
+ ] # list of units
81
83
exponent = 0
82
- mantissa = value
83
- while mantissa >= 1000 :
84
+ mantissa = value # mantissa value from 1 to 999
85
+ while mantissa >= 1000 : # repeat until mantissa is within 1 to 999
84
86
mantissa /= 1000
85
87
exponent += 1
86
- return f"{ mantissa :.3g} { units [exponent ]} " if value >= 1000 else f"{ value :.0f} "
88
+ return (
89
+ f"{ mantissa :.3g} { units [exponent ]} " if value >= 1000 else f"{ value :.0f} "
90
+ ) # print abbreviated output
87
91
88
92
89
- app .jinja_env .filters ["short_numeric" ] = short_numeric_filter
93
+ app .jinja_env .filters ["short_numeric" ] = short_numeric_filter # add filter to Jinja
90
94
91
95
92
- @app .route ("/" )
93
- def index ():
96
+ @app .route ("/" ) # index page
97
+ def index (): # get index page template
94
98
"""
95
99
Return the index page containing a user.
96
100
"""
97
- user = User .query .first ()
98
- return render_template ("index.html" , user = user )
101
+ user = User .query .first () # get first user
102
+ return render_template ("index.html" , user = user ) # return index page template
99
103
100
104
101
- @app .route ("/add_xp" , methods = ["POST" ])
102
- def add_xp ():
105
+ @app .route ("/add_xp" , methods = ["POST" ]) # add XP from POST method
106
+ def add_xp (): # add XP
103
107
"""
104
108
Add XP (experience points) based on entered amount.
105
109
"""
106
- user = User .query .first ()
107
- user .add_xp (float (request .form ["amount" ]))
108
- db .session .commit ()
109
- return redirect (url_for ("index" ))
110
+ user = User .query .first () # get first user
111
+ user .add_xp (float (request .form ["amount" ])) # parse amount as float
112
+ db .session .commit () # commit database
113
+ return redirect (url_for ("index" )) # return index page template
110
114
111
115
112
- def init_db ():
116
+ def init_db (): # initialize database
113
117
"""
114
118
Initialize the user database.
115
119
"""
116
120
with app .app_context ():
117
- db .create_all ()
118
- if User .query .count () == 0 :
119
- new_user = User (username = "Player" )
121
+ db .create_all () # initialize database
122
+ if User .query .count () == 0 : # if there is no user in database
123
+ new_user = User (username = "Player" ) # add user with name 'Player'
120
124
db .session .add (new_user )
121
125
db .session .commit ()
122
126
123
127
124
128
if __name__ == "__main__" :
125
129
init_db ()
126
- app .run (debug = True , port = 8081 )
130
+ app .run (debug = True , port = 8081 ) # run the app at post 8081
0 commit comments