Example #1
0
 def clean_name(self):
     value = self.cleaned_data['name']
     tag_names = parse_tag_input(value)
     if len(tag_names) > 1:
         raise ValidationError(_('Multiple tags were given.'))
     elif len(tag_names[0]) > settings.MAX_TAG_LENGTH:
         raise forms.ValidationError(
             _('A tag may be no more than %s characters long.') %
                 settings.MAX_TAG_LENGTH)
     return value
Example #2
0
 def clean(self, value):
     value = super(TagField, self).clean(value)
     if value == u'':
         return value
     for tag_name in parse_tag_input(value):
         if len(tag_name) > settings.MAX_TAG_LENGTH:
             raise forms.ValidationError(
                 _('Each tag may be no more than %s characters long.') %
                     settings.MAX_TAG_LENGTH)
     return value
Example #3
0
 def clean(self, value):
     value = super(TagField, self).clean(value)
     if value == u'':
         return value
     for tag_name in parse_tag_input(value):
         if len(tag_name) > settings.MAX_TAG_LENGTH:
             raise forms.ValidationError(
                 _('Each tag may be no more than %s characters long.') %
                     settings.MAX_TAG_LENGTH)
     return value
Example #4
0
 def clean_name(self):
     value = self.cleaned_data['name']
     tag_names = parse_tag_input(value)
     if len(tag_names) > 1:
         raise ValidationError(_('Multiple tags were given.'))
     elif len(tag_names[0]) > settings.MAX_TAG_LENGTH:
         raise forms.ValidationError(
             _('A tag may be no more than %s characters long.') %
                 settings.MAX_TAG_LENGTH)
     return value
Example #5
0
    def update_tags(self, obj, tag_names, LANG=None):
        """
        Update tags associated with an object.
        """

        if LANG is None:
            LANG = obj.LANG if hasattr(obj, 'LANG') else LANGUAGE_CODE

        # all query set
        all_query_set = super(TagManager,
                              self).get_query_set().filter(LANG=LANG)

        ctype = ContentType.objects.get_for_model(obj)
        current_tags = list(
            all_query_set.filter(items__content_type__pk=ctype.pk,
                                 items__object_id=obj.pk))

        updated_tag_names = parse_tag_input(tag_names)
        if settings.FORCE_LOWERCASE_TAGS:
            updated_tag_names = [t.lower() for t in updated_tag_names]
        updated_tags = []
        for tag_name in updated_tag_names:
            found = all_query_set.filter(tagalias__name__iexact=tag_name)
            if len(found):
                updated_tags.append(found[0])
            else:
                found = all_query_set.filter(name__iexact=tag_name)
                if len(found):
                    updated_tags.append(found[0])
                else:
                    updated_tags.append(self.create(name=tag_name, LANG=LANG))

        # Remove tags which no longer apply
        tags_for_removal = [
            tag for tag in current_tags if tag not in updated_tags
        ]

        tag_count = TaggedItem._default_manager.all().values('object_id')
        tag_count = tag_count.filter(tag__LANG=obj.LANG)
        tag_count = tag_count.count()

        if len(tags_for_removal):
            TaggedItem._default_manager.filter(
                content_type__pk=ctype.pk,
                object_id=obj.pk,
                tag__in=tags_for_removal).delete()
            for tag in tags_for_removal:
                self.update_tag_weight(tag, tag_count)
        # Add new tags
        for tag in updated_tags:
            if tag not in current_tags:
                current_tags.append(tag)
                self.update_tag_weight(tag, tag_count)
                TaggedItem._default_manager.create(tag=tag, object=obj)
Example #6
0
    def clean_aliases( self ):
        aliases = parse_tag_input( self.cleaned_data['aliases'] )
        if len( aliases ) == 0:
            raise forms.ValidationError( _( 'You must enter at least one alias' ) )

        for alias in aliases:
            # alias cannot be existing tag
            if Tag.objects.filter( name=alias ).count() > 0:
                raise forms.ValidationError( _( 'Alias cannot be existing tag, first rename tag:' ) + "'%s'" % alias )

        return aliases
Example #7
0
    def get_screenings(cls, date, to_date, tags=None):
        query = Screening.objects.filter(utc_time__gte=date,
                                         utc_time__lt=to_date)
        if tags:
            from film20.tagging.utils import parse_tag_input
            tags = parse_tag_input(tags.lower())

            query = query.filter(
                film__film__objectlocalized__LANG=settings.LANGUAGE_CODE,
                film__film__objectlocalized__tagged_items__tag__name__in=tags,
            )
        return query.order_by('utc_time').select_related('film', 'channel')
Example #8
0
    def get_screenings(cls, date, to_date, tags=None):
        query = Screening.objects.filter(
                        utc_time__gte=date,
                        utc_time__lt=to_date)
        if tags:
            from film20.tagging.utils import parse_tag_input
            tags = parse_tag_input(tags.lower())

            query = query.filter(
                film__film__objectlocalized__LANG=settings.LANGUAGE_CODE,
                film__film__objectlocalized__tagged_items__tag__name__in=tags,
            )
        return query.order_by('utc_time').select_related('film', 'channel')
