Skip to content

Instantly share code, notes, and snippets.

@kingamajick
Created March 28, 2015 17:16
Show Gist options
  • Save kingamajick/760f2a91a4197648533a to your computer and use it in GitHub Desktop.
Save kingamajick/760f2a91a4197648533a to your computer and use it in GitHub Desktop.
from __future__ import unicode_literals, division, absolute_import
import os
import re
import logging
from flexget import plugin
from flexget.event import event
from flexget.utils.template import RenderError
log = logging.getLogger('clean_target')
class CleanupTarget(object):
schema = {
'type': 'object',
'properties': {
'location': {'type': 'string', 'format': 'path'},
'remove': {'type': 'string', 'format': 'regex'},
},
'additionalProperties': False
}
@plugin.priority(255)
def on_task_output(self, task, config):
location = config.get('location', "")
remove = config.get('remove', "")
if not location:
return
if not remove:
return
for entry in task.accepted:
self.clean_target(task, entry, location, remove)
def clean_target(self, task, entry, location, remove):
try:
location_rendered = entry.render(location)
remove_rendered = entry.render(remove)
except RenderError as err:
raise plugin.PluginWarning('Path value replacement `%s` failed: %s' % (remove, err.args[0]))
if not os.path.isdir(location_rendered):
self.log.error('Location is not a directory: %s' % location_rendered)
return
try:
pattern = re.compile(remove_rendered, re.IGNORECASE | re.UNICODE)
except re.error as e:
raise plugin.PluginError('Invalid regex `%s`: %s' % (remove_rendered, e))
for name in os.listdir(location_rendered):
path = os.path.join(location_rendered, name)
if os.path.isfile(path) and pattern.match(name):
if task.options.test:
self.log.info("Would clean %s" % path)
else:
try:
os.remove(path)
self.log.info("Cleaning %s" % path)
except os.error as e:
self.log.error('An error occurred trying to remove file %s: %s' % (path, e))
@event('plugin.register')
def register_plugin():
plugin.register(CleanupTarget, 'clean_target', api_ver=2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment