Esempio n. 1
0
class TeamSerializer(serializers.ModelSerializer):
    type = MappedChoiceField(source='workflow_type',
                             required=False,
                             default='O',
                             choices=TeamWorkflow.get_api_choices())
    # Handle mapping internal values for membership/video policy to the values
    # we use in the api (currently the english display name)
    MEMBERSHIP_POLICY_CHOICES = (
        (Team.OPEN, u'Open'),
        (Team.APPLICATION, u'Application'),
        (Team.INVITATION_BY_ALL, u'Invitation by any team member'),
        (Team.INVITATION_BY_MANAGER, u'Invitation by manager'),
        (Team.INVITATION_BY_ADMIN, u'Invitation by admin'),
    )
    VIDEO_POLICY_CHOICES = (
        (Team.VP_MEMBER, u'Any team member'),
        (Team.VP_MANAGER, u'Managers and admins'),
        (Team.VP_ADMIN, u'Admins only'),
    )
    membership_policy = MappedChoiceField(
        MEMBERSHIP_POLICY_CHOICES,
        required=False,
        default=Team._meta.get_field('membership_policy').get_default())
    video_policy = MappedChoiceField(
        VIDEO_POLICY_CHOICES,
        required=False,
        default=Team._meta.get_field('video_policy').get_default())
    team_visibility = EnumField(TeamVisibility, required=False)
    video_visibility = EnumField(VideoVisibility, required=False)
    is_visible = IsVisibleField(required=False, default=None)

    activity_uri = serializers.HyperlinkedIdentityField(
        view_name='api:team-activity',
        lookup_field='slug',
    )
    members_uri = serializers.SerializerMethodField()
    projects_uri = serializers.SerializerMethodField()
    applications_uri = serializers.SerializerMethodField()
    tasks_uri = serializers.SerializerMethodField()
    languages_uri = serializers.SerializerMethodField()
    resource_uri = serializers.SerializerMethodField()

    def get_fields(self):
        fields = super(TeamSerializer, self).get_fields()
        if (self.instance and isinstance(self.instance, Team)
                and self.instance.is_old_style()):
            del fields['team_visibility']
            del fields['video_visibility']
        return fields

    def get_members_uri(self, team):
        return reverse('api:team-members-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_projects_uri(self, team):
        return reverse('api:projects-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_applications_uri(self, team):
        if not team.is_by_application():
            return None
        return reverse('api:team-application-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_languages_uri(self, team):
        if not team.is_old_style():
            return None
        return reverse('api:team-languages',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_tasks_uri(self, team):
        if not team.workflow_enabled:
            return None
        return reverse('api:tasks-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_resource_uri(self, team):
        return reverse('api:teams-detail',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def save(self):
        is_visible = self.validated_data.pop('is_visible', None)
        team = super(TeamSerializer, self).save()
        if is_visible is not None:
            team.set_legacy_visibility(is_visible)
            team.save()
        return team

    def create(self, validated_data):
        if 'team_visibility' not in validated_data:
            validated_data['team_visibility'] = 'public'
        if 'video_visibility' not in validated_data:
            validated_data['video_visibility'] = 'public'
        return super(TeamSerializer, self).create(validated_data)

    class Meta:
        model = Team
        fields = ('name', 'slug', 'type', 'description', 'team_visibility',
                  'video_visibility', 'is_visible', 'membership_policy',
                  'video_policy', 'activity_uri', 'members_uri',
                  'projects_uri', 'applications_uri', 'languages_uri',
                  'tasks_uri', 'resource_uri')
Esempio n. 2
0
class TeamUpdateSerializer(TeamSerializer):
    name = serializers.CharField(required=False)
    slug = serializers.SlugField(required=False)
    type = MappedChoiceField(source='workflow_type',
                             read_only=True,
                             choices=TeamWorkflow.get_api_choices())
Esempio n. 3
0
class TeamSerializer(serializers.ModelSerializer):
    type = MappedChoiceField(source='workflow_type',
                             required=False,
                             default='O',
                             choices=TeamWorkflow.get_api_choices())
    # Handle mapping internal values for membership/video policy to the values
    # we use in the api (currently the english display name)
    MEMBERSHIP_POLICY_CHOICES = (
        (Team.OPEN, u'Open'),
        (Team.APPLICATION, u'Application'),
        (Team.INVITATION_BY_ALL, u'Invitation by any team member'),
        (Team.INVITATION_BY_MANAGER, u'Invitation by manager'),
        (Team.INVITATION_BY_ADMIN, u'Invitation by admin'),
    )
    VIDEO_POLICY_CHOICES = (
        (Team.VP_MEMBER, u'Any team member'),
        (Team.VP_MANAGER, u'Managers and admins'),
        (Team.VP_ADMIN, u'Admins only'),
    )
    membership_policy = MappedChoiceField(
        MEMBERSHIP_POLICY_CHOICES,
        required=False,
        default=Team._meta.get_field('membership_policy').get_default())
    video_policy = MappedChoiceField(
        VIDEO_POLICY_CHOICES,
        required=False,
        default=Team._meta.get_field('video_policy').get_default())

    activity_uri = serializers.HyperlinkedIdentityField(
        view_name='api:team-activity',
        lookup_field='slug',
    )
    members_uri = serializers.SerializerMethodField()
    projects_uri = serializers.SerializerMethodField()
    applications_uri = serializers.SerializerMethodField()
    tasks_uri = serializers.SerializerMethodField()
    languages_uri = serializers.SerializerMethodField()
    resource_uri = serializers.SerializerMethodField()

    def get_members_uri(self, team):
        return reverse('api:team-members-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_projects_uri(self, team):
        return reverse('api:projects-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_applications_uri(self, team):
        if not team.is_by_application():
            return None
        return reverse('api:team-application-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_languages_uri(self, team):
        if not team.is_old_style():
            return None
        return reverse('api:team-languages',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_tasks_uri(self, team):
        if not team.workflow_enabled:
            return None
        return reverse('api:tasks-list',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    def get_resource_uri(self, team):
        return reverse('api:teams-detail',
                       kwargs={
                           'team_slug': team.slug,
                       },
                       request=self.context['request'])

    class Meta:
        model = Team
        fields = ('name', 'slug', 'type', 'description', 'is_visible',
                  'membership_policy', 'video_policy', 'activity_uri',
                  'members_uri', 'projects_uri', 'applications_uri',
                  'languages_uri', 'tasks_uri', 'resource_uri')