Example #9
0
    def clean_aliases(self):
        aliases = parse_tag_input(self.cleaned_data['aliases'])
        if len(aliases) == 0:
            raise forms.ValidationError(_('You must enter at least one alias'))

        for alias in aliases:
            # alias cannot be existing tag
            if Tag.objects.filter(name=alias).count() > 0:
                raise forms.ValidationError(
                    _('Alias cannot be existing tag, first rename tag:') +
                    "'%s'" % alias)

        return aliases
Example #10
0
    def update_tags(self, obj, tag_names, LANG=None):
        """
        Update tags associated with an object.
        """

        if LANG is None:
            LANG = obj.LANG if hasattr( obj, 'LANG' ) else LANGUAGE_CODE
        
        # all query set
        all_query_set = super( TagManager, self ).get_query_set().filter( LANG=LANG )

        ctype = ContentType.objects.get_for_model(obj)
        current_tags = list(all_query_set.filter(items__content_type__pk=ctype.pk,
                                        items__object_id=obj.pk))

        updated_tag_names = parse_tag_input(tag_names)
        if settings.FORCE_LOWERCASE_TAGS:
            updated_tag_names = [t.lower() for t in updated_tag_names]        
        updated_tags = []
        for tag_name in updated_tag_names:
            found = all_query_set.filter(tagalias__name__iexact=tag_name)            
            if len(found):
                updated_tags.append(found[0])
            else:
                found = all_query_set.filter(name__iexact=tag_name)            
                if len(found):
                    updated_tags.append(found[0])
                else:
                    updated_tags.append(self.create(name=tag_name, LANG=LANG))
                
        # Remove tags which no longer apply
        tags_for_removal = [tag for tag in current_tags if tag not in updated_tags]
        
        tag_count = TaggedItem._default_manager.all().values('object_id')
        tag_count = tag_count.filter(tag__LANG=obj.LANG)
        tag_count = tag_count.count()

        if len(tags_for_removal):                                       
            TaggedItem._default_manager.filter(content_type__pk=ctype.pk,
                                               object_id=obj.pk,
                                               tag__in=tags_for_removal).delete()
            for tag in tags_for_removal:
                self.update_tag_weight(tag, tag_count)
        # Add new tags
        for tag in updated_tags:
            if tag not in current_tags:                                
                self.update_tag_weight(tag, tag_count)
                TaggedItem._default_manager.create(tag=tag, object=obj)
Example #11
0
    def add_tag(self, obj, tag_name):
        """
        Associates the given object with a tag.
        """
        tag_names = parse_tag_input(tag_name)
        if not len(tag_names):
            raise AttributeError(_('No tags were given: "%s".') % tag_name)
        if len(tag_names) > 1:
            raise AttributeError(_('Multiple tags were given: "%s".') % tag_name)
        tag_name = tag_names[0]
        if settings.FORCE_LOWERCASE_TAGS:
            tag_name = tag_name.lower()
        tag, created = self.get_or_create(name=tag_name)

        ctype = ContentType.objects.get_for_model(obj)
        TaggedItem._default_manager.get_or_create(tag=tag, content_type=ctype, object_id=obj.pk)
Example #12
0
    def add_tag(self, obj, tag_name):
        """
        Associates the given object with a tag.
        """
        tag_names = parse_tag_input(tag_name)
        if not len(tag_names):
            raise AttributeError(_('No tags were given: "%s".') % tag_name)
        if len(tag_names) > 1:
            raise AttributeError(
                _('Multiple tags were given: "%s".') % tag_name)
        tag_name = tag_names[0]
        if settings.FORCE_LOWERCASE_TAGS:
            tag_name = tag_name.lower()
        tag, created = self.get_or_create(name=tag_name)

        ctype = ContentType.objects.get_for_model(obj)
        TaggedItem._default_manager.get_or_create(tag=tag,
                                                  content_type=ctype,
                                                  object_id=obj.pk)
Example #13
0
 def film_tagged(self, tags):
     tags = parse_tag_input(tags.lower())
     out = self.filter(film__objectlocalized__LANG=settings.LANGUAGE_CODE, 
                        film__objectlocalized__tagged_items__tag__name__in=tags)
     return out
Example #14
0
 def tagged(self, tags):
     tags = parse_tag_input(tags.lower())
     return self.filter(tagged_items__tag__name__in=tags)
Example #15
0
def parse_tag( name ):
    parsed = parse_tag_input( name + ", " )
    if len( parsed ) != 1:
        raise forms.ValidationError( _( 'Provide one valid tag name' ) )
    return parsed[0]
Example #16
0
 def film_tagged(self, tags):
     tags = parse_tag_input(tags.lower())
     out = self.filter(film__objectlocalized__LANG=settings.LANGUAGE_CODE, 
                        film__objectlocalized__tagged_items__tag__name__in=tags)
     return out
Example #17
0
 def tagged(self, tags):
     tags = parse_tag_input(tags.lower())
     return self.filter(tagged_items__tag__name__in=tags)
Example #18
0
def parse_tag(name):
    parsed = parse_tag_input(name + ", ")
    if len(parsed) != 1:
        raise forms.ValidationError(_('Provide one valid tag name'))
    return parsed[0]