def cleanup_old_files(*, base_filter_id): log.info('Starting clean up of old MLBF folders...') six_months_ago = datetime_to_ts(datetime.now() - timedelta(weeks=26)) base_filter_ts = int(base_filter_id) for dir in storage.listdir(settings.MLBF_STORAGE_PATH)[0]: dir = force_str(dir) # skip non-numeric folder names if not dir.isdigit(): log.info('Skipping %s because not a timestamp', dir) continue dir_ts = int(dir) dir_as_date = datetime.fromtimestamp(dir_ts / 1000) # delete if >6 months old and <base_filter_id if dir_ts > six_months_ago: log.info('Skipping %s because < 6 months old (%s)', dir, dir_as_date) elif dir_ts > base_filter_ts: log.info( 'Skipping %s because more recent (%s) than base mlbf (%s)', dir, dir_as_date, datetime.fromtimestamp(base_filter_ts / 1000), ) else: log.info('Deleting %s because > 6 months old (%s)', dir, dir_as_date) rm_stored_dir(os.path.join(settings.MLBF_STORAGE_PATH, dir), storage)
def calc_checksum(theme_id, **kw): """For migration 596.""" lfs = LocalFileStorage() theme = Persona.objects.get(id=theme_id) header = theme.header_path footer = theme.footer_path # Delete invalid themes that are not images (e.g. PDF, EXE). try: Image.open(header) Image.open(footer) except IOError: log.info('Deleting invalid theme [%s] (header: %s) (footer: %s)' % (theme.addon.id, header, footer)) theme.addon.delete() theme.delete() rm_stored_dir(header.replace('header.png', ''), storage=lfs) return # Calculate checksum and save. try: theme.checksum = make_checksum(header, footer) theme.save() except IOError as e: log.error(str(e))
def test_rm_stored_dir(): tmp = tempfile.mkdtemp(dir=settings.TMP_PATH) jn = partial(os.path.join, tmp) try: storage.save(jn('file1.txt'), ContentFile('<stuff>')) storage.save(jn('one/file1.txt'), ContentFile('')) storage.save(jn('one/two/file1.txt'), ContentFile('moar stuff')) storage.save(jn(u'one/kristi\u0107/kristi\u0107.txt'), ContentFile('')) rm_stored_dir(jn('one')) assert not storage.exists(jn('one')) assert not storage.exists(jn('one/file1.txt')) assert not storage.exists(jn('one/two')) assert not storage.exists(jn('one/two/file1.txt')) assert not storage.exists(jn(u'one/kristi\u0107/kristi\u0107.txt')) assert storage.exists(jn('file1.txt')) finally: rm_local_tmp_dir(tmp)
def test_rm_stored_dir(): tmp = tempfile.mkdtemp() jn = partial(os.path.join, tmp) try: storage.save(jn("file1.txt"), ContentFile("<stuff>")) storage.save(jn("one/file1.txt"), ContentFile("")) storage.save(jn("one/two/file1.txt"), ContentFile("moar stuff")) storage.save(jn(u"one/kristi\u0107/kristi\u0107.txt"), ContentFile("")) rm_stored_dir(jn("one")) yield (eq_, storage.exists(jn("one")), False) yield (eq_, storage.exists(jn("one/file1.txt")), False) yield (eq_, storage.exists(jn("one/two")), False) yield (eq_, storage.exists(jn("one/two/file1.txt")), False) yield (eq_, storage.exists(jn(u"one/kristi\u0107/kristi\u0107.txt")), False) yield (eq_, storage.exists(jn("file1.txt")), True) finally: rm_local_tmp_dir(tmp)
def clean_up_files(self): tmp_hive_folder = self.get_tmp_hive_folder() if os.path.isdir(tmp_hive_folder): rm_stored_dir(tmp_hive_folder)