help='The type of media you would like to process')
bulk_run_parser.add_argument(
- 'state',
+ '--state',
default='processed',
+ nargs='?',
help='The state of the media you would like to process. Defaults to' \
" 'processed'")
+ bulk_run_parser.add_argument(
+ 'reprocess_command',
+ help='The reprocess command you intend to run')
+
bulk_run_parser.add_argument(
'reprocess_args',
nargs=argparse.REMAINDER,
###############
-
-def _set_media_type(args):
- """
- This will verify that all media id's are of the same media_type. If the
- --type flag is set, it will be replaced by the given media id's type.
-
- If they are trying to process different media types, an Exception will be
- raised.
- """
- if args[0].media_id:
- if len(args[0].media_id) == 1:
- args[0].type = MediaEntry.query.filter_by(id=args[0].media_id[0])\
- .first().media_type.split('.')[-1]
-
- elif len(args[0].media_id) > 1:
- media_types = []
-
- for id in args[0].media_id:
- media_types.append(MediaEntry.query.filter_by(id=id).first()
- .media_type.split('.')[-1])
- for type in media_types:
- if media_types[0] != type:
- raise Exception((u'You cannot reprocess different'
- ' media_types at the same time.'))
-
- args[0].type = media_types[0]
-
-
-def _reprocess_all(args):
- """
- This handles reprocessing if no media_id's are given.
- """
- if not args[0].type:
- # If no media type is given, we can either regenerate all thumbnails,
- # or try to reprocess all failed media
-
- if args[0].thumbnails:
- if args[0].available:
- print _('Available options for regenerating all processed'
- ' media thumbnails: \n'
- '\t --size: max_width max_height'
- ' (defaults to config specs)')
- else:
- #TODO regenerate all thumbnails
- pass
-
- # Reprocess all failed media
- elif args[0].state == 'failed':
- if args[0].available:
- print _('\n Available reprocess actions for all failed'
- ' media_entries: \n \t --initial_processing')
- else:
- #TODO reprocess all failed entries
- pass
-
- # If here, they didn't set the --type flag and were trying to do
- # something other the generating thumbnails or initial_processing
- else:
- raise Exception(_('You must set --type when trying to reprocess'
- ' all media_entries, unless you set --state'
- ' to "failed".'))
-
- else:
- _run_reprocessing(args)
-
-
-def _run_reprocessing(args):
- # Are they just asking for the available reprocessing options for the given
- # media?
- if args[0].available:
- if args[0].state == 'failed':
- print _('\n Available reprocess actions for all failed'
- ' media_entries: \n \t --initial_processing')
- else:
- result = hook_handle(('reprocess_action', args[0].type), args)
- if not result:
- print _('Sorry there is no available reprocessing for {}'
- ' entries in the {} state'.format(args[0].type,
- args[0].state))
- else:
- # Run media reprocessing
- return hook_handle(('media_reprocess', args[0].type), args)
-
-
-def _set_media_state(args):
- """
- This will verify that all media id's are in the same state. If the
- --state flag is set, it will be replaced by the given media id's state.
-
- If they are trying to process different media states, an Exception will be
- raised.
- """
- if args[0].media_id:
- # Only check if we are given media_ids
- if len(args[0].media_id) == 1:
- args[0].state = MediaEntry.query.filter_by(id=args[0].media_id[0])\
- .first().state
-
- elif len(args[0].media_id) > 1:
- media_states = []
-
- for id in args[0].media_id:
- media_states.append(MediaEntry.query.filter_by(id=id).first()
- .state)
-
- # Make sure that all media are in the same state
- for state in media_states:
- if state != media_states[0]:
- raise Exception(_('You can only reprocess media that is in'
- ' the same state.'))
-
- args[0].state = media_states[0]
-
- # If no state was set, then we will default to the processed state
- if not args[0].state:
- args[0].state = 'processed'
-
-
def available(args):
# Get the media type, either by looking up media id, or by specific type
try:
print " - %s" % processor.name
-def run(args):
+def run(args, media_id=None):
+ if not media_id:
+ media_id = args.media_id
try:
- media_entry, manager = get_entry_and_processing_manager(args.media_id)
+ media_entry, manager = get_entry_and_processing_manager(media_id)
# TODO: (maybe?) This could probably be handled entirely by the
# processor class...
reprocess_info=reprocess_request)
except ProcessingManagerDoesNotExist:
- entry = MediaEntry.query.filter_by(id=args.media_id).first()
+ entry = MediaEntry.query.filter_by(id=media_id).first()
print 'No such processing manager for {0}'.format(entry.media_type)
def bulk_run(args):
- pass
+ """
+ Bulk reprocessing of a given media_type
+ """
+ query = MediaEntry.query.filter_by(media_type=args.type,
+ state=args.state)
+
+ for entry in query:
+ run(args, entry.id)
def thumbs(args):
- #TODO regenerate thumbs for all processed media
- pass
+ """
+ Regenerate thumbs for all processed media
+ """
+ query = MediaEntry.query.filter_by(state='processed')
+
+ for entry in query:
+ try:
+ media_entry, manager = get_entry_and_processing_manager(entry.id)
+
+ # TODO: (maybe?) This could probably be handled entirely by the
+ # processor class...
+ try:
+ processor_class = manager.get_processor(
+ 'resize', media_entry)
+ except ProcessorDoesNotExist:
+ print 'No such processor "%s" for media with id "%s"' % (
+ 'resize', media_entry.id)
+ return
+ except ProcessorNotEligible:
+ print 'Processor "%s" exists but media "%s" is not eligible' % (
+ 'resize', media_entry.id)
+ return
+
+ reprocess_parser = processor_class.generate_parser()
+
+ # prepare filetype and size to be passed into reprocess_parser
+ if args.size:
+ extra_args = 'thumb --{0} {1} {2}'.format(
+ processor_class.thumb_size,
+ args.size[0],
+ args.size[1])
+ else:
+ extra_args = 'thumb'
+
+ reprocess_args = reprocess_parser.parse_args(extra_args.split())
+ reprocess_request = processor_class.args_to_request(reprocess_args)
+ run_process_media(
+ media_entry,
+ reprocess_action='resize',
+ reprocess_info=reprocess_request)
+
+ except ProcessingManagerDoesNotExist:
+ print 'No such processing manager for {0}'.format(entry.media_type)
def initial(args):