| """ |
| Database and Database Path Management |
| """ |
| import os |
| from os import path |
| import json |
| import subprocess |
| |
| |
| def get_trellis_root(): |
| """Return the absolute path to the Project Trellis repo root""" |
| return path.abspath(path.join(__file__, "../../../")) |
| |
| |
| def get_db_root(): |
| """ |
| Return the path containing the Project Trellis database |
| This is database/ in the repo, unless the `PRJTRELLIS_DB` environment |
| variable is set to another value. |
| """ |
| if "PRJTRELLIS_DB" in os.environ and os.environ["PRJTRELLIS_DB"] != "": |
| return os.environ["PRJTRELLIS_DB"] |
| else: |
| return path.join(get_trellis_root(), "database") |
| |
| |
| def get_db_subdir(family = None, device = None, package = None): |
| """ |
| Return the DB subdirectory corresponding to a family, device and |
| package (all if applicable), creating it if it doesn't already |
| exist. |
| """ |
| subdir = get_db_root() |
| dparts = [family, device, package] |
| for dpart in dparts: |
| if dpart is None: |
| break |
| subdir = path.join(subdir, dpart) |
| if not path.exists(subdir): |
| os.mkdir(subdir) |
| return subdir |
| |
| |
| def get_tilegrid(family, device): |
| """ |
| Return the deserialised tilegrid for a family, device |
| """ |
| tgjson = path.join(get_db_subdir(family, device), "tilegrid.json") |
| with open(tgjson, "r") as f: |
| return json.load(f) |
| |
| |
| def get_devices(): |
| """ |
| Return the deserialised content of devices.json |
| """ |
| djson = path.join(get_db_root(), "devices.json") |
| with open(djson, "r") as f: |
| return json.load(f) |
| |
| |
| def get_db_commit(): |
| return subprocess.getoutput('git -C "{}" rev-parse HEAD'.format(get_db_root())) |