Esempio n. 1
0
class ISearchMilestoneTagsForm(Interface):
    """Schema for the search milestone tags form."""

    tags = TextLine(title=_('Search by tags'),
                    description=_('Insert space separated tag names'),
                    required=True,
                    min_length=2,
                    max_length=64,
                    constraint=lambda value: validate_tags(value.split()))
Esempio n. 2
0
    def extendFields(self):
        """See `LaunchpadFormView`.

        Add a text-entry widget for milestone tags since there is not property
        on the interface.
        """
        tag_entry = TextLine(
            __name__='tags', title=u'Tags', required=False,
            constraint=lambda value: validate_tags(value.split()))
        self.form_fields += form.Fields(
            tag_entry, render_context=self.render_context)
        # Make an instance attribute to avoid mutating the class attribute.
        self.field_names = getattr(self, '_field_names', self.field_names)[:]
        # Insert the tags field before the summary.
        summary_index = self.field_names.index('summary')
        self.field_names.insert(summary_index, tag_entry.__name__)
Esempio n. 3
0
    def extendFields(self):
        """See `LaunchpadFormView`.

        Add a text-entry widget for milestone tags since there is not property
        on the interface.
        """
        tag_entry = TextLine(
            __name__='tags',
            title=u'Tags',
            required=False,
            constraint=lambda value: validate_tags(value.split()))
        self.form_fields += form.Fields(tag_entry,
                                        render_context=self.render_context)
        # Make an instance attribute to avoid mutating the class attribute.
        self.field_names = getattr(self, '_field_names', self.field_names)[:]
        # Insert the tags field before the summary.
        summary_index = self.field_names.index('summary')
        self.field_names.insert(summary_index, tag_entry.__name__)
Esempio n. 4
0
 def setTags(self, tags, user):
     """See IMilestone."""
     # Circular reference prevention.
     from lp.registry.model.milestonetag import MilestoneTag, validate_tags
     store = Store.of(self)
     if tags:
         if not validate_tags(tags):
             raise InvalidTags()
         current_tags = set(self.getTags())
         new_tags = set(tags)
         if new_tags == current_tags:
             return
         # Removing deleted tags.
         to_remove = current_tags.difference(new_tags)
         if to_remove:
             store.find(
                 MilestoneTag, MilestoneTag.tag.is_in(to_remove)).remove()
         # Adding new tags.
         for tag in new_tags.difference(current_tags):
             store.add(MilestoneTag(self, tag, user))
     else:
         store.find(
             MilestoneTag, MilestoneTag.milestone_id == self.id).remove()
Esempio n. 5
0
 def setTags(self, tags, user):
     """See IMilestone."""
     # Circular reference prevention.
     from lp.registry.model.milestonetag import MilestoneTag, validate_tags
     store = Store.of(self)
     if tags:
         if not validate_tags(tags):
             raise InvalidTags()
         current_tags = set(self.getTags())
         new_tags = set(tags)
         if new_tags == current_tags:
             return
         # Removing deleted tags.
         to_remove = current_tags.difference(new_tags)
         if to_remove:
             store.find(MilestoneTag,
                        MilestoneTag.tag.is_in(to_remove)).remove()
         # Adding new tags.
         for tag in new_tags.difference(current_tags):
             store.add(MilestoneTag(self, tag, user))
     else:
         store.find(MilestoneTag,
                    MilestoneTag.milestone_id == self.id).remove()
Esempio n. 6
0
 def traverse_tags(self, name):
     tags = name.split(u',')
     if validate_tags(tags):
         return ProjectGroupMilestoneTag(self.context, tags)
Esempio n. 7
0
 def traverse_tags(self, name):
     tags = name.split(u',')
     if validate_tags(tags):
         return ProjectGroupMilestoneTag(self.context, tags)