Source code for flexget.plugins.filter.age
from datetime import datetime
from dateutil.parser import parse as dateutil_parse
from loguru import logger
from flexget import plugin
from flexget.event import event
from flexget.utils.tools import parse_timedelta
logger = logger.bind(name='age')
[docs]
class Age:
"""Rejects/accepts entries based on date in specified entry field.
Example:
age:
field: 'accessed' # 'accessed' is a field set from filesystem plugin
age: '7 days'
action: 'accept'
"""
schema = {
'type': 'object',
'properties': {
'field': {'type': 'string'},
'action': {'type': 'string', 'enum': ['accept', 'reject']},
'age': {'type': 'string', 'format': 'interval'},
},
'required': ['field', 'action', 'age'],
'additionalProperties': False,
}
[docs]
def on_task_filter(self, task, config):
for entry in task.entries:
field = config['field']
if field not in entry:
entry.fail(f'Field {field} does not exist')
continue
field_value = entry[field]
if isinstance(field_value, datetime):
field_date = field_value
elif isinstance(field_value, float):
field_date = datetime.fromtimestamp(field_value)
elif isinstance(field_value, str):
try:
field_date = dateutil_parse(entry[field])
except ValueError:
logger.warning(
'Entry {} ignored: {} is not a valid date', entry['title'], field_value
)
continue
else:
logger.warning(
'Entry {} ignored: {} is not a valid date', entry['title'], field_value
)
continue
age_cutoff = datetime.now() - parse_timedelta(config['age'])
if field_date < age_cutoff:
info_string = 'Date in field `{}` is older than {}'.format(field, config['age'])
if config['action'] == 'accept':
entry.accept(info_string)
else:
entry.reject(info_string)
logger.debug(
'Entry {} was {}ed because date in field `{}` is older than {}',
entry['title'],
config['action'],
field,
config['age'],
)
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(Age, 'age', api_ver=2)