예제 #1
0
def test_StudentsView_some_lessons(admin_client, db):
    from pashinin.models import Lesson
    from core import now
    assert Lesson.objects.filter().count() == 0
    Lesson.objects.create(
        status=0,
        start=now(),
        end=now()
    )
    assert Lesson.objects.filter().count() > 0
    r = admin_client.get('/students')
    assert r.status_code == 200
예제 #2
0
    def get_context_data(self, **kwargs):
        c = super().get_context_data(**kwargs)
        c['katex'] = True

        c['year'] = kwargs.get('year', None)
        if not c['year']:
            c['year'] = c.get('now', now()).year

        # c["host"] = self.request.host

        # c['EGE'] = settings.SITE_ID == 2
        c['EGE'] = self.request.host.name == 'ege'
        c['OGE'] = self.request.host.name == 'oge'
        c['exam_type'] = 0 if c['EGE'] else 1
        c['exam_type_str'] = 'ЕГЭ' if c['EGE'] else 'ОГЭ'

        c['menu']['index'] = {
            'title':
            'ЕГЭ' if c['EGE'] else 'ОГЭ',
            'url':
            reverse('index', host=c['host'].name),
            'hint':
            'Единый государственный экзамен'
            if c['EGE'] else 'Основной государственный экзамен'
        }
        c['menu'].current = 'index'
        c['subjects'] = Subject.objects.filter(published=True) \
                                       .order_by('name')
        for subj in c['subjects']:
            c['menu'][subj.slug] = {
                'title':
                subj.name,
                'url':
                reverse('subject:index',
                        host=c['host'].name,
                        kwargs={
                            'subj': subj.slug,
                        }),
            }
        # c['menu'] = Menu(
        #     [
        #         ('index', {
        #             'title': 'Главная',
        #             'url': reverse('index'),
        #         }),
        #         ('articles', {
        #             'title': 'Статьи',
        #             'url': reverse('articles:index'),
        #         } if c['user'].is_superuser else None),
        #         ('faq', {
        #             'title': 'Вопросы',
        #             'url': reverse('faq'),
        #         }),
        #         ('contacts', {
        #             'title': 'Контакты',
        #             'url': reverse('contacts'),
        #         }),
        #     ]
        # )
        return c
예제 #3
0
    def get_context_data(self, **kwargs):
        c = super().get_context_data(**kwargs)
        c['year'] = kwargs.get('year', None)
        if not c['year']:
            c['year'] = c.get('now', now()).year

        subj = kwargs['subj']  # from urls pattern
        try:
            c['subject'] = Subject.objects.get(slug=subj, published=True)
            c['menu'].current = subj
            # дательный падеж:
            c['po_subject'] = " ".join([
                morph.parse(w)[0].inflect({'datv'}).word
                for w in str(c['subject']).split()
            ]).lower()
        except Subject.DoesNotExist:
            c['redirect'] = reverse("index")
            c['ege'] = None
            return c
            # return HttpResponseRedirect(reverse("index"))

        c['tasks'] = []
        try:
            c['exam'] = Exam.objects.get(subject=c['subject'],
                                         year=c['year'],
                                         type=c['exam_type'])
            c['tasks'] = c['exam'].tasks.filter().order_by('order')
        except Exam.DoesNotExist:
            # c['redirect'] = reverse("index")
            # print('EGE.DoesNotExist')
            # c['subject'] = None
            c['exam'] = None
            c['status'] = 404

        return c
예제 #4
0
    def post(self, request, **kwargs):
        # request.body - bytes
        try:
            s = request.body.decode("utf-8")  # string
            d = urllib.parse.parse_qs(s)  # dict with 1 key - "payload"
            # d["payload"]    is a list with only 1 item - a string
            # This string contains JSON object described here:
            # https://docs.travis-ci.com/user/notifications#Webhooks-Delivery-Format
            payload = json.loads(d["payload"][0])
            # json_payload = parse_qs(request.body)['payload'][0]
        except Exception as e:
            log.error({"message": "Bad Travis data", 'error': str(e)})
            return HttpResponseBadRequest({
                'status': 'failed',
                'reason': 'malformed data'
            })

        # Auth
        # ---------
        signature = self._get_signature(request)
        try:
            public_key = self._get_travis_public_key()
        except requests.Timeout:
            log.error({"message": "Timed out retrieving Travis CI public key"})
            return HttpResponseBadRequest({'status': 'failed'})
        except requests.RequestException as e:
            log.error({
                "message": "Failed to retrieve Travis CI public key",
                'error': e.message
            })
            return HttpResponseBadRequest({'status': 'failed'})

        try:
            self.check_authorized(signature, public_key, d["payload"][0])
        except SignatureError:
            # Log the failure somewhere
            return HttpResponseBadRequest({'status': 'unauthorized'})
        # ---------
        #
        # We are sure it's Travis now
        # Do the job

        SUCCEDED = payload['result'] == 0
        NOTAG = payload['tag'] is None
        if SUCCEDED and not NOTAG:
            commit_sha1 = payload['commit']
            from core.tasks import project_update
            from core.models import SiteUpdate
            from core import now
            upd, created = SiteUpdate.objects.get_or_create(sha1=commit_sha1)
            upd.started = now()
            upd.travis_raw = d["payload"][0]
            upd.commit_message = payload['message']
            upd.save()
            project_update.delay(commit_sha1)

        return HttpResponse("")
예제 #5
0
def sign_request(key_id, key, method, host, port, request_uri):
    """Generates an 'Authentication' header with some sane defaults.

    >>> sign_request('keyid', 'mykey', 'POST', 'api.example.com', 443, '/foo/bar?baz=buzz') # doctest: +SKIP
    'MAC id="keyid", ts="1374996296", nonce="e4493430d227af804ef7fbac9c40d4564a133c03", mac="ntu+vZtLt98Vx2T1FpKXoPiCnhD3oJCTC6gioUlGNa0="'

    Args:
        method: A valid HTTP method, like 'GET' or 'POST'.
        host: The server name.
        request_uri: The URI of the request, including parameters.
        key_id: The key ID you negotiated with the server.
        key: The secret key you negotiated with the server.
        port: The remote port; defaults to 443.

    Returns:
        A value for the Authorization header. This will generate the timestamp,
        nonce, and mac for you.
    """

    ts = core.now()
    mynonce = core.nonce()
    mac = core.request_mac(key, ts, mynonce, method, host, port, request_uri)

    return core.authorization_header(key_id, ts, mynonce, mac)
예제 #6
0
 def get_context_data(self, **kwargs):
     c = super().get_context_data(**kwargs)
     c['year'] = kwargs.get('year', c.get('now', now()).year)
     c['tasks'] = EDUTask.objects.filter()
     return c