示例#1
0
    def setUp(self):
        super().setUp()
        self.course = CourseFactory.create(
            start=datetime(2020, 1, 1),
            end=datetime(2028, 1, 1),
            enrollment_start=datetime(2020, 1, 1),
            enrollment_end=datetime(2028, 1, 1),
            emit_signals=True,
            modulestore=self.store,
            discussion_topics={"Test Topic": {
                "id": "test_topic"
            }},
        )
        chapter = ItemFactory(parent=self.course, category='chapter')
        ItemFactory(parent=chapter, category='sequential')

        self.client.login(username=self.user.username,
                          password=self.user_password)
        CourseEnrollment.enroll(self.user, self.course.id)

        self.request = RequestFactory().get('foo')
        self.request.user = self.user

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
示例#2
0
    def setUpClass(cls):
        super().setUpClass()
        cls.discussion_id = 'dummy_discussion_id'
        cls.course = CourseOverviewFactory.create(language='fr')

        # Patch the comment client user save method so it does not try
        # to create a new cc user when creating a django user
        with mock.patch('common.djangoapps.student.models.cc.User.save'):
            cls.thread_author = UserFactory(username='******',
                                            password='******',
                                            email='email')
            cls.comment_author = UserFactory(username='******',
                                             password='******',
                                             email='email')

            CourseEnrollmentFactory(user=cls.thread_author,
                                    course_id=cls.course.id)
            CourseEnrollmentFactory(user=cls.comment_author,
                                    course_id=cls.course.id)

        config = ForumsConfig.current()
        config.enabled = True
        config.save()

        cls.create_thread_and_comments()
示例#3
0
    def setUpClass(cls):
        super(TaskTestCase, cls).setUpClass()
        cls.discussion_id = 'dummy_discussion_id'
        cls.course = CourseOverviewFactory.create(language='fr')

        # Patch the comment client user save method so it does not try
        # to create a new cc user when creating a django user
        with mock.patch('student.models.cc.User.save'):
            cls.thread_author = UserFactory(
                username='******',
                password='******',
                email='email'
            )
            cls.comment_author = UserFactory(
                username='******',
                password='******',
                email='email'
            )

            CourseEnrollmentFactory(
                user=cls.thread_author,
                course_id=cls.course.id
            )
            CourseEnrollmentFactory(
                user=cls.comment_author,
                course_id=cls.course.id
            )

        config = ForumsConfig.current()
        config.enabled = True
        config.save()

        cls.create_thread_and_comments()
示例#4
0
def check_forum_heartbeat():
    """
    Check the forum connection via its built-in heartbeat service and create an answer which can be used in the LMS
    heartbeat django application.
    This function can be connected to the LMS heartbeat checker through the HEARTBEAT_CHECKS variable.
    """
    # To avoid dependency conflict
    from openedx.core.djangoapps.django_comment_common.models import ForumsConfig
    config = ForumsConfig.current()

    if not config.enabled:
        # If this check is enabled but forums disabled, don't connect, just report no error
        return 'forum', True, 'OK'

    try:
        res = requests.get(
            '%s/heartbeat' % COMMENTS_SERVICE,
            timeout=config.connection_timeout
        ).json()
        if res['OK']:
            return 'forum', True, 'OK'
        else:
            return 'forum', False, res.get('check', 'Forum heartbeat failed')
    except Exception as fail:
        return 'forum', False, unicode(fail)
示例#5
0
    def setUp(self):
        super(TestCreateCommentsServiceUser, self).setUp()
        self.username = "******"
        self.url = reverse("create_account")
        self.params = {
            "username": self.username,
            "email": "*****@*****.**",
            "password": "******",
            "name": "Test User",
            "honor_code": "true",
            "terms_of_service": "true",
        }

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
    def setUp(self):
        super(TestCreateCommentsServiceUser, self).setUp()
        self.username = "******"
        self.url = reverse("create_account")
        self.params = {
            "username": self.username,
            "email": "*****@*****.**",
            "password": "******",
            "name": "Test User",
            "honor_code": "true",
            "terms_of_service": "true",
        }

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
示例#7
0
文件: utils.py 项目: edx/edx-platform
    def setUp(self):
        super(ForumsEnableMixin, self).setUp()

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
示例#8
0
def perform_request(method,
                    url,
                    data_or_params=None,
                    raw=False,
                    metric_action=None,
                    metric_tags=None,
                    paged_results=False):
    # To avoid dependency conflict
    from openedx.core.djangoapps.django_comment_common.models import ForumsConfig
    config = ForumsConfig.current()

    if not config.enabled:
        raise CommentClientMaintenanceError('service disabled')

    if metric_tags is None:
        metric_tags = []

    metric_tags.append(u'method:{}'.format(method))
    if metric_action:
        metric_tags.append(u'action:{}'.format(metric_action))

    if data_or_params is None:
        data_or_params = {}
    headers = {
        'X-Edx-Api-Key': config.api_key,
        'Accept-Language': get_language(),
    }
    request_id = uuid4()
    request_id_dict = {'request_id': request_id}

    if method in ['post', 'put', 'patch']:
        data = data_or_params
        params = request_id_dict
    else:
        data = None
        params = data_or_params.copy()
        params.update(request_id_dict)
    response = requests.request(method,
                                url,
                                data=data,
                                params=params,
                                headers=headers,
                                timeout=config.connection_timeout)

    metric_tags.append(u'status_code:{}'.format(response.status_code))
    status_code = int(response.status_code)
    if status_code > 200:
        metric_tags.append(u'result:failure')
    else:
        metric_tags.append(u'result:success')

    if 200 < status_code < 500:  # lint-amnesty, pylint: disable=no-else-raise
        raise CommentClientRequestError(response.text, response.status_code)
    # Heroku returns a 503 when an application is in maintenance mode
    elif status_code == 503:
        raise CommentClientMaintenanceError(response.text)
    elif status_code == 500:
        raise CommentClient500Error(response.text)
    else:
        if raw:
            return response.text
        else:
            try:
                data = response.json()
            except ValueError:
                raise CommentClientError(  # lint-amnesty, pylint: disable=raise-missing-from
                    u"Invalid JSON response for request {request_id}; first 100 characters: '{content}'"
                    .format(request_id=request_id,
                            content=response.text[:100]))
            return data
