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
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)
|