def clean_expired_submissions(fy17q1_subs=False):
    """ Cleans the database of expired submissions

        Definition of an expired submission:
            * unpublished
            * DABS test submission or certifiable FY17Q1 submissions
            * has not been updated (including any of its jobs) in over 6 months

        Args:
            fy17q1_subs: whether to specifically remove expired submissions from FY17Q1
    """

    sess = GlobalDB.db().session

    logger.info("Getting expired submissions")
    if fy17q1_subs:
        expired_submissions = sess.query(Submission).filter(
            Submission.publish_status_id == PUBLISH_STATUS_DICT['unpublished'],
            Submission.is_fabs.is_(False),
            Submission.reporting_fiscal_year == 2017,
            Submission.reporting_fiscal_period == 3).all()
    else:
        updated_at_view = SubmissionUpdatedView()
        expiration_cutoff = datetime.utcnow() - relativedelta(months=6)
        expired_submissions = sess.query(Submission).filter(
            Submission.publish_status_id == PUBLISH_STATUS_DICT['unpublished'],
            Submission.test_submission.is_(True),
            updated_at_view.updated_at < expiration_cutoff).outerjoin(
                updated_at_view.table, updated_at_view.submission_id ==
                Submission.submission_id).all()
    expired_submission_ids = [
        exp_sub.submission_id for exp_sub in expired_submissions
    ]
    logger.info("Expired submissions (count: {}): {}".format(
        len(expired_submission_ids), expired_submission_ids))

    logger.info("Deleting expired submissions")
    for submission in expired_submissions:
        delete_all_submission_data(submission)
        sess.commit()
    logger.info("Database cleaned of expired submissions")

    return expired_submission_ids
Ejemplo n.º 2
0
 def delete_submission(submission):
     """ Deletes all data associated with the specified submission
         NOTE: THERE IS NO WAY TO UNDO THIS
     """
     return delete_all_submission_data(submission)
 def delete_submission(submission):
     """ Deletes all data associated with the specified submission
         NOTE: THERE IS NO WAY TO UNDO THIS
     """
     return delete_all_submission_data(submission)