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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
    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)
Beispiel #7
0
  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
      )
Beispiel #8
0
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()
Beispiel #9
0
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()
Beispiel #10
0
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()