Example #1
0
    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
Example #2
0
def default_connector( this, other ):
    return jaccard( this.tags.all(), other.tags.all() )