Example #1
0
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
Example #2
0
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)
Example #3
0
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)
Example #4
0
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
Example #5
0
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)
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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)
Example #10
0
File: views.py Project: arky/pootle
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
Example #11
0
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)
Example #12
0
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