예제 #1
0
class ClassroomSerializer(Serializer):
    id = IntField(required=True)
    name = StrField(required=True)
    date_start = StrField(required=True)
    date_end = StrField(required=True)
    class_code = StrField(required=True)
    teacher = MethodField("serialize_teacher")
    students = MethodField("serialize_students")
    modules = MethodField("serialize_modules")

    def serialize_teacher(self, classroom):
        if not classroom.teacher:
            return {}
        return {"id": classroom.teacher_id}

    def serialize_students(self, classroom):
        if not classroom.students:
            return []
        return student_schemas.StudentRelSerializer(classroom.students,
                                                    many=True).data

    def serialize_modules(self, classroom):
        if not classroom.modules:
            return []
        return [("id", module.id) for module in classroom.modules]
예제 #2
0
class StudentClassroomSerializer(Serializer):
    classes = MethodField("serialize_classes", attr="classrooms")
    inprogress_modules = MethodField("serialize_inprogress_modules")
    completed_activities = MethodField("serialize_completed_activities")
    current_activities = MethodField("serialize_current_activities")

    def serialize_classes(self, student):
        if not student.classes:
            return []
        return class_schemas.ClassroomRelSerializer(student.classes,
                                                    many=True).data

    def serialize_inprogress_modules(self, student):
        if not student.inprogress_modules:
            return []
        return module_schemas.ModuleRelSerializer(student.inprogress_modules,
                                                  many=True).data

    def serialize_completed_activities(self, student):
        if not student.completed_activities:
            return []
        return activity_schemas.ActivityRelSerializer(
            student.completed_activities).data

    def serialize_current_activities(self, student):
        if not student.current_activities:
            return []
        return activity_schemas.ActivityRelSerializer(
            student.current_activities).data
class AppSearchSerialiser(Serializer):
    """A base serialiser to serialise Django models to app search objects."""

    id = MethodField()
    object_type = MethodField()

    def get_id(self, instance):
        """Set model pk as the document id."""
        return instance.get_appsearch_document_id()

    def get_object_type(self, instance):
        """Set model name as the object type."""
        return type(instance).__name__
예제 #4
0
class ActivityProgressSubmissionSerializer(Serializer):
    student_id = IntField(required=True)
    user_id = MethodField("serialized_user_id")
    activity = ActivityRelSerializer()
    checkpoints = MethodField("serialize_checkpoints")

    def serialize_checkpoints(self, activity_prog):
        if not activity_prog:
            return []
        return CheckpointProgressSerializer(activity_prog.checkpoints,
                                            many=True).data

    def serialized_user_id(self, actvity_prog):
        if not actvity_prog:
            return None
        return actvity_prog.student.meta.user.id
예제 #5
0
class TeacherSerializer(Serializer):
    id = IntField(required=True)
    classrooms = MethodField("serialize_classrooms")

    def serialize_classrooms(self, teacher):
        if not teacher.classrooms:
            return []
        return ClassroomSerializer(teacher.classrooms, many=True).data
예제 #6
0
class TopicSerializer(Serializer):
    id = IntField(required=True)
    name = StrField(required=True)
    description = StrField(required=True)
    image = StrField(required=True)
    modules = MethodField("module_serializer")

    def module_serializer(self, topic):
        if not topic.modules:
            return []
        return [{"id": module.id} for module in topic.modules]
예제 #7
0
class MetaSerializer(Serializer):
    id = IntField(required=True, label="meta_id")
    roles = StrField(required=True)
    user_id = MethodField("serialize_user")
    student_id = MethodField("serialize_student")
    teacher_id = MethodField("serialize_teacher")

    def serialize_user(self, meta):
        if not meta.user:
            return None
        return meta.user.id

    def serialize_student(self, meta):
        if not meta.student:
            return None
        return meta.student.id

    def serialize_teacher(self, meta):
        if not meta.teacher:
            return None
        return meta.teacher.id
