forked from Krautspace/doorstatus
statusd.py now works with json modul
the deamon now uses the python modul json to read and write the api file. the function replace_entry() is removed.
This commit is contained in:
parent
cd1697a134
commit
5a6a236ebc
1 changed files with 11 additions and 38 deletions
49
statusd.py
49
statusd.py
|
@ -9,6 +9,7 @@
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
import json
|
||||||
from time import time, ctime, sleep
|
from time import time, ctime, sleep
|
||||||
from sys import exit, byteorder
|
from sys import exit, byteorder
|
||||||
|
|
||||||
|
@ -82,26 +83,6 @@ def bytes2int(raw_data):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def replace_entry(line, new):
|
|
||||||
'''
|
|
||||||
The function becomes two strings and replaces the second part of the
|
|
||||||
first string from ":" until end with the second string. Than appends a
|
|
||||||
"," and returns the result.
|
|
||||||
|
|
||||||
!!! Todo: needs exception handling !!!
|
|
||||||
|
|
||||||
param 1: string
|
|
||||||
param 2: string
|
|
||||||
return: string
|
|
||||||
'''
|
|
||||||
array = line.split(':')
|
|
||||||
logging.debug('Replace {} with {}'.format(array[1], new))
|
|
||||||
array[1] = ''.join((new, ','))
|
|
||||||
line = ':'.join((array[0], array[1]))
|
|
||||||
return line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def change_status(raw_data, api):
|
def change_status(raw_data, api):
|
||||||
'''
|
'''
|
||||||
Becomes the received byte and the path to API file. Grabs the content of
|
Becomes the received byte and the path to API file. Grabs the content of
|
||||||
|
@ -121,21 +102,13 @@ def change_status(raw_data, api):
|
||||||
logging.debug('API file is writable')
|
logging.debug('API file is writable')
|
||||||
with open(api, 'w') as api_file:
|
with open(api, 'w') as api_file:
|
||||||
logging.debug('API file open successfull')
|
logging.debug('API file open successfull')
|
||||||
for line in data.splitlines():
|
data["state"]["open"] = status
|
||||||
if line.strip().startswith('"state":'):
|
data["state"]["lastchange"] = timestamp
|
||||||
edit = True
|
try:
|
||||||
elif edit == True and line.strip().startswith('"open":'):
|
json.dump(data, api_file, indent=4)
|
||||||
line = replace_entry(line, status)
|
except Exception as e:
|
||||||
elif edit == True and line.strip().startswith('"lastchange":'):
|
logging.error('Failed to change API file')
|
||||||
line = replace_entry(line, timestamp)
|
logging.error('{}'.format(e))
|
||||||
edit = False
|
|
||||||
try:
|
|
||||||
api_file.write(line)
|
|
||||||
api_file.write('\n')
|
|
||||||
except Exception as e:
|
|
||||||
logging.error('Failed to write line to API file')
|
|
||||||
logging.error('Line: {}'.format(line))
|
|
||||||
logging.error('{}'.format(e))
|
|
||||||
logging.debug('API file changed')
|
logging.debug('API file changed')
|
||||||
else:
|
else:
|
||||||
logging.error('API file is not writable. Wrong permissions?')
|
logging.error('API file is not writable. Wrong permissions?')
|
||||||
|
@ -158,12 +131,12 @@ def read_api(api):
|
||||||
with open(api, 'r') as api_file:
|
with open(api, 'r') as api_file:
|
||||||
logging.debug('API opened successfull')
|
logging.debug('API opened successfull')
|
||||||
try:
|
try:
|
||||||
api_data = api_file.read()
|
api_json_data = json.load(api_file)
|
||||||
logging.debug('API read successfull')
|
logging.debug('API file read successfull')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error('Failed to read API file(): {}'.format(e))
|
logging.error('Failed to read API file(): {}'.format(e))
|
||||||
return False
|
return False
|
||||||
return (api_data)
|
return (api_json_data)
|
||||||
logging.error('Failed to read API file')
|
logging.error('Failed to read API file')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue