コード例 #1
0
	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")