def render(self, context): iterable = self.iterable.resolve(context) lookup = self.lookup.resolve(context) kwargs = dict((k, v.resolve(context)) for k, v in self.kwargs.iteritems()) helper = BulkAdjustmentHelper(iterable, lookup, **kwargs) context[self.asvar] = helper.info_dicts() return ''
def test_info_dicts__semiprepped(self): images = [ self.create_image("100x100.png"), self.create_image("100x100.png"), self.create_image("100x50_crop.png"), self.create_image("50x100_crop.png"), ] iterable = [BulkTestObject(image) for image in images] kwargs = {"width": 50, "height": 50, "adjustment": "crop"} helper = BulkAdjustmentHelper(iterable, "storage_path", **kwargs) with self.assertNumQueries(1): helper.info_dicts()
def test_info_dicts__semiprepped(self): images = [ self.create_image('100x100.png'), self.create_image('100x100.png'), self.create_image('100x50_crop.png'), self.create_image('50x100_crop.png'), ] iterable = [BulkTestObject(image) for image in images] kwargs = { 'width': 50, 'height': 50, 'adjustment': 'crop', } helper = BulkAdjustmentHelper(iterable, 'storage_path', **kwargs) with self.assertNumQueries(1): helper.info_dicts()
def handle_noargs(self, **options): if not hasattr(settings, 'DAGUERRE_PREADJUSTMENTS'): raise CommandError(NO_ADJUSTMENTS) adjustments = settings.DAGUERRE_PREADJUSTMENTS args = [] for (model_or_queryset, lookup), kwargs_list in adjustments.iteritems(): if isinstance(model_or_queryset, basestring): app_label, model_name = model_or_queryset.split('.') model_or_queryset = get_model(app_label, model_name) if issubclass(model_or_queryset, Model): queryset = model_or_queryset.objects.all() elif isinstance(model_or_queryset, QuerySet): queryset = model_or_queryset._clone() else: raise CommandError("Invalid model or queryset: {0}".format(model_or_queryset)) for kwargs in kwargs_list: args.append((queryset, lookup, kwargs)) skipped_count = 0 remaining = [] remaining_count = 0 for queryset, lookup, kwargs in args: bulk_helper = BulkAdjustmentHelper(queryset, lookup, **kwargs) query_kwargs = bulk_helper.get_query_kwargs() adjusted_images = AdjustedImage.objects.filter(**query_kwargs) for adjusted_image in adjusted_images: try: del bulk_helper.remaining[adjusted_image.storage_path] except KeyError: pass else: skipped_count += 1 remaining_count += len(bulk_helper.remaining) remaining.append((bulk_helper.remaining.keys(), kwargs)) self.stdout.write("Skipped {0} path{1} which have already been adjusted.\n".format(skipped_count, pluralize(skipped_count))) if remaining_count == 0: self.stdout.write("No paths remaining to adjust.\n") else: self.stdout.write("Adjusting {0} path{1}... ".format(remaining_count, pluralize(remaining_count))) self.stdout.flush() failed_count = 0 for storage_paths, kwargs in remaining: for storage_path in storage_paths: helper = AdjustmentHelper(storage_path, **kwargs) try: helper.adjust() except IOError: failed_count += 1 self.stdout.write("Done.\n") if failed_count: self.stdout.write("{0} path{1} failed due to I/O errors.".format(failed_count, pluralize(failed_count))) if options['remove']: queryset = AdjustedImage.objects.all() for qs, lookup, kwargs in args: bulk_helper = BulkAdjustmentHelper(qs, lookup, **kwargs) query_kwargs = bulk_helper.get_query_kwargs() queryset = queryset.exclude(**query_kwargs) count = queryset.count() if count == 0: self.stdout.write("No adjusted images found to remove.\n") else: self.stdout.write("Removing {0} adjusted image{1}... ".format(count, pluralize(count))) self.stdout.flush() queryset.delete() self.stdout.write("Done.\n") # For pre-1.5: add an extra newline. self.stdout.write("\n")