mirror of https://github.com/lukechilds/umbrel.git
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.
54 lines
1.5 KiB
54 lines
1.5 KiB
#!/usr/bin/env python3
|
|
from pathlib import Path
|
|
|
|
# A status file has status entries, one per line, in the format:
|
|
# $id:$status[:$error-code]
|
|
# e.g:
|
|
# foo:started
|
|
# foo:completed
|
|
# bar:started
|
|
# fizz:started
|
|
# fizz:completed
|
|
# bar:errored:no-network-access
|
|
|
|
# Creates an empty status file
|
|
def create_empty(status_file_path):
|
|
Path(status_file_path).open('w').close()
|
|
|
|
# Returns the index of the dict with a matching ID from a list
|
|
def _get_index(list, id):
|
|
for i, dict in enumerate(list):
|
|
if dict['id'] == id:
|
|
return i
|
|
return None
|
|
|
|
# Parses a status file
|
|
def parse(status_file_path):
|
|
# Empty list for holding the status entries
|
|
statuses = []
|
|
# Read the status file and loop over the entries
|
|
for entry in Path(status_file_path).read_text().split():
|
|
# Decode parts with ":" seperator
|
|
parts = entry.split(':')
|
|
parsed_entry = {
|
|
'id': parts[0],
|
|
'status': parts[1],
|
|
'error': parts[2] if len(parts) >2 else None
|
|
}
|
|
# Check if we already have an entry for this id
|
|
index = _get_index(statuses, parsed_entry['id'])
|
|
# If we don't, append the entry
|
|
if index == None:
|
|
statuses.append(parsed_entry)
|
|
# If we do, update the entry
|
|
else:
|
|
statuses[index] = parsed_entry
|
|
return statuses
|
|
|
|
# Checks if a status file contains errors
|
|
def contains_errors(status_file_path):
|
|
status = parse(status_file_path)
|
|
for entry in status:
|
|
if entry['status'] == 'errored':
|
|
return True
|
|
return False
|
|
|