import json
import logging
import os
from emop.lib.utilities import mkdirs_exists_ok
logger = logging.getLogger('emop')
[docs]class EmopPayload(object):
def __init__(self, settings, proc_id):
self.settings = settings
self.input_path = self.settings.payload_input_path
self.output_path = self.settings.payload_output_path
self.completed_output_path = self.settings.payload_completed_path
self.uploaded_output_path = self.settings.payload_uploaded_path
self.proc_id = proc_id
self.input_filename = os.path.join(self.input_path, "%s.json" % self.proc_id)
self.output_filename = os.path.join(self.output_path, "%s.json" % self.proc_id)
self.completed_output_filename = os.path.join(self.completed_output_path, "%s.json" % self.proc_id)
self.uploaded_output_filename = os.path.join(self.uploaded_output_path, "%s.json" % self.proc_id)
[docs] def file_exists(self, filename):
logger.debug("Checking for payload at %s", filename)
if os.path.isfile(filename):
return True
else:
return False
[docs] def output_exists(self):
return self.file_exists(self.output_filename)
[docs] def completed_output_exists(self):
return self.file_exists(self.completed_output_filename)
[docs] def uploaded_output_exists(self):
return self.file_exists(self.uploaded_output_filename)
[docs] def save(self, data, dirname, filename, overwrite=False):
if not os.path.isdir(dirname):
logger.debug("Creating payload directory %s" % dirname)
mkdirs_exists_ok(dirname)
if not overwrite and os.path.exists(filename):
logger.error("payload file %s already exists" % filename)
return None
if overwrite:
logger.debug("Overwriting payload file at %s" % filename)
else:
logger.debug("Saving payload to %s" % filename)
with open(filename, 'w') as outfile:
json.dump(data, outfile)
return True
[docs] def load(self, filename):
if not os.path.isfile(filename):
logger.error("payload file %s does not exist" % filename)
return None
logger.debug("Loading payload from %s" % filename)
with open(filename) as datafile:
try:
data = json.load(datafile)
except ValueError:
logger.error("EmopPayload: Invalid JSON file %s" % filename)
return None
return data
[docs] def save_output(self, data, overwrite=False):
dirname = self.output_path
filename = self.output_filename
save_status = self.save(data=data, dirname=dirname, filename=filename, overwrite=overwrite)
return save_status
[docs] def save_completed_output(self, data, overwrite=False):
dirname = self.completed_output_path
filename = self.completed_output_filename
save_status = self.save(data=data, dirname=dirname, filename=filename, overwrite=overwrite)
if save_status and os.path.isfile(self.output_filename):
logger.debug("Removing payload file %s" % self.output_filename)
os.remove(self.output_filename)
return save_status
[docs] def save_uploaded_output(self, data):
dirname = self.uploaded_output_path
filename = self.uploaded_output_filename
save_status = self.save(data=data, dirname=dirname, filename=filename, overwrite=True)
if save_status:
if self.completed_output_exists():
logger.debug("Removing payload file %s" % self.completed_output_filename)
os.remove(self.completed_output_filename)
elif self.output_exists():
logger.debug("Removing payload file %s" % self.output_filename)
os.remove(self.output_filename)
return save_status