Exemple #1
0
def delete_message(title,
                   content,
                   url,
                   message_type=MESSAGE_TYPE_SYSTEM,
                   user=None,
                   faculty=None,
                   major=None,
                   classes=None,
                   team=None):
    users = get_users(user, faculty, major, classes, team)
    logger.info("delete message[%s] from user count[%d] url[%s]", content,
                len(users), url)

    for u in users:
        message = Message.objects.filter(
            content=content,
            user=u,
            url=url,
            message_type=message_type,
        ).first()
        if message:
            message.read = True
            message.save()

    delete_cache(_message_cache_instance)
    delete_cache(_cache_instance)
Exemple #2
0
def add_message(title,
                content,
                url,
                message_type=MESSAGE_TYPE_SYSTEM,
                user=None,
                faculty=None,
                major=None,
                classes=None,
                team=None):
    '''
        新增一个消息, 
        content: 消息内容,
        message_type: 消息类型,0系统消息, 1应用活动消息
        user: 发送的对象
        faculty: 院信息
        major: 年级信息
        classes: 班级信息
        team: 队伍信息
    '''

    users = get_users(user, faculty, major, classes, team)
    logger.info("new message[%s] send to user count[%d] url[%s]", content,
                len(users), url)

    for u in users:
        Message.objects.create(
            content=content,
            user=u,
            url=url,
            message_type=message_type,
        )

    delete_cache(_message_cache_instance)
    delete_cache(_cache_instance)
Exemple #3
0
    def clear_cache(self):
        # 暂时删除所有缓存
        from django.core.cache import cache
        cache.clear()

        delete_cache(self.cache)
        if hasattr(self, 'related_cache_class'):
            self.clear_cls_cache(self.related_cache_class)
Exemple #4
0
def add_calendar(title,
                 content,
                 type,
                 url,
                 is_event,
                 user=None,
                 faculty=None,
                 major=None,
                 classes=None,
                 team=None,
                 show_time=None):
    if not show_time:
        show_time = date.today()

    key_calendar = "%s-%s-%d-%s-%s-%s-%s-%s-%s-%s" % \
                   (
                       title, content, type, str(url),
                       str(getattr(user, "username", "none")),
                       str(getattr(faculty, "name", "none")),
                       str(getattr(major, "name", "none")),
                       str(getattr(classes, "name", "none")),
                       str(getattr(team, "name", "none")),
                       str(show_time),
                   )
    key_calendar = hashlib.md5(key_calendar).hexdigest().decode("utf-8")
    obj = _calendar_cache_instance.get(key_calendar)
    if not obj:
        obj = Calendar.objects.filter(title=title,
                                      content=content,
                                      type=type,
                                      url=url,
                                      is_event=is_event,
                                      user=user,
                                      faculty=faculty,
                                      major=major,
                                      classes=classes,
                                      team=team,
                                      show_time=show_time)
    if obj:
        return

    obj = Calendar.objects.create(
        title=title,
        content=content,
        type=type,
        url=url,
        is_event=is_event,
        user=user,
        faculty=faculty,
        major=major,
        classes=classes,
        team=team,
    )

    cache_utils.delete_cache(_calendar_cache_instance)
    _calendar_cache_instance.set(key_calendar, obj, settings.DEFAULT_CACHE_AGE)
Exemple #5
0
    def clear_cls_cache(cls):
        # 暂时删除所有缓存
        from django.core.cache import cache
        cache.clear()

        if not isinstance(cls, (list, tuple)):
            cls = [cls]
        for c in cls:
            if isinstance(c, (six.string_types, six.text_type)):
                try:
                    c = import_string(c)
                except:
                    continue
            cache_view_name = _generate_cache_view_name(c)
            cache = CacheProduct(cache_view_name)
            delete_cache(cache)
Exemple #6
0
def calendar_init():
    Calendar.objects.all().delete()
    cache_utils.delete_cache(_calendar_cache_instance)
