with open(config_file) as conf:
read = json.loads(conf.read())
config = default | read
+except FileNotFoundError as e:
+ logging.critical(e)
+ config=default
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
config=default
config["filename"]=args.filename
try:
self.forms.append(json.loads(f.read()))
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
for i in self.forms:
try:
for j in i["form"]:
self.inputs.append([j["description"], QCheckBox()])
else:
self.inputs.append([j["description"], QLineEdit()])
+ except KeyError as e:
+ logging.warning(e)
except Exception as e:
- raise(e)
+ logging.exception(e)
def getData(self):
try:
elif(isinstance(self.inputs[index][1], QDateTimeEdit)):
self.custom[index][list(item)[0]]=self.inputs[index][1].text()
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
return(self.custom)
def setData(self, custom=False):
d=QDateTime.fromString(pdate.strftime("%Y-%m-%d %H:%M:%S"), "yyyy-MM-dd hh:mm:ss")
self.inputs[index][1].setDateTime(d)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def __init__(self, *args, **kwargs):
self.load(file)
QMessageBox.information(self,"File saved", "Changes saved. Please restart the program.")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def cmd_row(self):
tablerow=[]
self.table.resizeRowsToContents()
textedit=QTextEdit()
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def confirm(self):
return QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm action", "Unsaved changes may be lost. Continue?")
try:
os.unlink(os.path.join(self.directory.name, "attachment", os.path.basename(item)))
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def delete_sign(self):
try:
os.unlink(os.path.join(self.directory.name, "certificate.pem"))
os.unlink(os.path.join(self.directory.name, "signature"))
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def has_template(self):
return(os.path.exists(os.path.join(self.directory.name, "template", "index.html")))
def cmd_view(self):
try:
- with ZipFile(self.getSelectedFile()) as zf:
- with zf.open("prescription.json") as pf:
- prescription=json.loads(pf.read())
- self.unrenderbox.show(prescription).exec()
+ file=self.getSelectedFile()
+ if(file):
+ with ZipFile(file) as zf:
+ with zf.open("prescription.json") as pf:
+ prescription=json.loads(pf.read())
+ self.unrenderbox.show(prescription).exec()
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def cmd_open(self):
try:
- self.signal_open.emit(self.getSelectedFile())
- self.hide()
+ file=self.getSelectedFile()
+ if(file):
+ self.signal_open.emit()
+ self.hide()
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def cmd_copy(self):
try:
- with ZipFile(self.getSelectedFile()) as zf:
- with zf.open("prescription.json") as pf:
- pres=json.loads(pf.read())
- self.signal_copy.emit(pres)
- self.hide()
+ file=self.getSelectedFile()
+ if(file):
+ with ZipFile(file) as zf:
+ with zf.open("prescription.json") as pf:
+ pres=json.loads(pf.read())
+ self.signal_copy.emit(pres)
+ self.hide()
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def getSelectedFile(self):
- selection=self.table.selectedIndexes()
- file=selection[-1].data()
- return file
+ try:
+ selection=self.table.selectedIndexes()
+ file=selection[-1].data()
+ return file
+ except IndexError as e:
+ logging.warning(e)
+ except Exception as e:
+ logging.exception(e)
def build(self):
files=glob(os.path.join(config["document_directory"], "**", "*.mpaz"), recursive=True)
with zf.open("prescription.json") as pf:
pres=json.loads(pf.read())
self.index.append([pres["pid"], pres["id"], pres["name"], pres["dob"], pres["age"], pres["sex"], pres["date"], pres["diagnosis"], file])
- except Exception as e:
+ except KeyError as e:
logging.warning(e)
+ except Exception as e:
+ logging.exception(e)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def load(self):
model=QStandardItemModel()
QMessageBox.information(self, "File exists", "PLUGIN <strong>"+name+"</strong> is already installed.")
QMessageBox.information(self, "Restart", "Please restart MedScript for the changes to take effect.")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def cmd_uninstall(self):
txt=self.installed.currentItem().text().split("\t")
for i in self.plugin["name"]:
self.installed.addItem("[plugin]\t"+i)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
if(message):
self.showMessage(message)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def open(self, prescription):
for i in self.plugins:
if(message):
self.showMessage(message)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def save(self, prescription):
for i in self.plugins:
if(message):
self.showMessage(message)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def refresh(self, prescription):
for i in self.plugins:
if(message):
self.showMessage(message)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def run(self, module, prescription):
try:
if(message):
self.showMessage(message)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def input(self):
try:
else:
return ""
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def showMessage(self, message, index=None):
QMessageBox.information(None, "Information", message)
self.index=index
def run(self):
- prescription_copy=copy.deepcopy(self.prescription)
- message=self.function(prescription_copy)
- self.pluginComplete.emit(message, self.index)
+ try:
+ prescription_copy=copy.deepcopy(self.prescription)
+ message=self.function(prescription_copy)
+ self.pluginComplete.emit(message, self.index)
+ except Exception as e:
+ logging.exception(e)
else:
self.properties = None
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def read_from(self, file):
try:
else:
self.properties = None
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def get_json(self):
return(json.dumps(self, default=lambda o: o.__dict__, indent=4))
except AttributeError as e:
pass
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
f.write(self.get_json())
self.file=file
except Exception as e:
QMessageBox.warning(self,"Display failed", "Failed to display file.")
self.hide()
- logging.warning(e)
+ logging.exception(e)
class UnrenderBox(QDialog):
try:
data["date"]=datetime.datetime.strptime(data["date"], "%Y-%m-%d %H:%M:%S")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
output=template_data.render(data)
target_file.write(output)
return(target)
self.input_root.setText(self.config["root_bundle"])
except Exception as e:
QMessageBox.critical(self,"Failed to load", "Failed to load the data into the application.")
- logging.warning(e)
+ logging.exception(e)
def save(self):
if(QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm Save", "This action will overwrite the previous configuration. Continue?")):
self.close()
except Exception as e:
QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.")
- logging.warning(e)
+ logging.exception(e)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
with open(config_file) as f:
self.config=json.loads(f.read()) | config
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
self.config=config
self.setWindowTitle("Configuration")
if(not Signature.verify_chain(certificate)):
return False
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
return False
with open(certificate, "rb") as f:
subattr+=i.oid._name+":"+i.value+"\n"
return subattr
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
return False
def verify_chain(cert_chain_path):
class Tabular():
def export(filename):
- files=glob(os.path.join(config["document_directory"], "**", "*.mpaz"), recursive=True)
- with open(filename, "w", newline="") as ss:
- writer=csv.writer(ss, delimiter=config["preset_delimiter"], quoting=csv.QUOTE_MINIMAL)
- writer.writerow(["pid", "id", "date", "name", "dob", "age", "sex", "address", "contact", "extra", "mode", "daw", "diagnosis", "note", "report", "advice", "investigation", "medication", "additional", "certificate", "prescriber"])
- for file in files:
- try:
- with ZipFile(file) as zf:
- with zf.open("prescription.json") as pf:
- pres=json.loads(pf.read())
- writer.writerow([pres["pid"], pres["id"], pres["date"], pres["name"], pres["dob"], pres["age"], pres["sex"], pres["address"], pres["contact"], pres["extra"], pres["mode"], pres["daw"], pres["diagnosis"], pres["note"], pres["report"], pres["advice"], pres["investigation"], pres["medication"], pres["additional"], pres["certificate"], pres["prescriber"]["name"]])
- except Exception as e:
- logging.warning(e)
+ try:
+ files=glob(os.path.join(config["document_directory"], "**", "*.mpaz"), recursive=True)
+ with open(filename, "w", newline="") as ss:
+ writer=csv.writer(ss, delimiter=config["preset_delimiter"], quoting=csv.QUOTE_MINIMAL)
+ writer.writerow(["pid", "id", "date", "name", "dob", "age", "sex", "address", "contact", "extra", "mode", "daw", "diagnosis", "note", "report", "advice", "investigation", "medication", "additional", "certificate", "prescriber"])
+ for file in files:
+ try:
+ with ZipFile(file) as zf:
+ with zf.open("prescription.json") as pf:
+ pres=json.loads(pf.read())
+ writer.writerow([pres["pid"], pres["id"], pres["date"], pres["name"], pres["dob"], pres["age"], pres["sex"], pres["address"], pres["contact"], pres["extra"], pres["mode"], pres["daw"], pres["diagnosis"], pres["note"], pres["report"], pres["advice"], pres["investigation"], pres["medication"], pres["additional"], pres["certificate"], pres["prescriber"]["name"]])
+ except Exception as e:
+ logging.exception(e)
+ except FileNotFoundError as e:
+ logging.warning(e)
+ except Exception as e:
+ logging.exception(e)
self.save_state=md5(self.prescription.get_json().encode()).hexdigest()
self.load_attachment(self.current_file.list())
self.unchanged_state=True
+ except FileNotFoundError as e:
+ logging.warning(e)
except Exception as e:
QMessageBox.warning(self,"Open failed", "Failed to open file.")
- logging.warning(e)
+ logging.exception(e)
def cmd_copy(self, data):
self.cmd_new()
self.save_state=md5(self.prescription.get_json().encode()).hexdigest()
except Exception as e:
QMessageBox.warning(self,"Save failed", "Failed to save file.")
- logging.warning(e)
+ logging.exception(e)
def cmd_save_as(self):
suggest=self.prescription.id if(self.prescription.id) else self.prescription.name
logging.warning(e)
QMessageBox.information(self, "Failed to load", "Failed to sign. Please check if certificate and key match.")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
QMessageBox.information(self, "Failed", "Failed to sign.")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
else:
QMessageBox.information(self, "Save first", "Please save the file before signing.")
logging.warning(e)
QMessageBox.warning(self, "No Siganture", "No signature was found.")
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
QMessageBox.warning(self, "Failed", "Failed to verify.")
def cmd_tabular(self):
Tabular.export(filename)
QMessageBox.information(self, "Data Exported", "Data exported to."+filename)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
QMessageBox.critical(self, "Export failed", "Failed to export the data.")
def cmd_index(self):
d=QDateTime.fromString(pdate.strftime("%Y-%m-%d %H:%M:%S"), "yyyy-MM-dd hh:mm:ss")
except Exception as e:
QMessageBox.warning(self,"Failed to load", str(e))
- logging.warning(e)
+ logging.exception(e)
self.input_date.setDateTime(d)
self.input_id.setText(id)
self.input_pid.setText(pid)
self.label_prescriber.setText(self.prescriber.name)
except Exception as e:
QMessageBox.warning(self,"Failed to load", "Failed to load the data into the application.")
- logging.warning(e)
+ logging.exception(e)
def load_interface_from_instance(self):
if(self.current_file.has_template()):
self.input_attachment.addItem(new)
except Exception as e:
QMessageBox.warning(self,"Attach failed", "Failed to attach file.")
- logging.warning(e)
+ logging.exception(e)
def remove_attachment(self):
index=self.input_attachment.currentRow()
try:
shutil.copyfile(self.input_attachment.currentItem().text(), QFileDialog.getSaveFileName(self, "Save Attachment", os.path.join(config["document_directory"], os.path.basename(self.input_attachment.currentItem().text())))[0])
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
def load_attachment(self, attachments):
for attach in attachments:
action_plugin[-1].triggered.connect(partial(self.plugin.run, i[0], self.prescription))
action_plugin[-1].triggered.connect(self.load_interface_from_instance)
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
menu_plugin=menubar.addMenu("Plugin")
for i in action_plugin:
menu_plugin.addAction(i)
templates.remove(os.path.basename(config["template"]))
templates.insert(0, os.path.basename(config["template"]))
except Exception as e:
- logging.warning(e)
+ logging.exception(e)
self.input_template.addItems(templates)
toolbar.addWidget(self.input_template)
spacer=QWidget(self)