def clean(self, value): """Form field for custom validation entering verses""" if not value: return super(VerseFormField, self).clean(value) try: verse = Verse(value) except (RangeError, Exception) as err: raise forms.ValidationError(err.__str__()) # Return the cleaned and processed data. NB: We use the formatted string for ease of reading/editing. return super(VerseFormField, self).clean(verse.format())
def clean(self): # Checking to see if the start (and end) verse is in the given # version, if not populate the appropriate self._errors entry. version = self.cleaned_data['version'].model_class().translation if 'start_verse' in self.cleaned_data: try: verse = Verse(self.cleaned_data['start_verse'] + ' ' + version) except (RangeError, Exception) as err: self._errors['start_verse'] = self.error_class([err.__str__()]) del self.cleaned_data['start_verse'] if 'end_verse' in self.cleaned_data and self.cleaned_data['end_verse']: try: verse = Verse(self.cleaned_data['end_verse'] + ' ' + version) except (RangeError, Exception) as err: self._errors['end_verse'] = self.error_class([err.__str__()]) del self.cleaned_data['end_verse'] return super(ScriptureForm, self).clean()
def passage_lookup(request, version, template_name=None, template_loader=loader, extra_context=None, context_processors=None, template_object_name='object', mimetype=None): """ Given a textual passage via GET[q] displays the reference, or simply displays a passage entry form. @args:: `version`: The translation to be used. GET[q]: `Romans 1:1-2:3`, or `Romans 1:1 - 1 Corinthians 2:3`, etc. """ passage_reference = request.GET.get('q', False) if passage_reference: if '-' in passage_reference: ref = passage_reference.split('-') # Split the passage_reference into start and end verses. if len(ref) > 2: # Whoa, too many `-` characters... raise RangeError("We can't make sense of your chapter:verse passage reference.") start_verse = Verse(ref[0].strip()) # Now the end verse. This could be in the same book, or a different book entirely. # eg: `Romans 1:1-2:3`, or `Romans 1:1 - 1 Corinthians 2:3` end_ref = ref[1].strip() # If we can't find the book reference, assume it is part of the same book. try: b = book_re.search(ref[1].strip()).group(0) except: # Assume the same book: end_ref = '%s ' % (bible_data()[start_verse.book]['name'], end_ref) end_verse = Verse(end_ref) else: start_verse = start_verse end_verse = None Scripture(start_verse=start_verse.format(), end_verse=end_verse) return HttpResponse