def clean_fields(self, exclude=None):
		if exclude is None:
			exclude = []
		
		try:
			super(Page, self).clean_fields(exclude)
		except ValidationError, e:
			errors = e.message_dict
		else:
			errors = {}
		
		if 'template' not in errors and 'template' not in exclude:
			try:
				self.template.clean_fields()
				self.template.clean()
			except ValidationError, e:
				errors['template'] = e.messages
		
		if errors:
			raise ValidationError(errors)
Ensures that the final two notes are only a semitone apart if the
dataset/ETHPy150Open ithinksw/philo/philo/models/pages.py/Page.clean_fields--crossover with--dataset/ETHPy150Open ntoll/foox/test/test_lilypond.py/TestLilypond.test_get_fourth_species_rising_final_cadence