示例#1
0
文件: fields.py 项目: ikicic/skoljka
    def clean(self, value):
        if not value or not value.strip():
            if self.required:
                raise forms.ValidationError(self.error_messages['required'])
            return []
        names = [x.strip().lower() for x in value.split(',')]
        # this must be case-insensitive!
        groups = Group.objects.filter(name__in=names).select_related('data')

        error = set(names) - set(x.name.lower() for x in groups)
        # Do not immediately reject if len(error) > 0. List *all* invalid or
        # inaccessible groups.

        # Check permissions. Skip user private groups.
        usergroups = [x.data for x in groups if x.data]
        visible = filter_objects_with_permission(usergroups, self.user,
            VIEW, model=UserGroup)

        if len(visible) != len(usergroups):
            hidden_ids = set(x.group_id for x in usergroups) \
                       - set(x.group_id for x in visible)
            error |= set(x.name.lower() for x in groups if x.id in hidden_ids)

        if error:
            raise forms.ValidationError(
                u'Nepostojeće ili nedostupne grupe ili korisnici: %s' \
                    % ', '.join(error))

        return groups
示例#2
0
文件: forms.py 项目: ikicic/skoljka
def check_prerequisites(prerequisites, user, task_id):
    """
        Check if all given ids are accessible.
        Returns the list of ids and list of accessible task instances.
    """
    if not prerequisites.strip():
        return [], []

    try:
        # Remove duplicates
        ids = set([int(x) for x in prerequisites.split(',')])
    except ValueError:
        raise forms.ValidationError('Nevaljan format!')

    if task_id and task_id in ids:
        raise forms.ValidationError(u'Zadatak ne može biti sam sebi preduvjet!')

    tasks = Task.objects.filter(id__in=ids)
    accessible = filter_objects_with_permission(tasks, user, VIEW, model=Task)

    if len(ids) != len(accessible):
        diff = ids - set(x.id for x in accessible)
        raise forms.ValidationError('Nepoznati ili nedostupni zadaci: {}' \
            .format(', '.join(str(x) for x in diff)))

    for x in accessible:
        if not x.solvable:
            raise forms.ValidationError(
                u'Nije moguće slati rješenja za zadatak #{}!'.format(x.id))

    return ids, accessible