stammdaten-formular/edit_data_form.py

88 lines
3 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# encoding: utf-8
import npyscreen
import json
2020-03-14 12:40:15 +01:00
import datetime
import sys
2020-03-18 19:31:02 +01:00
import pathlib
2020-03-14 15:03:53 +01:00
from base_data_model import base_data_model
from financial_data_model import financial_data_model
from membership_data_model import membership_data_model
class FormApp(npyscreen.NPSAppManaged):
def __init__(self, filename):
super().__init__()
self.is_new_member = self.is_default_file(filename)
2020-03-18 19:31:02 +01:00
self.dir_path = pathlib.Path(filename).absolute().parent
self.member = json.load(open(filename, 'r'))
self.base_data = base_data_model(self.member['stammdaten'])
self.financial_data = financial_data_model(self.member['finanzdaten'])
self.membership_data = membership_data_model(self.member['mitgliederdaten'])
2020-03-14 15:03:53 +01:00
def main(self):
2020-03-14 15:03:53 +01:00
f = npyscreen.Form(name='Edit Member data')
2020-03-14 15:03:53 +01:00
self.base_data.add_edit_fields(f)
self.financial_data.add_edit_fields(f)
self.membership_data.add_edit_fields(f)
f.edit()
2020-03-14 15:03:53 +01:00
def get_data_from_form(self):
data_dict = {}
data_dict['stammdaten'] = self.base_data.get_form_values_dict()
data_dict['finanzdaten'] = self.financial_data.get_form_values_dict()
data_dict['mitgliederdaten'] = self.membership_data.get_form_values_dict()
data_dict['timestamp'] = datetime.datetime.now().replace(microsecond=0).isoformat()
return data_dict
def data_has_changed(self):
return self.base_data.has_changed() | self.financial_data.has_changed() | self.membership_data.has_changed()
def get_filepath(self):
2020-03-14 15:03:53 +01:00
name = self.base_data.get_form_values_dict()['fullname']
fn = '{}_{}.json'.format('_'.join(name.split()), datetime.datetime.now().replace(microsecond=0).isoformat())
if self.is_new_member:
print('Enter destination directory for new Member data:')
self.dir_path = input()
2020-03-18 19:31:02 +01:00
file_path = pathlib.Path(self.dir_path, fn)
return file_path
2020-03-14 15:03:53 +01:00
def is_default_file(self, filename):
return pathlib.Path(filename).name == 'example.json'
def main(*_args):
if len(sys.argv) > 1:
file_path = pathlib.Path(sys.argv[1])
if not file_path.exists():
print("Trying to open nonexistent file. Aborting.")
sys.exit(0)
else:
file_path = pathlib.Path(pathlib.Path(__file__).absolute().parent, 'example.json')
app = FormApp(file_path)
try:
app.run()
except Exception as e:
print(e)
sys.exit(0)
2020-03-14 15:03:53 +01:00
if app.data_has_changed():
out_data = app.get_data_from_form()
outfile_path = app.get_filepath()
print(f"Writing changed Member Data to {outfile_path}")
2020-03-26 00:05:02 +01:00
with open(outfile_path, 'w', encoding='utf8') as outfile:
json.dump(out_data, outfile, sort_keys=True, indent=4, ensure_ascii=False)
2020-03-14 15:03:53 +01:00
else:
print("Nothing has changed, skipping writing file")
if __name__ == "__main__":
npyscreen.wrapper_basic(main)