def allow( self ): result = redirect( "/" ) tags = self.request.POST.getlist('user[tags][]') tags = [ t.encode("utf8") for t in tags ] tags = [ t.lower() for t in tags ] active_wishes = self.person.wishes().filter( is_active=True ) if active_wishes.count() >= MAX_WISHES_PER_USER: return self.dialog( "Feil", "Du har altfor mange ønsker" ) if not len( tags ): return self.dialog( "Feil", "Du glemte å skrive inn nøkkelord" ) elif len( tags ) > MAX_TAGS_PER_WISH: return self.dialog( "Error", "Du har ført inn for mange nøkkelord. Prøv å ha %d for hvert ønske." %\ MAX_TAGS_PER_WISH ) def extract_course_tags( tags ): pattern = r'^[\-\w]+\d{4}' return [tag for tag in tags if re.findall(pattern, tag)] courses = extract_course_tags( tags ) # check if user has similar wishes has_similar = False existing_wishes = Wish.objects.filter( person=self.person ).filter( is_active=True ) for w in existing_wishes: rating = jaccard( [t.name for t in w.tags.all()], tags ) if rating > MAX_WISH_SIMILARITY: return self.dialog( "Feil", "Du har et veldig likt ønske allerede. Slett det hvis du vil endre nøkkelord." ) if len( courses ) > 1: return self.dialog( "Feil", "Du har angitt flere enn ett emne. Hvert ønske skal inneholde kun ett." ) person = UserManager.getPerson( self.request.user.username ) WishManager.addWish( person, tags, courses ) return result
def default_connector( this, other ): return jaccard( this.tags.all(), other.tags.all() )