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(
# -*- 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
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
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):
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,
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
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)