You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.1 KiB

import atexit
import json
import os
import appdirs
from dateutil import tz
app_dirs = appdirs.AppDirs("ctabus")
config_dir = app_dirs.user_config_dir
cache_dir = app_dirs.user_cache_dir
log_dir = app_dirs.user_log_dir
state_dir = app_dirs.user_state_dir
CHICAGO_TZ = tz.gettz("America/Chicago")
DATETIME_FORMAT = "%A, %B %e, %Y %H:%M:%S"
for dir in (config_dir, cache_dir, log_dir, state_dir):
if not os.path.exists(dir):
os.makedirs(dir)
recent_json = os.path.join(state_dir, "recent.json")
try:
with open(os.path.join(config_dir, "api.txt")) as file:
API_KEY = file.read().rstrip()
except FileNotFoundError:
raise FileNotFoundError(
"Please place your CTA Bus Tracker api key in a text file located at '{}'".format(
os.path.join(config_dir, "api.txt")
)
)
class RecentList:
def __init__(self, maxsize=10):
self.maxsize = maxsize
try:
with open(recent_json) as file:
self.elements = json.load(file)
self.fresh = False
except FileNotFoundError:
self.elements = []
self.fresh = True
self.current = set(self.elements)
def add(self, element):
if element not in self.current:
if len(self.elements) + 1 > self.maxsize:
del self.elements[-1]
self.elements.insert(0, element)
self.fresh = True
else:
self.get(element)
def get(self, element_name_or_index):
if type(element_name_or_index) == int:
index = element_name_or_index
else:
index = self.elements.index(element_name_or_index)
ret = self.elements.pop(index)
self.elements.insert(0, ret)
self.fresh = True
return ret
def save(self):
if self.fresh:
with open(recent_json, "w") as file:
json.dump(self.elements, file, sort_keys=True, indent=4)
recent_list = RecentList()
def save_if_modified():
if recent_list.fresh:
recent_list.save()
atexit.register(save_if_modified)