Exemple #7
0
def handler_task_list(request, testpaper_id):
    examname = request.data.get('examname', '')
    examDescription = request.data.get('examDescription', '')
    datas = request.data.get('data', '')
    testpaper_id = int(testpaper_id)

    if request.method == "GET":
        rows = []
        if testpaper_id != 0:
            taskArrary = TestPaperTask.objects.filter(
                test_paper__id=testpaper_id)
            for t in taskArrary:
                task = get_task_object(t.task_hash)
                if not task:
                    continue
                data = SerializerNew(task, t).data
                rows.append(data)

        return Response(data=rows, status=status.HTTP_200_OK)

    if not datas or not json.loads(datas):
        raise exceptions.ParseError(PracticeResError.NO_EXAM_QUESTIONS)
    if not examname:
        raise exceptions.ParseError(PracticeResError.WARN_MESSAGES_7)
    if capability_models.TestPaper.objects.filter(
            status=capability_models.TestPaper.Status.NORMAL,
            name=examname).exclude(pk=testpaper_id).exists():
        raise exceptions.ParseError(PracticeResError.WARN_MESSAGES_6)

    datas = json.loads(datas)

    number = 0
    allScore = 0
    for data in datas:
        number = number + 1
        allScore = allScore + float(data['score'])

    logo_url = request.data.get("logo", None)

    if testpaper_id == 0:
        # 新增
        # 创建一张试卷
        if logo_url is not None and logo_url != '':
            logo = save_image(logo_url)
        else:
            logo = None
        testPaper = capability_models.TestPaper.objects.create(
            name=examname,
            task_number=number,
            task_all_score=allScore,
            introduction=examDescription,
            create_time=timezone.now(),
            create_user=request.user,
            logo=logo,
            public=True,
        )
    else:
        testPaper = capability_models.TestPaper.objects.filter(id=testpaper_id)
        if not testPaper:
            raise exceptions.NotFound(PracticeResError.NOT_FOUND_EXAM)
        testPaper = testPaper[0]
        testPaper.name = examname
        testPaper.task_number = number
        testPaper.task_all_score = allScore
        testPaper.introduction = examDescription
        if logo_url is not None and logo_url != '':
            logos = save_image(logo_url)
            testPaper.logo = logos
        testPaper.save()

        event_task_list = TestPaperTask.objects.filter(test_paper=testPaper)
        if event_task_list:
            # 判断原来是否存在初始数据, 批量删除
            try:
                event_task_list.delete()
            except ProtectedError:
                raise exceptions.ParseError(
                    PracticeResError.CANNT_CHANGE_HAS_DONE)

    event_task_list = []
    for data in datas:
        # copy_hash = copy_task(data['hash'])
        # if not copy_hash:
        #     continue

        hash_list = []
        if int(data['hash'].split('.')[-1]) != 0:
            hash_list.append(data['hash'])
            task_handler_class = TaskHandler
            copy_hash = task_handler_class.handle_tasks(hash_list)
            copy_hash = copy_hash[0]
        else:
            copy_hash = copy_task(data['hash'])
            if not copy_hash:
                continue

        event_task = TestPaperTask(test_paper=testPaper,
                                   task_hash=copy_hash,
                                   score=data['score'])
        event_task_list.append(event_task)
    TestPaperTask.objects.bulk_create(event_task_list)

    cache = CacheProduct(
        "%s-%s" % (TestPaperViewSet.__module__, TestPaperViewSet.__name__))
    delete_cache(cache)

    return Response(data={'type': 'success'}, status=status.HTTP_200_OK)
Exemple #8
0
def ret_testpaper_detail(request, testpaper_id):
    if request.method == "GET":
        context = {}
        single_selections = []
        multiple_selections = []
        judgment_selections = []
        analysis_questions = []
        testpaper_id = int(testpaper_id)

        testpaper = capability_models.TestPaper.objects.get(id=testpaper_id)
        context['name'] = testpaper.name
        context['number'] = testpaper.task_number
        context['allScore'] = testpaper.task_all_score

        taskArrary = TestPaperTask.objects.filter(test_paper=testpaper)
        rows = []
        for t in taskArrary:
            task = get_task_object(t.task_hash)
            rows.append(Serializer(task, t).data)

        context['tasks'] = rows
        for task in context["tasks"]:
            if task.has_key("is_choice_question"):
                if _judgment_question_type(
                        task["hash"]
                ) == theory_models.ChoiceTask.TopicProblem.SINGLE:
                    single_selections.append(task)
                elif _judgment_question_type(
                        task["hash"]
                ) == theory_models.ChoiceTask.TopicProblem.MULTIPLE:
                    multiple_selections.append(task)
                else:
                    judgment_selections.append(task)
            else:
                analysis_questions.append(task)
        tasks = dict(judgment_selections=judgment_selections,
                     single_selections=single_selections,
                     multiple_selections=multiple_selections,
                     analysis_questions=analysis_questions)
        context['tasks'] = tasks
        return response.Response({'error_code': 0, 'response_data': context})
    elif request.method == "POST":
        name = request.data['examname']
        if int(testpaper_id) == 0 and TestPaper.objects.filter(
                name=name).exists():
            return response.Response({'error_code': 1})

        questions = request.data['questions']
        list = questions.values()
        list.sort(key=lambda k: (k.get('qorder', 0)))
        number = 0
        allScore = 0

        for questions in list:
            number = number + 1
            allScore = allScore + int(questions['score'])

        event_teachers = request.data.get('teacher')

        if int(testpaper_id) > 0:
            testPaper = TestPaper.objects.get(id=testpaper_id)
            testPaper.name = name
            testPaper.task_number = number
            testPaper.task_all_score = allScore
            testPaper.teacher = ",".join(
                event_teachers) if event_teachers else None
            testPaper.save()

            tpt = TestPaperTask.objects.filter(test_paper=testPaper)
            for t in tpt:
                t.delete()

        else:
            testPaper = TestPaper.objects.create(
                name=name,
                task_number=number,
                task_all_score=allScore,
                create_time=timezone.now(),
                create_user=request.user,
                public=True,
            )

        for questions in list:
            TestPaperTask.objects.create(test_paper=testPaper,
                                         task_hash=questions['hash'],
                                         score=questions['score'])

        cache = CacheProduct(
            "%s-%s" % (TestPaperViewSet.__module__, TestPaperViewSet.__name__))
        delete_cache(cache)

        return response.Response({'error_code': 1})