embark on a journey
parent
ad0d78e133
commit
bc843b27cc
|
@ -0,0 +1,104 @@
|
|||
#!/usr/bin/env python3
|
||||
import datetime
|
||||
from os import path
|
||||
from getpass import getuser
|
||||
import os
|
||||
from datetime import timezone
|
||||
import sqlite3
|
||||
import sys
|
||||
from typing import Optional, Tuple, TypeVar
|
||||
|
||||
BOTANY_DIR = ".botany"
|
||||
|
||||
dt = datetime.datetime
|
||||
|
||||
def now() -> dt:
|
||||
return dt.now(timezone.utc)
|
||||
|
||||
# flavor dict keys
|
||||
# - color
|
||||
# - rarity
|
||||
# - species
|
||||
# - mutation
|
||||
PLOT_SCHEMA = """
|
||||
CREATE TABLE IF NOT EXISTS plot (
|
||||
-- Each row is a plant
|
||||
id INTEGER PRIMARY KEY,
|
||||
created TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M', 'now', 'localtime')),
|
||||
watered TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M', 'now', 'localtime')),
|
||||
generation INTEGER,
|
||||
flavor JSON
|
||||
)
|
||||
"""
|
||||
|
||||
VISITORS_SCHEMA = """
|
||||
CREATE TABLE IF NOT EXISTS visitors (
|
||||
-- Each row is a visit from another user
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT,
|
||||
when TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M', 'now', 'localtime')),
|
||||
)
|
||||
"""
|
||||
|
||||
# TODO code for generating a global garden database (finds all most recent plants for users on system and fills a sqlite3 db with computed values)
|
||||
|
||||
def mkdir(p: str) -> Optional[Exception]:
|
||||
if not path.isdir(p):
|
||||
try:
|
||||
os.makedirs(p)
|
||||
except Exception as e:
|
||||
return Exception(f"failed to create {p}: {e}")
|
||||
return None
|
||||
|
||||
def mkdb(p: str, sql: str) -> Optional[Exception]:
|
||||
try:
|
||||
conn = sqlite3.connect(p)
|
||||
c = conn.cursor()
|
||||
c.execute(sql)
|
||||
conn.close()
|
||||
except Exception as e:
|
||||
return Exception(f"failed to initialize {p}: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def setup() -> Optional[Exception]:
|
||||
bdir = path.expanduser(path.join("~", BOTANY_DIR))
|
||||
e = mkdir(bdir)
|
||||
if e is not None:
|
||||
return e
|
||||
|
||||
dbdir = path.join(bdir, "db")
|
||||
e = mkdir(dbdir)
|
||||
if e is not None:
|
||||
return e
|
||||
|
||||
plotdb_path = path.join(bdir, "db/plot.db")
|
||||
# TODO test manually to see what kind of permissions fuckery we need
|
||||
e = mkdb(plotdb_path, PLOT_SCHEMA)
|
||||
if e is not None:
|
||||
return e
|
||||
|
||||
visitordb_path = path.join(bdir, "db/visitors.db")
|
||||
e = mkdb(visitordb_path, VISITORS_SCHEMA)
|
||||
if e is not None:
|
||||
return e
|
||||
|
||||
return None
|
||||
|
||||
def main() -> Optional[Exception]:
|
||||
username = getuser()
|
||||
|
||||
e = setup()
|
||||
if e is not None:
|
||||
return e
|
||||
|
||||
# TODO restore plant from disk
|
||||
return None
|
||||
|
||||
if __name__ == "__main__":
|
||||
ret = 0
|
||||
e = main()
|
||||
if e is not None:
|
||||
print(e)
|
||||
ret = 1
|
||||
sys.exit(ret)
|
Loading…
Reference in New Issue