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
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
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)
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
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')
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')
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
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)
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)
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)
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
def tagged(self, tags): tags = parse_tag_input(tags.lower()) return self.filter(tagged_items__tag__name__in=tags)
def parse_tag( name ): parsed = parse_tag_input( name + ", " ) if len( parsed ) != 1: raise forms.ValidationError( _( 'Provide one valid tag name' ) ) return parsed[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]