Add scrap to database

This commit is contained in:
Em (Ethan) Ruszanowski 2024-02-28 16:56:44 -05:00
parent 19150301d6
commit 9768d706f2
Signed by: em
GPG key ID: C725D6E571252B96
4 changed files with 154 additions and 9 deletions

19
app.py
View file

@ -21,6 +21,9 @@ class Run:
def main(): def main():
st.set_page_config("Lethal Company Scouter", "🛰️") st.set_page_config("Lethal Company Scouter", "🛰️")
st.markdown("# :red[Lethal Company] Scouter")
st.markdown(":rainbow[What does the scouter say about this moon's power level?]")
moon_name = st.selectbox( moon_name = st.selectbox(
"Moon", "Moon",
db.get_moon_list(), db.get_moon_list(),
@ -32,8 +35,8 @@ def main():
st.markdown(f"## {run.moon.name} ({run.moon.tier})") st.markdown(f"## {run.moon.name} ({run.moon.tier})")
st.info(f"Risk: {run.moon.risk_level} | Min scrap: {run.moon.min_scrap} " st.write(run)
f"| Max scrap: {run.moon.max_scrap} | Default layout: {run.moon.default_layout}") st.write(run.moon)
# Begin column layout # Begin column layout
left_column, right_column = st.columns(2) left_column, right_column = st.columns(2)
@ -44,6 +47,18 @@ def main():
with right_column: with right_column:
st.markdown("### Inside") st.markdown("### Inside")
st.markdown('## Scrap Lookup')
scrap_name = st.selectbox(
'Scrap Name',
db.get_scrap_list(),
placeholder='Select a scrap name!'
)
scrap_id = db.get_scrap_id_by_name(scrap_name)
scrap = db.get_scrap_by_id(scrap_id)
st.write(scrap)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -1 +1,53 @@
; insert into main.scrap (scrap_id, scrap_name, min_value, max_value, weight, conductive, two_handed)
values (1, 'Air Horn', 52, 72, 0, 0, 0),
(2, 'Apparatus', 80, 80, 31, 1, 1),
(3, 'Bee Hive', 50, 156, 0, 1, 1),
(4, 'Bottles', 44, 56, 19, 0, 1),
(5, 'Brass Bell', 48, 80, 24, 1, 0),
(6, 'Candy', 6, 36, 11, 0, 0),
(7, 'Cash Register', 80, 160, 84, 1, 1),
(8, 'Chemical Jug', 32, 84, 32, 0, 1),
(9, 'Clown Horn', 52, 72, 0, 1, 0),
(10, 'Coffee Mug', 24, 68, 5, 0, 0),
(11, 'Comedy Mask', 28, 52, 11, 0, 0),
(12, 'Cookie Mold Pan', 12, 40, 16, 0, 0),
(13, 'Dustpan', 12, 32, 0, 0, 0),
(14, 'Egg Beater', 12, 44, 11, 1, 0),
(15, 'Fancy Lamp', 60, 128, 21, 1, 1),
(16, 'Flask', 16, 44, 19, 1, 0),
(17, 'Gift', 12, 28, 19, 0, 0),
(18, 'Gold Bar', 102, 210, 77, 1, 0),
(19, 'Golden Cup', 40, 80, 16, 0, 0),
(20, 'Hair Brush', 8, 36, 11, 0, 0),
(21, 'Hairdryer', 60, 100, 7, 0, 0),
(22, 'Homemade Flashbang', 10, 28, 5, 0, 0),
(23, 'Jar of Pickles', 32, 60, 16, 0, 0),
(24, 'Large Axle', 36, 56, 16, 1, 1),
(25, 'Large Bolt', 20, 32, 19, 1, 0),
(26, 'Laser Pointer', 32, 100, 0, 0, 0),
(27, 'Magic 7 Ball', 36, 72, 16, 0, 0),
(28, 'Magnifying Glass', 44, 60, 11, 0, 0),
(29, 'Metal Sheet', 10, 22, 26, 1, 0),
(30, 'Old Phone', 48, 64, 5, 0, 0),
(31, 'Painting', 60, 124, 32, 0, 1),
(32, 'Perfume Bottle', 48, 104, 0, 0, 0),
(33, 'Pill Bottle', 16, 40, 0, 0, 0),
(34, 'Plastic Fish', 28, 40, 0, 0, 0),
(35, 'Player Body', 5, 5, 11, 0, 1),
(36, 'Red Soda', 18, 90, 7, 1, 0),
(37, 'Remote', 20, 48, 0, 0, 0),
(38, 'Robot Toy', 56, 88, 21, 1, 0),
(39, 'Rubber Duckie', 2, 100, 0, 0, 0),
(40, 'Shotgun', 30, 90, 16, 0, 0),
(41, 'Shotgun Shell', 0, 0, 0, 0, 0),
(42, 'Steering Wheel', 16, 32, 16, 0, 0),
(43, 'Stop Sign', 20, 52, 21, 1, 0),
(44, 'Tea Kettle', 32, 56, 21, 1, 0),
(45, 'Teeth', 60, 84, 0, 0, 0),
(46, 'Toothpaste', 14, 48, 0, 0, 0),
(47, 'Toy Cube', 24, 44, 0, 0, 0),
(48, 'Tragedy Mask', 28, 52, 11, 0, 0),
(49, 'V-Type Engine', 20, 56, 16, 1, 1),
(50, 'Wedding Ring', 52, 80, 16, 1, 0),
(51, 'Whoopie Cushion', 6, 20, 0, 1, 0),
(52, 'Yield Sign', 18, 36, 42, 1, 0);

View file

@ -5,7 +5,7 @@ import sqlite3
class Moon: class Moon:
def __init__(self, moon_id, name, risk_level, cost, default_layout, map_size_multiplier, min_scrap, max_scrap, def __init__(self, moon_id, name, risk_level, cost, default_layout, map_size_multiplier, min_scrap, max_scrap,
outside_max_power, inside_max_power, tier): outside_max_power, inside_max_power, tier):
self.id = moon_id self.moon_id = moon_id
self.name = name self.name = name
self.risk_level = risk_level self.risk_level = risk_level
self.cost = cost self.cost = cost
@ -18,6 +18,17 @@ class Moon:
self.tier = tier self.tier = tier
class Scrap:
def __init__(self, scrap_id, name, min_value, max_value, weight, conductive, two_handed):
self.scrap_id = scrap_id
self.name = name
self.min_value = min_value
self.max_value = max_value
self.weight = weight
self.conductive = conductive
self.two_handed = two_handed
def get_connection() -> sqlite3.Connection: def get_connection() -> sqlite3.Connection:
"""Opens a connection to the SQLite3 database at the default path """Opens a connection to the SQLite3 database at the default path
or a path provided by an environment variable if one exists. or a path provided by an environment variable if one exists.
@ -59,13 +70,13 @@ def get_moon_list() -> list[str] | None:
""" """
with get_connection() as connection: with get_connection() as connection:
cursor = connection.cursor() cursor = connection.cursor()
moons = cursor.execute( moon_names = cursor.execute(
"select moon_name from moon order by moon_id" "select moon_name from moon order by moon_id"
).fetchall() ).fetchall()
if moons: if moon_names:
moons = [moon[0] for moon in moons] moon_names = [moon[0] for moon in moon_names]
return moons return moon_names
else: else:
return None return None
@ -77,7 +88,6 @@ def get_moon_by_id(moon_id: int) -> Moon | None:
:return: A moon object or None if no moon is found :return: A moon object or None if no moon is found
""" """
with get_connection() as connection: with get_connection() as connection:
connection.text_factory = str
cursor = connection.cursor() cursor = connection.cursor()
query = """ query = """
@ -108,3 +118,71 @@ limit 1;"""
return Moon(*moon) return Moon(*moon)
else: else:
return None return None
def get_scrap_list() -> list[str] | None:
"""Provides a list of all scrap names from the database.
:return: All scrap names as a list of strings or None if no scrap is found
"""
with get_connection() as connection:
cursor = connection.cursor()
scrap_names = cursor.execute(
"select scrap_name from scrap order by scrap_id"
)
if scrap_names:
scrap_names = [scrap[0] for scrap in scrap_names]
return scrap_names
else:
return None
def get_scrap_id_by_name(scrap_name: str) -> int | None:
"""Queries the database for a scrap ID that matches the given name.
:param scrap_name: Moon name as a string
:return: The scrap's ID as an int or None if no scrap is found
"""
with get_connection() as connection:
cursor = connection.cursor()
scrap_id = cursor.execute(
"select scrap_id "
"from scrap "
"where scrap_name = ? "
"order by scrap_name "
"limit 1;",
(scrap_name,)
).fetchone()
if scrap_id:
return scrap_id[0]
else:
return None
def get_scrap_by_id(scrap_id: int) -> Scrap | None:
with get_connection() as connection:
cursor = connection.cursor()
query = """
select s.scrap_id,
s.scrap_name,
s.min_value,
s.max_value,
s.weight,
s.conductive,
s.two_handed
from scrap as s
where scrap_id = ?
limit 1;
"""
scrap = cursor.execute(
query,
(scrap_id,)
).fetchone()
if scrap:
return Scrap(*scrap)
else:
return None

Binary file not shown.