示例#9
0
def perform_request(method,
                    url,
                    data_or_params=None,
                    raw=False,
                    metric_action=None,
                    metric_tags=None,
                    paged_results=False):
    # To avoid dependency conflict
    from openedx.core.djangoapps.django_comment_common.models import ForumsConfig
    config = ForumsConfig.current()

    if not config.enabled:
        raise CommentClientMaintenanceError('service disabled')

    if metric_tags is None:
        metric_tags = []

    metric_tags.append(u'method:{}'.format(method))
    if metric_action:
        metric_tags.append(u'action:{}'.format(metric_action))

    if data_or_params is None:
        data_or_params = {}
    headers = {
        'X-Edx-Api-Key': config.api_key,
        'Accept-Language': get_language(),
    }
    request_id = uuid4()
    request_id_dict = {'request_id': request_id}

    if method in ['post', 'put', 'patch']:
        data = data_or_params
        params = request_id_dict
    else:
        data = None
        params = data_or_params.copy()
        params.update(request_id_dict)
    response = requests.request(method,
                                url,
                                data=data,
                                params=params,
                                headers=headers,
                                timeout=config.connection_timeout)

    metric_tags.append(u'status_code:{}'.format(response.status_code))
    status_code = int(response.status_code)
    if status_code > 200:
        metric_tags.append(u'result:failure')
    else:
        metric_tags.append(u'result:success')

    if 200 < status_code < 500:
        log.error(
            u"Comment Client Request Error on url={url} with error message='{text}' and "
            u"status_code={status_code}".format(
                url=url, status_code=response.status_code, text=response.text))
        raise CommentClientRequestError(response.text, response.status_code)
    elif status_code in (502, 504):
        log.error(
            u"Comment Client Gateway Error on url={url} with error message='{text}' and "
            u"status_code={status_code}".format(
                url=url, status_code=response.status_code, text=response.text))
        raise CommentClientGatewayError(response.text, response.status_code)
    # Heroku returns a 503 when an application is in maintenance mode
    elif status_code == 503:
        log.error(
            u"Comment Client Maintenance Error on url={url} with error message='{text}' and "
            u"status_code={status_code}".format(
                url=url, status_code=response.status_code, text=response.text))
        raise CommentClientMaintenanceError(response.text,
                                            response.status_code)
    elif status_code == 500:
        log.error(
            u"Comment Client 500 Error on url={url} with error message='{text}' and "
            u"status_code={status_code}".format(
                url=url, status_code=response.status_code, text=response.text))
        raise CommentClient500Error(
            u"Internal Server Error: {}".format(response.text),
            response.status_code)
    else:
        if raw:
            return response.text
        else:
            try:
                data = response.json()
            except ValueError:
                #This error message is modified only for debugging purpose and will be revert back in future.
                raise CommentClientError(
                    u"Invalid JSON response for request {request_id} with status code: {status_code}"
                    u" and response length: {length}; first 100 characters: '{content}'"
                    .format(request_id=request_id,
                            content=response.text[:100],
                            length=len(response.text),
                            status_code=response.status_code))
            return data
示例#10
0
    def setUp(self):
        super(ForumsEnableMixin, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
示例#11
0
    def setUp(self):
        super().setUp()

        config = ForumsConfig.current()
        config.enabled = True
        config.save()
示例#12
0
def perform_request(method, url, data_or_params=None, raw=False,
                    metric_action=None, metric_tags=None, paged_results=False):
    # To avoid dependency conflict
    from openedx.core.djangoapps.django_comment_common.models import ForumsConfig
    config = ForumsConfig.current()

    if not config.enabled:
        raise CommentClientMaintenanceError('service disabled')

    if metric_tags is None:
        metric_tags = []

    metric_tags.append(u'method:{}'.format(method))
    if metric_action:
        metric_tags.append(u'action:{}'.format(metric_action))

    if data_or_params is None:
        data_or_params = {}
    headers = {
        'X-Edx-Api-Key': config.api_key,
        'Accept-Language': get_language(),
    }
    request_id = uuid4()
    request_id_dict = {'request_id': request_id}

    if method in ['post', 'put', 'patch']:
        data = data_or_params
        params = request_id_dict
    else:
        data = None
        params = data_or_params.copy()
        params.update(request_id_dict)
    response = requests.request(
        method,
        url,
        data=data,
        params=params,
        headers=headers,
        timeout=config.connection_timeout
    )

    metric_tags.append(u'status_code:{}'.format(response.status_code))
    if response.status_code > 200:
        metric_tags.append(u'result:failure')
    else:
        metric_tags.append(u'result:success')

    if 200 < response.status_code < 500:
        raise CommentClientRequestError(response.text, response.status_code)
    # Heroku returns a 503 when an application is in maintenance mode
    elif response.status_code == 503:
        raise CommentClientMaintenanceError(response.text)
    elif response.status_code == 500:
        raise CommentClient500Error(response.text)
    else:
        if raw:
            return response.text
        else:
            try:
                data = response.json()
            except ValueError:
                raise CommentClientError(
                    u"Invalid JSON response for request {request_id}; first 100 characters: '{content}'".format(
                        request_id=request_id,
                        content=response.text[:100]
                    )
                )
            return data