First commit with entire first rendition of the project
This commit is contained in:
63
spectra/trigger.py
Normal file
63
spectra/trigger.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import json
|
||||
import os
|
||||
import threading
|
||||
|
||||
_TRIGGER_LOCK = threading.Lock()
|
||||
|
||||
|
||||
def cache_dir():
|
||||
env = os.environ.get("SPECTRA_CACHE_DIR")
|
||||
if env:
|
||||
os.makedirs(env, exist_ok=True)
|
||||
return env
|
||||
try:
|
||||
d = "/var/cache/spectra"
|
||||
os.makedirs(d, exist_ok=True)
|
||||
return d
|
||||
except PermissionError:
|
||||
d = os.path.expanduser("~/.cache/spectra")
|
||||
os.makedirs(d, exist_ok=True)
|
||||
return d
|
||||
|
||||
|
||||
def _trigger_path():
|
||||
return os.path.join(cache_dir(), "trigger.json")
|
||||
|
||||
|
||||
def write_trigger(data):
|
||||
path = _trigger_path()
|
||||
with _TRIGGER_LOCK:
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
with open(path, "w") as f:
|
||||
json.dump(data, f)
|
||||
|
||||
|
||||
def read_trigger():
|
||||
path = _trigger_path()
|
||||
try:
|
||||
with _TRIGGER_LOCK:
|
||||
with open(path) as f:
|
||||
return json.load(f)
|
||||
except (FileNotFoundError, json.JSONDecodeError):
|
||||
return None
|
||||
|
||||
|
||||
def clear_trigger():
|
||||
path = _trigger_path()
|
||||
with _TRIGGER_LOCK:
|
||||
try:
|
||||
os.remove(path)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def read_and_clear_trigger():
|
||||
path = _trigger_path()
|
||||
with _TRIGGER_LOCK:
|
||||
try:
|
||||
with open(path) as f:
|
||||
data = json.load(f)
|
||||
os.remove(path)
|
||||
return data
|
||||
except (FileNotFoundError, json.JSONDecodeError):
|
||||
return None
|
||||
Reference in New Issue
Block a user