def run_export(objects, ie_id, user_id, url_root): """Run export""" with app.app_context(): try: user = person.Person.query.get(user_id) setattr(g, '_current_user', user) ie = import_export.get(ie_id) check_for_previous_run() content, _ = make_export(objects) db.session.refresh(ie) if ie.status == "Stopped": return ie.status = "Finished" ie.content = content db.session.commit() job_emails.send_email(job_emails.EXPORT_COMPLETED, user.email, url_root, ie.title) except Exception as e: # pylint: disable=broad-except logger.exception("Export failed: %s", e.message) try: ie.status = "Failed" ie.end_date = datetime.now() db.session.commit() job_emails.send_email(job_emails.EXPORT_FAILED, user.email, url_root) except Exception as e: # pylint: disable=broad-except logger.exception("Failed to set job status: %s", e.message)
def run_import_phases(ie_id, user_id, url_root): # noqa: ignore=C901 """Execute import phases""" with app.app_context(): try: user = person.Person.query.get(user_id) setattr(g, '_current_user', user) ie_job = import_export.get(ie_id) check_for_previous_run() csv_data = read_csv_file(StringIO(ie_job.content.encode("utf-8"))) if ie_job.status == "Analysis": info = make_import(csv_data, True) db.session.rollback() db.session.refresh(ie_job) if ie_job.status == "Stopped": return ie_job.results = json.dumps(info) for block_info in info: if block_info["block_errors"] or block_info["row_errors"]: ie_job.status = "Analysis Failed" db.session.commit() job_emails.send_email(job_emails.IMPORT_FAILED, user.email, url_root, ie_job.title) return for block_info in info: if block_info["block_warnings"] or block_info["row_warnings"]: ie_job.status = "Blocked" db.session.commit() job_emails.send_email(job_emails.IMPORT_BLOCKED, user.email, url_root, ie_job.title) return ie_job.status = "In Progress" db.session.commit() if ie_job.status == "In Progress": info = make_import(csv_data, False) ie_job.results = json.dumps(info) for block_info in info: if block_info["block_errors"] or block_info["row_errors"]: ie_job.status = "Analysis Failed" job_emails.send_email(job_emails.IMPORT_FAILED, user.email, url_root, ie_job.title) db.session.commit() return ie_job.status = "Finished" db.session.commit() job_emails.send_email(job_emails.IMPORT_COMPLETED, user.email, url_root, ie_job.title) except Exception as e: # pylint: disable=broad-except logger.exception("Import failed: %s", e.message) try: ie_job.status = "Failed" ie_job.end_date = datetime.now() db.session.commit() job_emails.send_email(job_emails.IMPORT_FAILED, user.email, url_root, ie_job.title) except Exception as e: # pylint: disable=broad-except logger.exception("Failed to set job status: %s", e.message)
def notify_user(ie_job): """Send notification about crashed import/export.""" logger.info( "Send notification to '%s' about failed %s.", ie_job.created_by.email, ie_job.job_type, ) if ie_job.job_type == all_models.ImportExport.IMPORT_JOB_TYPE: job_emails.send_email(job_emails.IMPORT_FAILED, ie_job.created_by.email, ie_job.title) else: job_emails.send_email(job_emails.EXPORT_CRASHED, ie_job.created_by.email)
def test_url_in_notification(self, ie_id, url): """Test for checking url in notification when exporting""" with patch( "ggrc.notifications.common.send_email") as common_send_email: data = { "body": self.template["body"], "title": self.template["title"], "url": url } body = settings.EMAIL_IMPORT_EXPORT.render(import_export=data) with app.test_request_context(base_url="http://test"): send_email(self.template, self.user_email, "", ie_id) common_send_email.assert_called_with(self.user_email, self.subject, body)
def test_url_in_notification(self, ie_id, url): """Test for checking url in notification when exporting""" with patch("ggrc.notifications.common.send_email") as common_send_email: data = { "body": self.template["body"], "title": self.template["title"], "url": url } body = settings.EMAIL_IMPORT_EXPORT.render( import_export=data ) with app.test_request_context(base_url="http://test"): send_email(self.template, self.user_email, "", ie_id) common_send_email.assert_called_with( self.user_email, self.subject, body )
def run_export(task): """Run export""" user = get_current_user() ie_id = task.parameters.get("ie_id") objects = task.parameters.get("objects") exportable_objects = task.parameters.get("exportable_objects") try: ie = import_export.get(ie_id) check_for_previous_run() content, _ = make_export(objects, exportable_objects) db.session.refresh(ie) if ie.status == "Stopped": return utils.make_simple_response() ie.status = "Finished" ie.end_at = datetime.utcnow() ie.content = content db.session.commit() job_emails.send_email(job_emails.EXPORT_COMPLETED, user.email, ie.title, ie_id) except Exception as e: # pylint: disable=broad-except logger.exception("Export failed: %s", e.message) ie = import_export.get(ie_id) try: ie.status = "Failed" ie.end_at = datetime.utcnow() db.session.commit() job_emails.send_email(job_emails.EXPORT_FAILED, user.email) return utils.make_simple_response(e.message) except Exception as e: # pylint: disable=broad-except logger.exception("%s: %s", app_errors.STATUS_SET_FAILED, e.message) return utils.make_simple_response(e.message) return utils.make_simple_response()
def run_export(task): """Run export""" user = login.get_current_user() ie_id = task.parameters.get("ie_id") objects = task.parameters.get("objects") exportable_objects = task.parameters.get("exportable_objects") try: ie_job = import_export.get(ie_id) content, _ = make_export(objects, exportable_objects, ie_job) db.session.refresh(ie_job) if ie_job.status == "Stopped": return utils.make_simple_response() ie_job.status = "Finished" ie_job.end_at = datetime.utcnow() ie_job.content = content db.session.commit() job_emails.send_email(job_emails.EXPORT_COMPLETED, user.email, ie_job.title, ie_id) except models_exceptions.ExportStoppedException: logger.info("Export was stopped by user.") except Exception as e: # pylint: disable=broad-except logger.exception("Export failed: %s", e.message) ie_job = import_export.get(ie_id) try: ie_job.status = "Failed" ie_job.end_at = datetime.utcnow() db.session.commit() job_emails.send_email(job_emails.EXPORT_CRASHED, user.email) return utils.make_simple_response(e.message) except Exception as e: # pylint: disable=broad-except logger.exception("%s: %s", app_errors.STATUS_SET_FAILED, e.message) return utils.make_simple_response(e.message) return utils.make_simple_response()
def run_import_phases(task): """Execute import phases""" ie_id = task.parameters.get("ie_id") user = login.get_current_user() try: ie_job = import_export.get(ie_id) csv_data = import_helper.read_csv_file( StringIO(ie_job.content.encode("utf-8")) ) if ie_job.status == "Analysis": info = make_import(csv_data, True, ie_job) db.session.rollback() db.session.refresh(ie_job) if ie_job.status == "Stopped": return utils.make_simple_response() ie_job.results = json.dumps(info) for block_info in info: if block_info["block_errors"] or block_info["row_errors"]: ie_job.status = "Analysis Failed" ie_job.end_at = datetime.utcnow() db.session.commit() job_emails.send_email(job_emails.IMPORT_FAILED, user.email, ie_job.title) return utils.make_simple_response() for block_info in info: if block_info["block_warnings"] or block_info["row_warnings"]: ie_job.status = "Blocked" db.session.commit() job_emails.send_email(job_emails.IMPORT_BLOCKED, user.email, ie_job.title) return utils.make_simple_response() ie_job.status = "In Progress" db.session.commit() if ie_job.status == "In Progress": info = make_import(csv_data, False, ie_job) ie_job.results = json.dumps(info) for block_info in info: if block_info["block_errors"] or block_info["row_errors"]: ie_job.status = "Analysis Failed" ie_job.end_at = datetime.utcnow() job_emails.send_email(job_emails.IMPORT_FAILED, user.email, ie_job.title) db.session.commit() return utils.make_simple_response() ie_job.status = "Finished" ie_job.end_at = datetime.utcnow() db.session.commit() job_emails.send_email(job_emails.IMPORT_COMPLETED, user.email, ie_job.title) except Exception as e: # pylint: disable=broad-except logger.exception(e.message) ie_job = import_export.get(ie_id) try: ie_job.status = "Failed" ie_job.end_at = datetime.utcnow() db.session.commit() job_emails.send_email(job_emails.IMPORT_FAILED, user.email, ie_job.title) return utils.make_simple_response(e.message) except Exception as e: # pylint: disable=broad-except logger.exception("%s: %s", app_errors.STATUS_SET_FAILED, e.message) return utils.make_simple_response(e.message) return utils.make_simple_response()