Beispiel #1
0
class BarkSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    parent = BarkCreateSerializer(read_only=True)

    class Meta:
        model = Bark
        fields = [
            'user', 'id', 'content', 'likes', 'is_rebark', 'parent',
            'timestamp'
        ]

    def get_likes(self, obj):
        return obj.likes.count()
class TweetSerializerLikes(serializers.ModelSerializer):
	user = PublicProfileSerializer(source='user.profile', read_only=True)
	likes = serializers.SerializerMethodField(read_only=True)
	parent = TweetCreateSerializer(read_only=True)
	class Meta:
		model=Tweet
		fields='__all__'
	def get_likes(self, obj):
#		print(obj.user)
#		print(type(obj))
#		print(user_likes, user)
#		users_who_like = obj.likes.values_list('username', flat=True)
#		user_followers = user.profile.followers.values_list('username', flat=True)
#		print(users_who_like, user_followers)
		return obj.likes.values_list('username', flat=True)
class TweetCreateSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Tweet
        fields = ['user', 'id', 'content', 'likes', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > MAX_TWEET_LENGTH:
            raise serializers.ValidationError("This tweet is too long!")
        return value
Beispiel #4
0
class TextBookSolutionSerializer(serializers.ModelSerializer):
    pdf = TextBookSolutionPDFSerializer(
        many=False,
        required=False  # we can set existing pdf solution
    )
    posted_by = PublicProfileSerializer(read_only=True)
    # title = serializers.SerializerMethodField()
    title = serializers.CharField(required=False)

    pdf_id = serializers.PrimaryKeyRelatedField(
        queryset=TextBookSolutionPDF.objects.all(),
        source='pdf',
        many=False,
        write_only=True,
        required=False  # we can set existing pdf solution
    )
    textbook_problem_uuid = serializers.SlugRelatedField(
        queryset=TextBookProblem.objects.all(),
        source='textbook_problem',
        slug_field='uuid',
        many=False,
        # write_only=True,
        required=False  # we can set existing textbook_problem
    )

    count_comments = serializers.SerializerMethodField()

    def get_count_comments(self, obj):
        count_comments = 0

        if hasattr(obj, 'thread') and obj.thread:
            count_comments = obj.thread.op.get_descendant_count()

        return count_comments

    # def get_title(self, obj):
    #     return obj.title

    class Meta:
        model = TextBookSolution
        fields = [
            'pdf', 'posted_by', 'id', 'position', 'title', 'created_on',
            'uuid', 'vote_score', 'thread', 'textbook_problem_uuid', 'pdf_id',
            'count_comments'
        ]
        read_only_fields = ('id', 'created_on', 'uuid', 'vote_score', 'pdf',
                            'thread')
        extra_kwargs = {'position': {'required': False}}
Beispiel #5
0
class TweetSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    parent = TweetCreateSerializer(read_only=True)

    # is_retweet = serializers.SerializerMethodField(read_only=True) - no need to call, when is a class property

    class Meta:
        model = Tweet
        fields = [
            'user', 'id', 'content', 'likes', 'is_retweet', 'parent',
            'timestamp'
        ]

    def get_likes(self, obj):
        return obj.likes.count()
Beispiel #6
0
class TweetSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(
        source='user.profile',
        read_only=True)  #serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    parent = TweetCreateSerializer(read_only=True)

    class Meta:
        model = Tweet
        fields = [
            "user", "id", "content", "likes", "is_retweet", "parent",
            "timestamp"
        ]

    def get_likes(self, obj):
        return obj.likes.count()
Beispiel #7
0
class TweetCreateSerializer(serializers.ModelSerializer):
    # user = serializers.SerializerMethodField(read_only=True)
    user = PublicProfileSerializer(source="user.profile", read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Tweet
        fields = ["user", "id", "content", "likes", "timestamp"]

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > MAX_TWEET_LENGTH:
            raise serializers.ValidationError("This Tweet is too long")
        return value
Beispiel #8
0
class PostSerializer(serializers.ModelSerializer):
    created_by = PublicProfileSerializer(source='created_by.profile',
                                         read_only=True)

    # mardown_content = serializers.SerializerMethodField()
    #
    # def get_mardown_content(self, obj):
    #     return markdown_deux.markdown(obj.content, 'default')

    class Meta:
        fields = [
            'uid', 'content', 'created_by', 'created_on', 'parent',
            'modified_on', 'level', 'score'
        ]
        read_only_fields = ('level', )
        model = Post
Beispiel #9
0
class BarkCreateSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Bark
        fields = ['user', 'id', 'content', 'likes', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > MAX_BARK_LENGTH:
            raise serializers.ValidationError(
                "This bark is too long. Please limit barks to 240 characters")
        return value
class Nash_messageCreateSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(
        source='user.profile',
        read_only=True)  # serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Nash_message
        fields = ['user', 'id', 'content', 'likes', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > MAX_NASH_MESSAGE_LENGTH:
            raise serializers.ValidationError("This nash_message is too long")
        return value
Beispiel #11
0
class TweetSerializers(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True) #user = serializers.SerializerMethodField(read_only=True) # added so that we can know which user posted which tweet when 94
    likes = serializers.SerializerMethodField(read_only=True)
    # content = serializers.SerializerMethodField(read_only=True)
    # is_retweet = serializers.SerializerMethodField(read_only=True)
    # we don't actually need to call a serializer method again for a property that is on the object itself
    parent = TweetCreateSerializers(read_only=True)
    class Meta:
        model = Tweet
        fields = ['user', 'id', 'content', 'likes', 'is_retweet', 'parent', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    # def get_user(self, obj): # added newly for user identification of tweets
    #     return obj.user.id

    '''def get_content(self, obj):
Beispiel #12
0
class TweetSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    parent= TweetCreateSerializer(read_only=True)
    

    class Meta:
        model = Tweet
        fields = ['user','id','content','likes','is_retweet','parent','timestamp']

    def get_likes(self,obj):
        return obj.likes.count()        

    def get_content(self,obj):
        content = obj.content
        if obj.is_retweet:
            content=obj.parent.content
        return content      
Beispiel #13
0
class FilletSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    like_count = serializers.SerializerMethodField(read_only=True)
    parent = FilletCreateSerializer(read_only=True)

    class Meta:
        model = Fillet
        fields = [
            'id',
            'text',
            'user',
            'like_count',
            'timestamp',
            'is_repost',
            'parent',
        ]

    def get_like_count(self, obj):
        return obj.likes.count()
Beispiel #14
0
class TweetSerializer(serializers.ModelSerializer
                      ):  # This is read only for the retweeting action
    user = PublicProfileSerializer(
        source="user.profile", read_only=True
    )  #user = serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(
        read_only=True)  # I just want it to be numbers
    # content = serializers.SerializerMethodField(read_only=True)
    # No need to call a serializer method again for a property in the serializers.py since it is in the object itself
    parent = TweetCreateSerializer(read_only=True)

    class Meta:
        model = Tweet
        fields = [
            'user', 'id', 'content', 'likes', 'is_retweet', 'parent',
            'timestamp'
        ]

    def get_likes(self, obj):
        return obj.likes.count()
Beispiel #15
0
class TweetCreateSerializer(serializers.ModelSerializer):
    author = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    timestamp = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Tweet
        fields = ['author', 'id', 'content', 'likes', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    def get_timestamp(self, obj):
        return obj.timestamp

    def validate_content(self, value):
        if len(value) > settings.MAX_TWEET_LENGTH:
            raise serializers.ValidationError(
                'Maximum of 180 characters in one tweet.')
        return value
Beispiel #16
0
class TweetCreateSerializer(serializers.ModelSerializer
                            ):  # <- this is for the create view
    user = PublicProfileSerializer(
        source="user.profile",
        read_only=True)  #serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(
        read_only=True)  # I just want it to be numbers

    class Meta:
        model = Tweet
        fields = ['user', 'id', 'content', 'likes', 'timestamp']

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > MAX_TWEET_LENGTH:
            raise serializers.ValidationError(
                "This tweet is too long! Max limit 240 charaters.")
        return value
Beispiel #17
0
class NogginSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    comments = serializers.SerializerMethodField(source='noggin.Comment',
                                                 read_only=True)
    eyeballs = serializers.SerializerMethodField(source='noggin.NogginEyeball',
                                                 read_only=True)
    parent = NogginCreateSerializer(read_only=True)
    image = Base64ImageField(max_length=None, use_url=True, required=False)
    video = serializers.FileField(max_length=None,
                                  use_url=True,
                                  required=False)
    timestamp = serializers.DateTimeField(format="%m-%d-%Y %H:%M",
                                          required=False,
                                          read_only=True)

    class Meta:
        model = Noggin
        fields = [
            'comments', 'eyeballs', 'user', 'id', 'content', 'likes', 'image',
            'video', 'parent', 'timestamp'
        ]

    def get_eyeballs(self, obj):
        return obj.eyeball_count.count()

    def get_comments(self, obj):
        return obj.comments.count()

    def get_likes(self, obj):
        return obj.likes.count()

    def get_content(self, obj):
        return obj.parent.content

    def get_image(self, obj):
        return obj.parent.image

    def get_video(self, obj):
        return obj.parent.video
Beispiel #18
0
class TweetSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(source='user.profile', read_only=True)
    #user = serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    #content = serializers.SerializerMethodField(read_only=True)
    #is_retweet = serializers.SerializerMethodField(read_only=True) #DONT NEED TO CALL serliazerMethod for a property on the object itself.
    parent = TweetCreateSerializer(read_only=True)

    class Meta:
        model = Tweet
        fields = [
            'user',
            'id',
            'content',
            'likes',
            'is_retweet',
            'parent',
            #'timestamp'
        ]

    def get_likes(self, obj):
        return obj.likes.count()
Beispiel #19
0
class ClassroomBaseSerializer(serializers.ModelSerializer):
    count_students = serializers.IntegerField(read_only=True)
    teacher = PublicProfileSerializer(read_only=True)
    curriculum = CurriculumSerializer(read_only=True)
    # curriculum = SimpleCurriculumSerializer(read_only=True)
    curriculum_uuid = serializers.SlugRelatedField(queryset=Curriculum.objects.all(), source='curriculum',
                                                   slug_field='uuid', write_only=True)

    external_classroom = ExternalClassroomSerializer(many=False, required=False)

    def create(self, validated_data):
        external_classroom = None
        if 'external_classroom' in validated_data:
            external_classroom = validated_data.pop('external_classroom')

        to_return = super(ClassroomBaseSerializer, self).create(validated_data)

        if external_classroom:
            # save external data
            kwargs = external_classroom
            # if 'provider' in external_classroom:
            #     kwargs['provider'] = external_classroom.pop('provider')
            # external_id=external_classroom['external_id'],
            #                                              name=external_classroom['name'],
            #                                              teacher_id=external_classroom['teacher_id'],
            #                                              code=external_classroom['code'],
            try:
                ExternalClassroom.objects.create(classroom=to_return,
                                             **kwargs)
            except:  # TODO raise error message
                pass
        return to_return

    class Meta:
        model = Classroom
        fields = ['uuid', 'name', 'created_on', 'updated_on', 'curriculum', 'code', 'count_students',
                  'teacher', 'curriculum_uuid', 'external_classroom']
        read_only_fields = ('uuid', 'code', 'created_on', 'updated_on')
Beispiel #20
0
class NogginCreateSerializer(serializers.ModelSerializer):
    user = PublicProfileSerializer(
        source='user.profile',
        read_only=True)  # serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    image = Base64ImageField(max_length=None, use_url=True, required=False)
    video = Base64Field(max_length=None, use_url=True, required=False)
    timestamp = serializers.DateTimeField(format="%m-%d-%Y%H:%M:%S",
                                          required=False,
                                          read_only=True)

    class Meta:
        model = Noggin
        fields = [
            'user', 'id', 'content', 'image', 'video', 'likes', 'timestamp'
        ]

    def get_likes(self, obj):
        return obj.likes.count()

    def validate_content(self, value):
        if len(value) > NOGGIN_FULL:
            raise serializers.ValidationError("this Noggin is too Long")
        return value
Beispiel #21
0
 def get_less_students(self, container):
     students = container.students.all()[:12]
     serializer = PublicProfileSerializer(instance=students, many=True)
     return serializer.data
Beispiel #22
0
def get_paginated_queryset_recommend_user_response(query_set, request):
    paginator = PageNumberPagination()
    paginator.page_size = 3
    paginated_qs = paginator.paginate_queryset(query_set, request)
    serializer = PublicProfileSerializer(paginated_qs, many=True, context={"request": request})
    return paginator.get_paginated_response(serializer.data)
Beispiel #23
0
class ResourceBaseSerializer(serializers.ModelSerializer):

    metadata = ResourceMetaDataSerializer(many=False, required=False)
    sections = TextBookChapterSerializer(many=True)
    owner = PublicProfileSerializer(read_only=True)

    def create(self, validated_data):
        metadata_data = validated_data.pop('metadata')

        sections = validated_data.pop('sections')

        if metadata_data:
            try:
                validated_data['title'] = metadata_data['data']['volumeInfo'][
                    'title']
            except:
                pass

        instance = super(ResourceBaseSerializer, self).create(validated_data)

        # TODO need to check that at least one solution exists
        if instance.resource_type == 'TB':
            # add TextBook Resource type sections

            sections_objects = []
            for i, section in enumerate(sections):
                sections_objects.append(
                    TextBookChapter(resource=instance,
                                    title=section['title'],
                                    position=i))

            saved_sections = TextBookChapter.objects.bulk_create(
                sections_objects)

            for saved_section in saved_sections:
                section_data = sections[saved_section.position]
                if 'problems' in section_data:
                    problems_objects = []
                    for i, problem in enumerate(section_data['problems']):
                        problems_objects.append(
                            TextBookProblem(textbook_section=saved_section,
                                            title=problem['title'],
                                            position=i))
                    # save problems
                    saved_problems = TextBookProblem.objects.bulk_create(
                        problems_objects)

                    for saved_problem in saved_problems:
                        problem_data = section_data['problems'][
                            saved_problem.position]
                        if 'solutions' in problem_data:
                            solutions_objects = []
                            for y, solution in enumerate(
                                    problem_data['solutions']):
                                solutions_objects.append(
                                    TextBookSolution(
                                        pdf_id=solution['pdf']['id'],
                                        position=y,
                                        textbook_problem=saved_problem,
                                        posted_by=validated_data['owner']))
                            # save solutions
                            TextBookSolution.objects.bulk_create(
                                solutions_objects)

        ResourceMetaData.objects.create(resource=instance, **metadata_data)

        return instance

    class Meta:
        model = Resource
        fields = [
            'uuid', 'created_on', 'updated_on', 'resource_type', 'metadata',
            'sections', 'count_views', 'owner', 'thread'
        ]
        read_only_fields = ('uuid', 'created_on', 'updated_on', 'count_views',
                            'thread')
class UserDetailSerializer(ModelSerializer):
    profile = PublicProfileSerializer(read_only=True)
    uri = SerializerMethodField(read_only=True)
    posts = SerializerMethodField(read_only=True)
    followers = SerializerMethodField(read_only=True)
    followings = SerializerMethodField(read_only=True)
    friends = SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = [
            'id',
            'username',
            'uri',
            'profile',
            'posts',
            'followers',
            'followings',
            'friends',
        ]

    def get_uri(self, obj):
        request = self.context.get('request')
        return api_reverse("api-user:detail",
                           kwargs={"username": obj.username},
                           request=request)

    def get_posts(self, obj):
        request = self.context.get('request')
        limit = 10
        if request:
            limit_query = request.GET.get('posts_limit')
            try:
                limit = int(limit_query)
            except:
                pass
        qs1 = obj.post_set.all().order_by("-timestamp")
        user_following = obj.followings.all()
        followings = user_following.exclude(user=obj)
        users = []
        for following in followings:
            user = get_object_or_404(User, username=following.user.username)
            users.append(user)
        qs2 = Post.objects.filter(user__in=users)
        qs = (qs1 | qs2).distinct().order_by("-timestamp")
        data = {
            'total':
            obj.post_set.all().count(),
            'uri':
            self.get_uri(obj) + "posts/",
            'last':
            PostInlineSerializer(qs.first(), context={
                'request': request
            }).data,
            'recent':
            PostInlineSerializer(qs[:limit],
                                 many=True,
                                 context={
                                     'request': request
                                 }).data
        }
        return data

    def get_followers(self, obj):
        request = self.context.get('request')
        limit = 10
        if request:
            limit_query = request.GET.get('followers_limit')
            try:
                limit = int(limit_query)
            except:
                pass
        try:
            follower_obj = get_object_or_404(Followers, user=obj)
            # Have to exclude the user from his or her followers
            followers = follower_obj.followers.all()  #.exclude(user=obj)
        except:
            pass
        try:
            data = {
                'total':
                followers.count(),
                'uri':
                self.get_uri(obj) + "followers/",
                'last':
                FollowersSerializer(followers.first(),
                                    context={
                                        'request': request
                                    }).data,
                'recent':
                FollowersSerializer(followers[:limit],
                                    many=True,
                                    context={
                                        'request': request
                                    }).data
            }
        except:
            data = "No followers yet."
        return data

    def get_followings(self, obj):
        request = self.context.get('request')
        limit = 10
        if request:
            limit_query = request.GET.get('followings_limit')
            try:
                limit = int(limit_query)
            except:
                pass
        try:
            follower_obj = get_object_or_404(Followers, user=obj)
            followings = follower_obj.user.followings.all()
        except:
            pass
        try:
            data = {
                'total':
                followings.count(),
                'uri':
                self.get_uri(obj) + "followings/",
                'last':
                FollowingsSerializer(followings.first(),
                                     context={
                                         'request': request
                                     }).data,
                'recent':
                FollowingsSerializer(followings[:limit],
                                     many=True,
                                     context={
                                         'request': request
                                     }).data
            }
        except:
            data = "No followings yet."
        return data

    def get_friends(self, obj):
        request = self.context.get('request')
        limit = 10
        if request:
            limit_query = request.GET.get('friends_limit')
            try:
                limit = int(limit_query)
            except:
                pass
        try:
            friends_obj = get_object_or_404(Friends, user=obj)
            friends = friends_obj.friends.all()
        except:
            pass
        try:
            data = {
                'total':
                friends.count(),
                'uri':
                self.get_uri(obj) + "friends/",
                'last':
                FriendsSerializer(friends.first(),
                                  context={
                                      'request': request
                                  }).data,
                'recent':
                FriendsSerializer(friends[:limit],
                                  many=True,
                                  context={
                                      'request': request
                                  }).data
            }
        except:
            data = "No friends yet."
        return data