

def _create_or_update(self, local_site, default_reviewer=None, **kwargs):
    invalid_fields = {
        
    }
    form_data = {
        
    }
    if ('groups' in kwargs):
        group_names = kwargs['groups'].split(',')
        group_ids = [group['pk'] for group in Group.objects.filter(name__in=group_names, local_site=local_site).values('pk')]
        if (len(group_ids) != len(group_names)):
            invalid_fields['groups'] = ['One or more groups were not found']
        form_data['groups'] = group_ids
    if ('repositories' in kwargs):
        repo_ids = []
        try:
            repo_ids = [int(repo_id) for repo_id in kwargs['repositories'].split(',')]
        except ValueError:
            invalid_fields['repositories'] = ['One or more repository IDs were not in a valid format.']
        if repo_ids:
            found_count = Repository.objects.filter(pk__in=repo_ids, local_site=local_site).count()
            if (len(repo_ids) != found_count):
                invalid_fields['repositories'] = ['One or more repositories were not found']
        form_data['repository'] = repo_ids
    if ('users' in kwargs):
        usernames = kwargs['users'].split(',')
        user_ids = [user['pk'] for user in User.objects.filter(username__in=usernames).values('pk')]
        if (len(user_ids) != len(usernames)):
            invalid_fields['users'] = ['One or more users were not found']
        form_data['people'] = user_ids
    if invalid_fields:
        return (INVALID_FORM_DATA, {
            'fields': invalid_fields,
        })
    for field in ('name', 'file_regex'):
        if (field in kwargs):
            form_data[field] = kwargs[field]
    if local_site:
        form_data['local_site'] = local_site.pk
    form = DefaultReviewerForm(form_data, instance=default_reviewer)
    if (not form.is_valid()):
        field_errors = self._get_form_errors(form)
        if ('people' in field_errors):
            field_errors['users'] = field_errors.pop('people')
        if ('repository' in field_errors):
            field_errors['repositories'] = field_errors.pop('repository')
        return (INVALID_FORM_DATA, {
            'fields': field_errors,
        })
    default_reviewer = form.save()
    return (200, {
        self.item_result_key: default_reviewer,
    })

dataset/ETHPy150Open reviewboard/reviewboard/reviewboard/webapi/resources/default_reviewer.py DefaultReviewerResource._create_or_update/original