コード例 #1
0
from apiclient import discovery
from oauth2client import client
from PeerReview.Logger import getLogger
import httplib2

log = getLogger("Service")

# reference:
# https://stackoverflow.com/a/44518587/8741626  make cache_discovery=False for all


def getClassRoomService(credentials):
    http = client.OAuth2Credentials.from_json(credentials).authorize(
        httplib2.Http())
    return discovery.build('classroom', 'v1', http=http, cache_discovery=False)


def getDriveService(credentials):
    http = client.OAuth2Credentials.from_json(credentials).authorize(
        httplib2.Http())
    return discovery.build('drive', 'v3', http=http, cache_discovery=False)


def getSheetService(credentials):
    http = client.OAuth2Credentials.from_json(credentials).authorize(
        httplib2.Http())
    return discovery.build('sheets', 'v4', http=http, cache_discovery=False)


def getMailService(credentials):
    http = client.OAuth2Credentials.from_json(credentials).authorize(
コード例 #2
0
ファイル: views.py プロジェクト: Austen07/peer_assessment
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import httplib2
from oauth2client import client
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
from PeerReview.Logger import getLogger
from django.contrib.auth import logout
from django.conf import settings
from oauth2client.file import Storage

log = getLogger("OAuth")
# HOST = 'http://localhost:8000'
redirect_uri = settings.HOST + '/auth/oauth2callback'

def login(request):
    if 'credentials' not in request.session:
        log.info("No Credentials Found. Getting Credentials")
        return redirect('oauth2callback')
    return redirect('/courses')


def auth_return(request):
    log.info(request)
    flow = client.flow_from_clientsecrets(
        'client_secret.json',
        scope= settings.SCOPES,
        redirect_uri=(redirect_uri))
    flow.params['access_type'] = 'offline'  # offline access
    flow.params['include_granted_scopes'] = 'true'  # incremental auth
コード例 #3
0
ファイル: mail.py プロジェクト: Austen07/peer_assessment
import base64
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from service import getMailService
from PeerReview.Logger import getLogger

log = getLogger("mail")

def SendMessage(credentials, sender, to, bcc, subject, msgHtml, msgPlain):
    """
    Sends message to the "to" and "bcc" list from sender.
    Arguments:
        credentials: access to Gmail API.
        sender: Sender of the mail
        to: Recievers of the mail
        bcc: BCCs of the mail
        subject: Subject of the mail
        msgHtml: HTML message of the mail
        msgPlain: Plain messge of the mail
    """
    service = getMailService(credentials)
    message1 = CreateMessageHtml(sender, to, bcc, subject, msgHtml, msgPlain)
    SendMessageInternal(service, "me", message1)

def SendMessageInternal(service, user_id, message):
    """
    Sends mail using Google Mail service
    Arguments:
        service: access Gmail
        user_id: UserId of sender
        message: Message of the mail
コード例 #4
0
from random import shuffle
from PeerReview.Logger import getLogger
from service import getClassRoomService, getDriveService, getSheetService
from mail import SendMessage
from keyConstants import *
from instructorUtility import getInstructorEmailList

log = getLogger("distribution")

# courseId is the id of course
# courseworkId is the id of assignment


def getStudentSubmissionList(service, courseId, courseWorkId):
    """
    arguments: 
        service: used to access Google Classroom
    return: 
        A list of student submission
    """
    studentSubmissionListResponse = service.courses().courseWork(
    ).studentSubmissions().list(courseId=courseId,
                                courseWorkId=courseWorkId).execute()
    studentSubmissionList = studentSubmissionListResponse.get(
        STUDENT_SUBMISSIONS_KEY)
    log.info("Student Submission list is generated for the assignment : %s",
             courseWorkId)
    return studentSubmissionList


def getDistributionData(service, courseId, courseWorkId):
コード例 #5
0
from datetime import datetime
from service import getClassRoomService, getDriveService
from PeerReview.Logger import getLogger
from keyConstants import *
from mail import SendMessage

log = getLogger("instructorUtility")


def createAssignment(credentials, courseId, assignmentDetails):
    """
    Create google classroom coursework using the configration given by the teacher
    Arguments:
        credentials: access to Google API
        assignmentDetails: Assignment configuration given by the teacher
    """
    try:
        assignmentDeadline = assignmentDetails[ASSIGNMENT_DEADLINE_KEY]
        assignmentLink = assignmentDetails[ASSIGNMENT_LINK_KEY]
        assignmentTitle = assignmentDetails[ASSIGNMENT_NAME_KEY]
        requestBody = createRequestBodyForAssignmentCreation(
            assignmentDeadline, assignmentLink, assignmentTitle)
        classroomService = getClassRoomService(credentials)
        courseWorkCreateResponse = classroomService.courses().courseWork(
        ).create(courseId=courseId, body=requestBody).execute()
        return courseWorkCreateResponse[ID_KEY]
    except Exception as err:
        raise type(err)("Failed to create courseWork " + err.message)


def createRequestBodyForAssignmentCreation(assignmentDeadline, assignmentLink,
コード例 #6
0
from django.shortcuts import HttpResponseRedirect
from django.conf import settings
from PeerReview.Logger import getLogger

log = getLogger("AuthRequiredMiddleware")


class AuthRequiredMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # for each request before the view (and later middleware) are called
        # should execute this code
        allowed_url = [
            '/auth/oauth2callback/', '/auth/portalLogin/', '/accounts/login/',
            '/about/', '/'
        ]
        if request.path_info in allowed_url:
            return self.get_response(request)
        elif 'credentials' not in request.session:
            log.info("Redirecting to authentication page")
            return HttpResponseRedirect(settings.LOGIN_URL)

        response = self.get_response(request)

        return response
コード例 #7
0
from keyConstants import *
from service import getClassRoomService
from collections import OrderedDict
from PeerReview.Logger import getLogger
from sheetUtility import readAssignmentDetails
from instructorUtility import getGradeFormsFolderId
from OAuth.views import get_global_account_credentials
import json

log = getLogger("Models")


def formatAssignmentDetails(credentials, request, courseId):
    form_details = OrderedDict()
    for k in INSTRUCTOR_FORM_KEYS:
        if k in request.keys():
            form_details[k] = request[k]
        else:
            form_details[k] = ""
    number_questions = int(form_details['numberQuestions'])
    for i in range(1, number_questions + 1):
        form_details["q-" + str(i)] = request["q-" + str(i)]
    return form_details


def formatGradeDetails(req, count):
    form_details = {}
    for k in GRADE_FORM_KEYS:
        a = []
        for i in range(0, int(count)):
            key = k + str(i + 1)