예제 #8
0
class UserSerializer(Serializer):
    id = IntField(required=True)
    name = StrField(required=True)
    email = StrField(required=True)
    github_username = StrField(required=True)
    image = StrField(required=True)
    global_gems = IntField(required=True)
    last_seen = MethodField("serialize_last_seen")

    def serialize_last_seen(self, user):
        if not user.last_seen:
            return None
        return user.last_seen.isoformat()
예제 #9
0
class PictureSerializer(Serializer):
    fields = (
        'id', 'game', 'title', 'link', 'size', 'type', 'usetype', 'taglevel1', 'taglevel2', 'taglevel3',
        'created_time', 'quin_tag',
        'pic_type', 'badge', 'extend_data')

    # id = IntField(attr='id')
    title = MethodField()
    link = MethodField()
    taglevel1 = MethodField()
    taglevel2 = MethodField()
    taglevel3 = MethodField()
    created_time = MethodField()
    # size = IntField(attr='_id')
    type = MethodField()
    usetype = MethodField()
    # game = IntField(attr='_id')
    # pic_type = IntField(attr='_id')
    extend_data = StrField(required=True)
    badge = MethodField()
    quin_tag = MethodField()

    async def get_mongo_Badge(self,id):
        return await Badge.objects.filter(id=id).find_all()[0]

    def get_quin_category(self, instance):
        if instance.category:
            return {"category_id": instance.category.id, "category_name": instance.category.name}
        return None

    def get_quin_high_category(self, instance):
        if instance.category:
            if instance.category.high:
                return {"high_id": instance.category.high.id, "high_name": instance.category.high.name}
        return None

    def get_created_time(self, obj):
        return obj.created_time.strftime("%Y-%m-%d %H:%M:%S")

    def get_badge(self, obj):
        if obj.badge == "0":
            return ""
        else:
            try:
                return Badge.objects.filter(id=obj.id).find_all()[0]
            except Exception:
                return ""

    def get_id(self, obj):
        return str(obj.id)

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

    def get_link(self, obj):
        if obj.usetype == 1:  # 查一下 应该是1
            return '%s%s%s' % (PIC_CDN_BROWSE, obj.content.startswith('/')
                               and obj.content or '/%s' % obj.content, PLAY_BGP_CSS)
        else:
            return '%s%s%s' % (PIC_CDN_BROWSE, obj.content.startswith('/')
                               and obj.content or '/%s' % obj.content, PLAY_ROLE_CSS)

    def get_type(self, obj):
        return ('webp', 'jpg', 'png', 'gif', 'bmp',)[obj.filetype]

    def get_usetype(self, obj):
        return ('bgp', 'role', "avatar", "item")[obj.usetype]

    def get_taglevel1(self, obj):
        if obj.taglevel1 > 0:
            taginfo = {}
            tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel1).get()
            taginfo["id"] = tag.id
            taginfo["name"] = tag.name
            return taginfo
        else:
            return None

    def get_taglevel2(self, obj):
        if obj.taglevel2 > 0:
            taginfo = {}
            tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel2).get()
            taginfo["id"] = tag.id
            taginfo["name"] = tag.name
            return taginfo
        else:
            return None

    def get_taglevel3(self, obj):
        if obj.taglevel3 > 0:
            taginfo = {}
            tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel3).get()
            taginfo["id"] = tag.id
            taginfo["name"] = tag.name
            return taginfo
        else:
            return None

    def get_quin_tag(self, instance):
        result = []
        if instance.quin_tag:
            for tag in instance.quin_tag:
                try:
                    tag = GameQuintag.select().where(GameQuintag.id == tag).get()
                except GameQuintag.DoesNotExist:
                    continue
                tag_dict = {
                    "id": tag.id,
                    "name": tag.name,
                    "category": None,
                    "high": None}
                if tag.category:
                    tag_dict["category"] = {
                        "id": tag.category.id,
                        "name": tag.category.name}
                    if tag.category.high:
                        tag_dict["high"] = {
                            "id": tag.category.high.id,
                            "name": tag.category.high.name}
                result.append(tag_dict)
        return result