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
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)