def test_widget_table_select_multiple_dict(): choices = (("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert (('<td class="row-select"><input name="a-field" ' 'type="checkbox" value="%s" /></td>' % name) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert (('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert (('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td class="field-title">%s</td>' % choice["title"]) in rendered
def test_widget_table_select_id_attr(): choices = (("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", None, attrs=dict(id="special-id")) for i, (name, choice) in enumerate(choices): assert (( '<td class="row-select"><input id="special-id_%s" name="a-field" ' 'type="checkbox" value="%s" /></td>' % (i, name)) in rendered)
def test_widget_table_select_id_attr(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", None, attrs=dict(id="special-id")) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input id="special-id_%s" name="a-field" ' 'type="checkbox" value="%s" /></td>' % (i, name)) in rendered)
def test_widget_table_select_multiple_object_methods(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) class Dummy(object): def get_id(self): return self.kwargs["id"] def get_title(self): return self.kwargs["title"] def __init__(self, **kwargs): self.kwargs = kwargs for k in kwargs.keys(): setattr(self, k, getattr(self, "get_%s" % k)) object_choices = tuple( (name, Dummy(**choice)) for name, choice in choices) widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s" /></td>' % name) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td class="field-title">%s</td>' % choice["title"]) in rendered
def test_widget_table_select_multiple_callable(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) def _get_id(attr): return "xx%s" % attr["id"] def _get_title(attr): return "xx%s" % attr["title"] widget = TableSelectMultiple(item_attrs=[_get_id], choices=choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s" /></td>' % name) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) not in rendered) widget = TableSelectMultiple(item_attrs=[_get_id], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) not in rendered) widget = TableSelectMultiple(item_attrs=[_get_id, _get_title], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) in rendered)
def test_widget_table_select_multiple_objects(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) class Dummy(object): def __init__(self, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) object_choices = tuple( (name, Dummy(**choice)) for name, choice in choices) widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input name="a-field" ' 'type="checkbox" value="%s" /></td>' % name) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td>%s</td>' % choice["title"]) in rendered
def test_widget_table_select_multiple_dict(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz")), ) widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ('<td class="row-select"><input name="a-field" ' 'type="checkbox" value="%s" /></td>' % name) in rendered assert ("<td>%s</td>" % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( '<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name) ) in rendered assert ("<td>%s</td>" % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( '<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name) ) in rendered assert ("<td>%s</td>" % choice["title"]) in rendered
def test_widget_table_select_multiple_object_methods(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) class Dummy(object): def get_id(self): return self.kwargs["id"] def get_title(self): return self.kwargs["title"] def __init__(self, **kwargs): self.kwargs = kwargs for k in kwargs.keys(): setattr(self, k, getattr(self, "get_%s" % k)) object_choices = tuple( (name, Dummy(**choice)) for name, choice in choices) widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input name="a-field" ' 'type="checkbox" value="%s" /></td>' % name) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td class="field-title">%s</td>' % choice["title"]) in rendered
def test_widget_table_select_multiple_callable(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) def _get_id(attr): return "xx%s" % attr["id"] def _get_title(attr): return "xx%s" % attr["title"] widget = TableSelectMultiple(item_attrs=[_get_id], choices=choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): assert ( ('<td class="row-select"><input name="a-field" ' 'type="checkbox" value="%s" /></td>' % name) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) not in rendered) widget = TableSelectMultiple(item_attrs=[_get_id], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) not in rendered) widget = TableSelectMultiple(item_attrs=[_get_id, _get_title], choices=choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked="checked"' assert ( ('<td class="row-select"><input%s name="a-field" ' 'type="checkbox" value="%s" /></td>' % (checked, name)) in rendered) assert ('<td class="field-get-id">xx%s</td>' % choice["id"]) in rendered assert ( ('<td class="field-get-title">xx%s</td>' % choice["title"]) in rendered)
def test_widget_table_select_multiple_objects(): choices = ( ("foo", dict(id="foo", title="Foo")), ("bar", dict(id="bar", title="Bar")), ("baz", dict(id="baz", title="Baz"))) class Dummy(object): def __init__(self, **kwargs): for k, v in kwargs.items(): setattr(self, k, v) object_choices = tuple( (name, Dummy(**choice)) for name, choice in choices) widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", None) for i, (name, choice) in enumerate(choices): # this test is way too brittle assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s" /></td>' % name) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' # this test is way too brittle assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td>%s</td>' % choice["title"]) not in rendered widget = TableSelectMultiple(item_attrs=["id", "title"], choices=object_choices) rendered = widget.render("a-field", choices[0]) for i, (name, choice) in enumerate(choices): checked = "" if i == 0: checked = ' checked' # this test is way too brittle assert ( ('<td class="row-select"><input type="checkbox" ' 'name="a-field" value="%s"%s /></td>' % (name, checked)) in rendered) assert ('<td class="field-title">%s</td>' % choice["title"]) in rendered
class LanguageTeamAdminForm(LanguageTeamBaseAdminForm): rm_admins = forms.ModelMultipleChoiceField( label=_("Administrators"), widget=TableSelectMultiple(item_attrs=["username"]), required=False, queryset=User.objects.none()) rm_reviewers = forms.ModelMultipleChoiceField( required=False, label=_("Reviewers"), widget=TableSelectMultiple(item_attrs=["username"]), queryset=User.objects.none()) rm_submitters = forms.ModelMultipleChoiceField( required=False, label=_("Submitters"), widget=TableSelectMultiple(item_attrs=["username"]), queryset=User.objects.none()) rm_members = forms.ModelMultipleChoiceField( required=False, label=_("Members"), widget=TableSelectMultiple(item_attrs=["username"]), queryset=User.objects.none()) new_member = forms.ModelChoiceField( label=_("New member"), help_text=_("Add a user to this team"), required=False, queryset=User.objects.none(), widget=forms.Select( attrs={ 'class': 'js-select2-remote'})) role = forms.ChoiceField( label=_("Role"), required=False, widget=forms.Select( attrs={'class': 'js-select2'}), choices=LANGUAGE_TEAM_ROLES) def __init__(self, *args, **kwargs): self.language = kwargs.pop("language") super(LanguageTeamAdminForm, self).__init__(*args, **kwargs) for role in self.language_team.roles: self.fields["rm_%ss" % role].queryset = getattr( self.language_team, "%ss" % role) self.fields["rm_%ss" % role].choices = [ (item.id, item) for item in getattr(self.language_team, "%ss" % role)] self.fields["new_member"].widget.attrs["data-select2-url"] = reverse( "pootle-language-admin-team-new-members", kwargs=dict(language_code=self.language.code)) self.fields["new_member"].queryset = self.language_team.non_members def clean(self): if any(self.errors): return no_role = ( self.cleaned_data.get("new_member") and not self.cleaned_data.get("role")) if no_role: self.add_error( "role", forms.ValidationError( _("Role is required when adding a new member"))) def should_save(self): return ( self.cleaned_data["new_member"] and self.cleaned_data["role"] or any( self.cleaned_data["rm_%ss" % role] for role in self.language_team.roles)) def save(self): if self.cleaned_data["new_member"] and self.cleaned_data["role"]: self.language_team.add_member( self.cleaned_data["new_member"], self.cleaned_data["role"]) else: for role in self.language_team.roles: if self.cleaned_data["rm_%ss" % role]: for user in self.cleaned_data["rm_%ss" % role]: self.language_team.remove_member(user)
class LanguageSuggestionAdminForm(LanguageTeamFormtableForm): action_field = "actions" search_field = "suggestions" action_choices = ( ("", "----"), ("reject", _("Reject")), ("accept", _("Accept"))) filter_suggester = forms.ChoiceField( label=_("Filter by suggester"), choices=(), required=False, widget=forms.Select( attrs={'class': 'js-select2 select2-language'})) filter_state = forms.ChoiceField( label=_("Filter by state"), required=False, choices=( [("", "-----")] + [(k, v) for k, v in STATES_MAP.items() if k != OBSOLETE]), widget=forms.Select( attrs={'class': 'js-select2 select2-language'})) filter_tp = forms.ModelChoiceField( label=_("Project"), required=False, queryset=TranslationProject.objects.none(), widget=forms.Select( attrs={'class': 'js-select2'})) suggestions = forms.ModelMultipleChoiceField( widget=TableSelectMultiple( item_attrs=[ "unit_link", "unit_state", "unit", "target_f", "user", "creation_time", "project"]), required=False, queryset=Suggestion.objects.select_related( "unit", "unit__store", "unit__store__translation_project", "unit__store__translation_project__project").none()) def __init__(self, *args, **kwargs): self.user = kwargs.pop("user") self.language = kwargs.pop("language") super(LanguageSuggestionAdminForm, self).__init__(*args, **kwargs) self.fields["filter_suggester"].choices = self.filter_suggester_choices self.fields["filter_tp"].queryset = self.filter_tp_qs self.fields["suggestions"].queryset = self.suggestions_qs @property def filter_suggester_choices(self): suggesters = list( (username, ("%s (%s)" % (fullname, username) if fullname.strip() else username)) for username, fullname in sorted(self.language_team.users_with_suggestions)) return [("", "-----")] + suggesters @property def suggestions_qs(self): return self.language_team.suggestions.select_related("unit", "user").filter( unit__store__translation_project__project__disabled=False) @property def filter_tp_qs(self): tps = self.language.translationproject_set.exclude( project__disabled=True) tps = tps.filter( stores__unit__suggestion__state=SuggestionStates.PENDING) return tps.order_by("project__code").distinct() @property def suggestions_to_save(self): if not self.is_valid(): return [] return ( self.fields["suggestions"].queryset if self.cleaned_data["select_all"] else self.cleaned_data["suggestions"]) @property def suggestions_review(self): if not self.is_valid(): return return review.get(Suggestion)(self.suggestions_to_save, self.user) def save(self): return ( self.suggestions_review.accept( comment=self.cleaned_data["comment"]) if self.cleaned_data["actions"] == "accept" else self.suggestions_review.reject( comment=self.cleaned_data["comment"])) def search(self): searched = super(LanguageSuggestionAdminForm, self).search() if self.cleaned_data.get("filter_suggester"): searched = searched.filter( user__username=self.cleaned_data["filter_suggester"]) if self.cleaned_data.get("filter_tp"): searched = searched.filter( unit__store__translation_project=self.cleaned_data["filter_tp"]) if self.cleaned_data.get("filter_state"): searched = searched.filter( unit__state=self.cleaned_data["filter_state"]) return searched