From b608a41b5591fd3f9605d30da4308bc5e229ed2c Mon Sep 17 00:00:00 2001 From: a2nr Date: Sat, 16 Mar 2024 17:33:23 +0700 Subject: [PATCH 1/2] refactoring, support google docs work with list, using image that store in git --- .gitignore | 2 +- Scripts/python/Library/bedc.py | 28 +++++ Scripts/python/Library/gdoc.py | 129 ++++++------------------ Scripts/python/Library/gquiz.py | 126 ++++------------------- Scripts/python/Library/gservice.py | 63 +++++++++++- Scripts/python/Library/imageprovider.py | 23 ----- Scripts/python/Library/moodleQuiz.py | 32 ++---- Scripts/python/quiz_generator.py | 34 ++++--- Scripts/python/test_gquiz.py | 75 -------------- Scripts/python/unit_test.py | 95 +++++++++++++++++ myedu.ods | Bin 42313 -> 46090 bytes 11 files changed, 269 insertions(+), 338 deletions(-) create mode 100644 Scripts/python/Library/bedc.py delete mode 100644 Scripts/python/Library/imageprovider.py delete mode 100644 Scripts/python/test_gquiz.py create mode 100644 Scripts/python/unit_test.py diff --git a/.gitignore b/.gitignore index 139c0ed..d747229 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ client_secret.json -token.json +token.* __pycache__/ diff --git a/Scripts/python/Library/bedc.py b/Scripts/python/Library/bedc.py new file mode 100644 index 0000000..ac2da27 --- /dev/null +++ b/Scripts/python/Library/bedc.py @@ -0,0 +1,28 @@ +class bedc: + def __init__(self): + self.infoPrint = self._defaultPrint + self.savePath = './' + + def _defaultPrint(self, text : str, progress: int): + print("{}% {}".format(progress, text)) + + def AttachProcessInfo(self, callback): + self.infoPrint = callback + + def setProgress(self, i : int): + self.progress = i + + def setSavePath(self, path): + self.savePath = path + + def createOption(self, index, value, image=None): + self.infoPrint("creating option", self.progress) + + def createQuestion(self, title, description, options, indexAnswer, itemImage=None): + self.infoPrint("creating create question", self.progress) + + def submitItem(self): + self.infoPrint("submiting question", self.progress) + + def update(self): + self.infoPrint("updating remote", self.progress) diff --git a/Scripts/python/Library/gdoc.py b/Scripts/python/Library/gdoc.py index d10194d..5e502d1 100644 --- a/Scripts/python/Library/gdoc.py +++ b/Scripts/python/Library/gdoc.py @@ -1,125 +1,50 @@ # coding: utf-8 from __future__ import unicode_literals -import os.path, time -from google.auth.transport.requests import Request -from google.oauth2.credentials import Credentials -from google_auth_oauthlib.flow import InstalledAppFlow -from googleapiclient.discovery import build -from googleapiclient.errors import HttpError -from pprint import pprint -import requests -from urllib.parse import urlparse +import time, json +from gservice import gservice -class gdoc: +class gdoc(gservice): def __init__(self): - ''' - Args : - templateId : get the id from link GoogleForm - ''' - self.image_temp_service_url = "https://tmpfiles.org/api/v1/upload" + super(gdoc, self).__init__() + self.image_temp_service_url = "https://git.manakin-gentoo.ts.net/a2nr/boring_edu_doc/raw/branch/master" + # self.image_temp_service_url = "https://tmpfiles.org/api/v1/upload" + # self.image_temp_service_url = "https://tmpfiles.org/api/v1/upload" # self.image_temp_service_url = "https://uguu.se/upload.php" self.submition = {"requests":[]} - self.docs_service = None self.main_docs = None - self.infoPrint = self._defaultPrint self.progress = -1 self.resultUri = "" - self.savePath = './' self.questionKey = [] - def setProgress(self, i : int): - self.progress = i - - def setSavePath(self, path): - self.savePath = path - - def AttachProcessInfo(self, callback): - self.infoPrint = callback - - def _defaultPrint(self, text : str, progress: int): - print("{}% {}".format(progress, text)) - - def generateService(self): - ''' Start Tokenizing - here is the way to get token - link : https://developers.google.com/docs/api/quickstart/python - ''' + def generateService(self, name): SCOPES = ["https://www.googleapis.com/auth/documents",] + self.generateToken('docs', SCOPES) + self.buildDocsService() + self.main_docs = self.service.documents().create(body={"title":name}).execute() - creds = None - # The file token.json stores the user's access and refresh tokens, and is - # created automatically when the authorization flow completes for the first - # time. - if os.path.exists('token.json'): - creds = Credentials.from_authorized_user_file('token.json', SCOPES) - self.infoPrint("token already exist",self.progress) - # If there are no (valid) credentials available, let the user log in. - if not creds or not creds.valid: - if creds and creds.expired and creds.refresh_token: - creds.refresh(Request()) - self.infoPrint("refresh token",self.progress) - else: - flow = InstalledAppFlow.from_client_secrets_file( - self.savePath+'/secret/client_secret.json', SCOPES) - creds = flow.run_local_server(port=0) - self.infoPrint("generate token",self.progress) - # Save the credentials for the next run - with open('token.json', 'w') as token: - token.write(creds.to_json()) - - try: - self.infoPrint("creating service",self.progress) - self.docs_service = build('docs', 'v1', credentials=creds) - - except HttpError as err: - print(err) - ''' End Tokenizing - ''' - - def createDocs(self, name): - try: - self.infoPrint("creating document",self.progress) - self.main_docs = self.docs_service.documents().create(body={"title":name}).execute() - except HttpError as error: - print('An error occurred: %s' % error) - - def createOption(self, value, image=None): - self.infoPrint("creating option",self.progress) + def createOption(self, index, value, image=None): + super().createOption(index, value, image) opttxt = "\t{}\r\n".format(value) opt = [{'insertText' : { 'location':{ 'index': 1, }, 'text': opttxt }}] if(image != None): - self.infoPrint("uploading option image... ",self.progress) - req = requests.post(self.image_temp_service_url,files={"file": open(image,'rb')}) - if(req.json()['status'] == 'error'): - raise Exception("upload failed : {}".format(req.json())) - time.sleep(3) - self.infoPrint("uploading option image... ok",self.progress) - u = urlparse(req.json()['data']['url']) opt.append( { 'insertInlineImage' : { - 'uri' : u._replace(path="/dl"+u.path).geturl(), + 'uri' : self.image_temp_service_url + image, 'location' : { 'index' : len(opttxt)-1}} }) return opt def createQuestion(self, title, description, options, indexAnswer, itemImage=None): - self.infoPrint("create question...",self.progress) + super().createQuestion(title, description, options, indexAnswer, itemImage) itemtxt = "{}\r\n".format(description) item = [{'insertText' : { 'text': itemtxt, 'location':{'index': 1,}}}] if (itemImage != None): - self.infoPrint("uploading question image...",self.progress) - req = requests.post(self.image_temp_service_url,files={"file": open(itemImage,'rb')}) - if(req.json()['status'] == 'error'): - raise Exception("upload failed : {}".format(req.json())) - time.sleep(3) - self.infoPrint("uploading question image... ok",self.progress) - u = urlparse(req.json()['data']['url']) item.append( { 'insertInlineImage' : { - 'uri' : u._replace(path="/dl"+u.path).geturl(), + 'uri' : self.image_temp_service_url + itemImage, 'location' : { 'index' : len(itemtxt)-1 }} }) item = list(reversed(options)) + item @@ -127,17 +52,29 @@ class gdoc: return item def submitItem(self, index, item): - self.infoPrint("submit question",self.progress) + super().submitItem() for _item in item : submition = {} submition["requests"] = _item print(submition) - r = self.docs_service.documents().batchUpdate(documentId=self.main_docs["documentId"], body=submition).execute() + r = self.service.documents().batchUpdate(documentId=self.main_docs["documentId"], body=submition).execute() print(r) + time.sleep(.8) def update(self): - self.infoPrint("Updating Docs...",self.progress) + super().update() # Prints the result to show the question has been added - # get_result = self.docs_service.documents().get(documentId=self.main_docs["documentId"]).execute() - self.resultUri = self.main_docs["documentId"] + state = self.service.documents().get(documentId=self.main_docs["documentId"]).execute() + content = state['body']['content'] + endIndex = content[len(content)-1]['endIndex'] + requests = [ + {'insertText': { 'text' : "\r\n\r\n"+"\r\n".join(["{}".format(chr(64+key)) for key in self.questionKey]), 'location': {'index': endIndex-1}}}, + {'insertPageBreak': {'location': {'index': endIndex}}}, + {'createParagraphBullets': {'range': {'startIndex': 1, 'endIndex': endIndex }, 'bulletPreset': 'NUMBERED_DECIMAL_ALPHA_ROMAN',}} + ] + print(requests) + r = self.service.documents().batchUpdate(documentId=self.main_docs["documentId"], body={'requests' : requests}).execute() + print(r) + + self.resultUri = "https://docs.google.com/document/d/" + self.main_docs["documentId"] + "/edit" self.infoPrint("Updating Form... Done",self.progress) diff --git a/Scripts/python/Library/gquiz.py b/Scripts/python/Library/gquiz.py index 0605c6d..98e4df3 100644 --- a/Scripts/python/Library/gquiz.py +++ b/Scripts/python/Library/gquiz.py @@ -1,31 +1,23 @@ # coding: utf-8 from __future__ import unicode_literals -import os.path, time -from google.auth.transport.requests import Request -from google.oauth2.credentials import Credentials -from google_auth_oauthlib.flow import InstalledAppFlow -from googleapiclient.discovery import build -from googleapiclient.errors import HttpError -from pprint import pprint -import requests -from urllib.parse import urlparse +import time +from gservice import gservice -class gquiz: +class gquiz(gservice): def __init__(self): ''' Args : templateId : get the id from link GoogleForm ''' - self.image_temp_service_url = "https://tmpfiles.org/api/v1/upload" + super(gquiz, self).__init__() + self.image_temp_service_url = "https://git.manakin-gentoo.ts.net/a2nr/boring_edu_doc/raw/branch/master" + # self.image_temp_service_url = "https://tmpfiles.org/api/v1/upload" # self.image_temp_service_url = "https://uguu.se/upload.php" self.submition = {"requests":[]} - self.form_service = None self.main_form = None - self.infoPrint = self._defaultPrint self.progress = -1 self.resultUri = "" - self.savePath = './' self.submition["requests"].append({ "updateSettings": { @@ -38,68 +30,14 @@ class gquiz: } }) - def setProgress(self, i : int): - self.progress = i - - def setSavePath(self, path): - self.savePath = path - - def AttachProcessInfo(self, callback): - self.infoPrint = callback - - def _defaultPrint(self, text : str, progress: int): - print("{}% {}".format(progress, text)) - - def generateService(self): - ''' Start Tokenizing - here is the way to get token - link : https://developers.google.com/docs/api/quickstart/python - ''' + def generateService(self, name): SCOPES = ["https://www.googleapis.com/auth/forms.body",] DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" + self.generateToken('form', SCOPES) + self.buildFormService(DISCOVERY_DOC) + self.main_form = self.service.forms().create(body={"info":{"title":name}}).execute() - creds = None - # The file token.json stores the user's access and refresh tokens, and is - # created automatically when the authorization flow completes for the first - # time. - if os.path.exists('token.json'): - creds = Credentials.from_authorized_user_file('token.json', SCOPES) - self.infoPrint("token already exist",self.progress) - # If there are no (valid) credentials available, let the user log in. - if not creds or not creds.valid: - if creds and creds.expired and creds.refresh_token: - creds.refresh(Request()) - self.infoPrint("refresh token",self.progress) - else: - flow = InstalledAppFlow.from_client_secrets_file( - self.savePath+'/secret/client_secret.json', SCOPES) - creds = flow.run_local_server(port=0) - self.infoPrint("generate token",self.progress) - # Save the credentials for the next run - with open('token.json', 'w') as token: - token.write(creds.to_json()) - - try: - self.infoPrint("creating service",self.progress) - self.form_service = build('forms', 'v1', credentials=creds, discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) - - except HttpError as err: - print(err) - ''' End Tokenizing - ''' - - def createForm(self, name): - """ Create Form - Args: - name : name form - """ - try: - self.infoPrint("creating form",self.progress) - self.main_form = self.form_service.forms().create(body={"info":{"title":name}}).execute() - except HttpError as error: - print('An error occurred: %s' % error) - - def createOption(self, value, image=None): + def createOption(self, index, value, image=None): ''' return {"value" : "A. option 1"} return {"value": "Option", @@ -110,23 +48,13 @@ class gquiz: } }} ''' - self.infoPrint("creating option",self.progress) - opt = {"value" : "{}".format(value)} + super().createOption(index, value, image) + opt = {"value" : "{}. {}".format(chr(64+index), value)} if(image != None): - self.infoPrint("uploading option image... ",self.progress) - req = requests.post(self.image_temp_service_url,files={"file": open(image,'rb')}) - if(req.json()['status'] == 'error'): - raise Exception("upload failed : {}".format(req.json())) - time.sleep(3) - self.infoPrint("uploading option image... ok",self.progress) - u = urlparse(req.json()['data']['url']) opt.update({"image" : { - "sourceUri": u._replace(path="/dl"+u.path).geturl(), - "properties": { - "alignment": "LEFT" - } + "sourceUri": self.image_temp_service_url + image, + "properties": {"alignment": "LEFT"} }}) - time.sleep(3) return opt def createQuestion(self, title, description, options, indexAnswer, itemImage=None): @@ -142,6 +70,7 @@ class gquiz: {"value" : "D. option 4"}, {"value" : "E. option 5"},] ''' + super().createQuestion(title, description, options, indexAnswer, itemImage) item = { "title" : title, "description" : "{}".format(description), @@ -160,18 +89,10 @@ class gquiz: } } } - self.infoPrint("create question...",self.progress) if (itemImage != None): - self.infoPrint("uploading question image...",self.progress) - req = requests.post(self.image_temp_service_url,files={"file": open(itemImage,'rb')}) - if(req.json()['status'] == 'error'): - raise Exception("upload failed : {}".format(req.json())) - time.sleep(3) - self.infoPrint("uploading question image... ok",self.progress) - u = urlparse(req.json()['data']['url']) item['questionItem'].update(\ {"image": { - "sourceUri": u._replace(path="/dl"+u.path).geturl(), + "sourceUri": self.image_temp_service_url + itemImage, "properties": { "alignment": "CENTER" } @@ -180,29 +101,22 @@ class gquiz: return item def submitItem(self, index, item): - """ Submit item to submition - Args: - index : location item in form - item : object item - """ + super().submitItem() self.submition['requests'].append({ "createItem" : { "location": {"index": index}, "item": item } }) - self.infoPrint("submit question",self.progress) print(self.submition) - def update(self): - self.infoPrint("Updating Form...",self.progress) + super().update() # Adds the question to the form - question_setting = self.form_service.forms().batchUpdate(formId=self.main_form["formId"], body=self.submition).execute() print(question_setting) # Prints the result to show the question has been added - get_result = self.form_service.forms().get(formId=self.main_form["formId"]).execute() + get_result = self.service.forms().get(formId=self.main_form["formId"]).execute() self.resultUri = get_result['responderUri'] print(get_result) self.infoPrint("Updating Form... Done",self.progress) diff --git a/Scripts/python/Library/gservice.py b/Scripts/python/Library/gservice.py index f41c3eb..f864503 100644 --- a/Scripts/python/Library/gservice.py +++ b/Scripts/python/Library/gservice.py @@ -1 +1,62 @@ -# TODO jadikan satu semua code yang berhubungan dengan autentikasi dan generate service +import os.path +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build +from googleapiclient.errors import HttpError +from bedc import bedc + +class gservice(bedc): + """docstring for gservice.""" + def __init__(self): + super(gservice, self).__init__() + self.service = None + self.creds = None + + def fetchToken(self, SCOPES): + self.infoPrint("generate token",self.progress) + flow = InstalledAppFlow.from_client_secrets_file( + self.savePath+'/secret/client_secret.json', SCOPES) + self.creds = flow.run_local_server(port=0) + + def generateToken(self,serviceType, SCOPES): + ''' Start Tokenizing + here is the way to get token + link : https://developers.google.com/docs/api/quickstart/python + ''' + # The file token.json stores the user's access and refresh tokens, and is + # created automatically when the authorization flow completes for the first + # time. + if os.path.exists('token.json.{}'.format(serviceType)): + self.creds = Credentials.from_authorized_user_file('token.json.{}'.format(serviceType), SCOPES) + self.infoPrint("token already exist",self.progress) + # If there are no (valid) credentials available, let the user log in. + if not self.creds or not self.creds.valid: + if self.creds and self.creds.expired and self.creds.refresh_token: + try: + self.creds.refresh(Request()) + except: + self.fetchToken(SCOPES) + self.infoPrint("refresh token",self.progress) + else: + self.fetchToken(SCOPES) + # Save the credentials for the next run + with open('token.json.{}'.format(serviceType), 'w') as token: + token.write(self.creds.to_json()) + + def buildFormService(self, DISCOVERY_DOC): + try: + self.infoPrint("creating form service",self.progress) + self.service = build('forms', 'v1', credentials=self.creds, discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) + except HttpError as err: + self.infoPrint("Error create service : {}".format(err),self.progress) + print(err) + pass + + def buildDocsService(self): + try: + self.infoPrint("creating service",self.progress) + self.service = build('docs', 'v1', credentials=self.creds) + except HttpError as err: + print(err) + pass diff --git a/Scripts/python/Library/imageprovider.py b/Scripts/python/Library/imageprovider.py deleted file mode 100644 index 7f55ff4..0000000 --- a/Scripts/python/Library/imageprovider.py +++ /dev/null @@ -1,23 +0,0 @@ -import requests - -class ImageProvides: - def __init__(self): - self.service_url = [ \ - "https://tmpfiles.org/api/v1/upload" ] - self.service_use = 0 - self.successStatus = False - self.urlImage = "" - - def upload(self, imagePath): - try: - urlService = self.service_url[self.service_use] - req = requests.post(urlService,files={"file": open(image,'rb')}) - if(req.json()['status'] == 'error'): - self.successStatus = False - self.successStatus = True - - - def isSuccess(self): - return self.successStatus - - def getUrl(self): diff --git a/Scripts/python/Library/moodleQuiz.py b/Scripts/python/Library/moodleQuiz.py index c8152f2..d8758d9 100644 --- a/Scripts/python/Library/moodleQuiz.py +++ b/Scripts/python/Library/moodleQuiz.py @@ -2,27 +2,14 @@ from __future__ import unicode_literals import base64 import xml.etree.ElementTree as ET +from bedc import bedc -class moodleQuiz: +class moodleQuiz(bedc): def __init__(self): - self.infoPrint = self._defaultPrint + super(moodleQuiz, self).__init__() self.progress = -1 self.resultUri = "" self.data = ET.Element('quiz') - self.savePath = '.' - - def setSavePath(self, path): - self.savePath = path - - def setProgress(self, i : int): - self.progress = i - self.infoPrint("generating...", self.progress) - - def AttachProcessInfo(self, callback): - self.infoPrint = callback - - def _defaultPrint(self, text : str, progress: int): - print("{}% {}".format(progress, text)) def _subElementFile(self, parent, file): Efile = ET.SubElement(parent, "file") @@ -31,12 +18,13 @@ class moodleQuiz: Efile.set('encoding','base64') Efile.text = base64.b64encode(file.read()).decode('utf-8') - def createOption(self, value, image=None): + def createOption(self, index, value, image=None): + super().createOption(index, value, image) ans = ET.Element('answer') ans.set('fraction', '0') ans.set('format', 'html') if(image == None): - ET.SubElement(ans, 'text').text = "

{}

".format(value) + ET.SubElement(ans, 'text').text = "

{}. {}

".format(index, value) else : f = open(image,"rb") ET.SubElement(ans, 'text').text = "

" + \ @@ -48,6 +36,7 @@ class moodleQuiz: def createQuestion(self, title, description, options, indexAnswer, itemImage=None): + super().createQuestion(title, description, options, indexAnswer, itemImage) question = ET.Element('question') question.set('type','multichoice') @@ -77,13 +66,12 @@ class moodleQuiz: ET.SubElement(question, 'answernumbering').text = 'abc' return question - def submitQuestion(self, index, item): + def submitItem(self, index, item): + super().submitItem() self.data.append(ET.fromstring(ET.tostring(item))) - def copyFile(self,origin_file_id, copy_title): - print("noting to copy, it for moodle") - def update(self): + super().update() ET.indent(self.data) print(ET.tostring(self.data)) ET.ElementTree(self.data).write("{}/{}".format(self.savePath, "moodleXMLMultichoiceQuestion.xml")) diff --git a/Scripts/python/quiz_generator.py b/Scripts/python/quiz_generator.py index 87cdeab..9529690 100644 --- a/Scripts/python/quiz_generator.py +++ b/Scripts/python/quiz_generator.py @@ -46,13 +46,14 @@ def MakeTemplate(): def _statusBarInfoUpdate(text : str, progress : int): ui.ShowProgressBar("loading...", "{}% {}".format(progress,text), progress) -def _updateQuestion(q, isReverse = False): +def _updateQuestion(q, isReverse = False, needPath = False): selctedCell = doc.CurrentSelection # cwd = curpath maxRow = doc.LastRow(selctedCell)+1-doc.FirstRow(selctedCell) rnge = reversed(range(0, maxRow)) if isReverse else range(0, maxRow) for nrow in rnge: - q.setProgress(int(((nrow+1)/maxRow)*100)) + xrow = (nrow - (maxRow-1)) if isReverse else nrow + q.setProgress(int(((xrow+1)/maxRow)*100)) item = doc.getValue(doc.Offset(doc.FirstCell(selctedCell),nrow,0,1,17)) # item[0] # item[1] @@ -73,23 +74,30 @@ def _updateQuestion(q, isReverse = False): # item[16] opt, theAnswer, c = [], -1, 1 for o in range(2, 17, 3): # mengambil kolim jawaban saja - if (item[o] == 1) + if (item[o] == 1): theAnswer = c - opt.append(\ - q.createOption(\ - "{}. {}".format(chr(64+c),item[o+2]),\ - cwd+item[o+1] if (item[o+1] != "") else None)) + if (item[o+1] != ""): + optImg = cwd+item[o+1] if needPath else item[o+1] + else: + optImg = None + + opt.append(q.createOption(c, item[o+2], optImg)) c = c+1 if (theAnswer == -1): raise Exception("Chose the correct answer") - img = cwd+item[1] if ( item[1] != "") else None + if (item[1] != ""): + itmImg = cwd+item[1] if needPath else item[1] + else: + itmImg = None + qq = q.createQuestion(\ title = "Soal No {}".format(nrow+1),\ description = item[0],\ indexAnswer = theAnswer, \ - options = opt, itemImage=img) + options = opt,\ + itemImage = itmImg) q.submitItem(nrow,qq) q.update() @@ -100,8 +108,7 @@ def GoogleQuiz(): q.setSavePath(curpath) q.AttachProcessInfo(_statusBarInfoUpdate) q.setProgress(0) - q.generateService() - q.createForm("Demo Soal") #TODO : put this mundane inside generateService() + q.generateService("form generated using macro") _updateQuestion(q) ui.SetStatusbar("creating google form quiz done!") _statusBarInfoUpdate("Finish!!",100) @@ -114,8 +121,7 @@ def GoogleDocs(): q.setSavePath(curpath) q.AttachProcessInfo(_statusBarInfoUpdate) q.setProgress(0) - q.generateService() - q.createDocs("Demo Soal") #TODO : put this mundane inside generateService() + q.generateService("docs generated using macro") _updateQuestion(q, True) ui.SetStatusbar("creating google form quiz done!") _statusBarInfoUpdate("Finish!!",100) @@ -128,7 +134,7 @@ def MoodleQuiz(): q.setSavePath(curpath) q.AttachProcessInfo(_statusBarInfoUpdate) q.setProgress(0) - _updateQuestion(q) + _updateQuestion(q, needPath=True) ui.SetStatusbar("Done!") _statusBarInfoUpdate("Check *.xml file in curent folder!",100) diff --git a/Scripts/python/test_gquiz.py b/Scripts/python/test_gquiz.py deleted file mode 100644 index b66faa4..0000000 --- a/Scripts/python/test_gquiz.py +++ /dev/null @@ -1,75 +0,0 @@ -# coding: utf-8 -# run it under boring_edu_doc folder -# $ python Scripts/python/test_gquiz.py -from __future__ import unicode_literals -import os, sys, requests -if (len(sys.argv) < 2): - print("arg[1] : form, docs, moodle") - quit() - -def gquiz_form_test(): - ''' - arg[1] = form - ''' - if not 'gquiz' in sys.modules: - sys.path.insert(0, os.getcwd()+"/Scripts/python/Library/") - from gquiz import gquiz - - q = gquiz() - q.setSavePath(".") - q.setProgress(0) - q.generateService() - q.setProgress(20) - q.createForm("test quiz") - q.setProgress(50) - opt = [ q.createOption("A.","./asset/option1.png"), - q.createOption("B.","./asset/option2.png"), - q.createOption("C.","./asset/option3.png"), - q.createOption("D.","./asset/option4.png"), - q.createOption("E.","./asset/option5.png") ] - q.setProgress(80) - qq = q.createQuestion(title = "Soal No 1",\ - description = "Dari gambar dibawah ini, ada bagian gambar yang hilang. Dari pilihan dibawah, manakah gambar yang benar?",\ - indexAnswer = 4, options = opt, itemImage='./asset/test_image.png') - q.setProgress(85) - q.submitItem(0,qq) - q.setProgress(90) - q.update() - q.setProgress(100) - print("Open link : {}".format(q.resultUri)) - -def gquiz_docs_test(): - ''' - arg[1] = docs - ''' - if not 'gdoc' in sys.modules: - sys.path.insert(0, os.getcwd()+"/Scripts/python/Library/") - from gdoc import gdoc - - q = gdoc() - q.setSavePath(".") - q.setProgress(0) - q.generateService() - q.setProgress(20) - q.createDocs("test quiz") - q.setProgress(50) - opt = [ q.createOption("A.","./asset/option1.png"), - q.createOption("B.","./asset/option2.png"), - q.createOption("C.","./asset/option3.png"), - q.createOption("D.","./asset/option4.png"), - q.createOption("E.","./asset/option5.png") ] - q.setProgress(80) - qq = q.createQuestion(title = "Soal No 1",\ - description = "Dari gambar dibawah ini, ada bagian gambar yang hilang. Dari pilihan dibawah, manakah gambar yang benar?",\ - indexAnswer = 4, options = opt, itemImage='./asset/test_image.png') - q.setProgress(85) - q.submitItem(0,qq) - q.setProgress(90) - q.update() - q.setProgress(100) - print("Open link : {}".format(q.resultUri)) - -if (sys.argv[1] == 'form'): - gquiz_form_test() -elif (sys.argv[1] == 'docs'): - gquiz_docs_test() diff --git a/Scripts/python/unit_test.py b/Scripts/python/unit_test.py new file mode 100644 index 0000000..0846e8c --- /dev/null +++ b/Scripts/python/unit_test.py @@ -0,0 +1,95 @@ +# coding: utf-8 +# run it under boring_edu_doc folder +# $ python Scripts/python/test_gquiz.py +from __future__ import unicode_literals +import os, sys, requests +if (len(sys.argv) < 2): + print("arg[1] : form, docs, moodle") + quit() + +def gquiz_form_test(): + ''' + arg[1] = form + ''' + if not 'gquiz' in sys.modules: + sys.path.insert(0, os.getcwd()+"/Scripts/python/Library/") + from gquiz import gquiz + + q = gquiz() + q.setSavePath(".") + q.setProgress(0) + q.generateService("unit test form") + q.setProgress(50) + opt = [ q.createOption(1, "option1","/asset/option1.png"), + q.createOption(2, "option2","/asset/option2.png"), + q.createOption(3, "option3","/asset/option3.png"), + q.createOption(4, "option4","/asset/option4.png"), + q.createOption(5, "option5","/asset/option5.png") ] + q.setProgress(80) + qq = q.createQuestion(title = "Soal No 1",\ + description = "Dari gambar dibawah ini, ada bagian gambar yang hilang. Dari pilihan dibawah, manakah gambar yang benar?",\ + indexAnswer = 4, options = opt, itemImage='/asset/test_image.png') + q.setProgress(85) + q.submitItem(0,qq) + q.setProgress(90) + q.update() + q.setProgress(100) + print("Open link : {}".format(q.resultUri)) + +def gquiz_docs_test(): + ''' + arg[1] = docs + ''' + if not 'gdoc' in sys.modules: + sys.path.insert(0, os.getcwd()+"/Scripts/python/Library/") + from gdoc import gdoc + + q = gdoc() + q.setSavePath(".") + q.setProgress(0) + q.generateService("unit test docs") + q.setProgress(50) + opt = [ q.createOption(1, "option1","/asset/option1.png"), + q.createOption(2, "option2","/asset/option2.png"), + q.createOption(3, "option3","/asset/option3.png"), + q.createOption(4, "option4","/asset/option4.png"), + q.createOption(5, "option5","/asset/option5.png") ] + q.setProgress(80) + qq = q.createQuestion(title = "Soal No 1",\ + description = "Dari gambar dibawah ini, ada bagian gambar yang hilang. Dari pilihan dibawah, manakah gambar yang benar?",\ + indexAnswer = 4, options = opt, itemImage='/asset/test_image.png') + q.setProgress(85) + q.submitItem(0,qq) + q.setProgress(90) + q.update() + q.setProgress(100) + print("Open link : {}".format(q.resultUri)) + +def moodle_test(): + if not 'moodleQuiz' in sys.modules: + sys.path.insert(0, os.getcwd()+"/Scripts/python/Library/") + from moodleQuiz import moodleQuiz + + q = moodleQuiz() + q.setSavePath(".") + q.setProgress(0) + opt = [ q.createOption(1, "option1","./asset/option1.png"), + q.createOption(2, "option2","./asset/option2.png"), + q.createOption(3, "option3","./asset/option3.png"), + q.createOption(4, "option4","./asset/option4.png"), + q.createOption(5, "option5","./asset/option5.png") ] + qq = q.createQuestion(title = "Soal No 1",\ + description = "Dari gambar dibawah ini, ada bagian gambar yang hilang. Dari pilihan dibawah, manakah gambar yang benar?",\ + indexAnswer = 4, options = opt, itemImage='./asset/test_image.png') + q.setProgress(85) + q.submitItem(0,qq) + q.setProgress(80) + q.update() + q.setProgress(100) + +if (sys.argv[1] == 'form'): + gquiz_form_test() +elif (sys.argv[1] == 'docs'): + gquiz_docs_test() +elif (sys.argv[1] == 'moodle'): + moodle_test() diff --git a/myedu.ods b/myedu.ods index 6258b2610961d7b3ea5c440c8dccb832ae638b7f..948341cc0212977adebc0d1899c964aaa5dcdec2 100644 GIT binary patch delta 39948 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 QRfniUlt9ID!xVAepP3-uPXGV_ From 4a7bd9a7945770dce826e8629af98904ed170c1d Mon Sep 17 00:00:00 2001 From: a2nr Date: Sat, 16 Mar 2024 18:12:39 +0700 Subject: [PATCH 2/2] oopss some code gak sengaja kehapus --- Scripts/python/Library/gquiz.py | 1 + myedu.ods | Bin 46090 -> 46109 bytes 2 files changed, 1 insertion(+) diff --git a/Scripts/python/Library/gquiz.py b/Scripts/python/Library/gquiz.py index 98e4df3..1cf112b 100644 --- a/Scripts/python/Library/gquiz.py +++ b/Scripts/python/Library/gquiz.py @@ -113,6 +113,7 @@ class gquiz(gservice): def update(self): super().update() # Adds the question to the form + question_setting = self.service.forms().batchUpdate(formId=self.main_form["formId"], body=self.submition).execute() print(question_setting) # Prints the result to show the question has been added diff --git a/myedu.ods b/myedu.ods index 948341cc0212977adebc0d1899c964aaa5dcdec2..0f57a878da0ddbfb09f182a3f62f8c25805eeed6 100644 GIT binary patch delta 1578 zcmV+_2G#kB=mMSS0nxpz%KZ>S#LKIy@FcMRUWed(DWTHt}_JDrpJWl8v zF494xvdF1$Ok6W$oO^XFZi9jWkEJB0f%X{K1cE{&=mO!bQn`Pe`+m%nmy(P;uki&lkIy>(U!RI1T9|hBK;mL^mW#fD0kvykauIQ{{n*>j9MWWgY`bPoEdkxae^EMV?MLD48~KRELIYxm3Eoz&F?+Jg$! z>6>*nMKwbiNolLJ?yhd%-P{4s%US?WPfuQK>II}Ey^w#WJ}K1J*DEQ#HIKgH*{U{h zy#N!RZa(}KT;E=`byUK8hQ5!O4EZA!Uwv3)^(*|6u#^{%=RJ{C!Qb--nmJQ#Y&x^i z_9}8+uq4u@T_xHH$sN~ZDW`IhXTo({FBBBqIy%jZ9cI~v z2)NQM9#F3FIxbtu3lUPNG;L*Iz5zj{LVHw<9#J+)Se&KM@wBl&Zr z*)E)&WfmP|q)qRk_WQC-WSDVVpC8z)UG}LPB$f?CS(%tp=a@v;BbXB$czX$#Aj%=?c z%m1(kQ~{p64;&Fwdy}}jd3%5JVR%Qbo&(Yt9(lgA=p34@r97)^D!WG_jcT!9^__nf zymxGC4*k>W&_5kJ^q1Z1KpRMSNQ{#8PHG~8U*_*X1z;Vk9@mMD)6!xhhYdbcP~-cHL||X{E`WgDeCLO;^2a8({w*1aM_A**e(Jtk*){PCU;;*U)wFtaJT! zC;tMooD^T04mOc+Sa%P6i!%iP0C^FU39mQ;_Y z2CygrE|V{?M*?OXlW!axla#P10i2V)utx#ZlfAGPlN_-w0ty|IOtDJ>M;((;9VL^# zu_^&%lQFUslYlM@lL)dX0i2UDvPl8flY6o^0uVTpw6Zt>Ka=gUI02TECbKmGK$Bdv cIRd9jldwt}ld-cZ0c(@ovnU2KtpET30Ml*uwEzGB delta 1564 zcmV+%2IKji=mLu90;d4jw4GMY0vUrLLwL1A_v=Tf;L9i-RA!raF zmgZb2RAdZrG)S1Df+T-(G_nT8Qd$m*B^6IBq}7n>eKZOaA|;9+3-*sweRZcJ1W!a) z5RGL_1%V@Jva;XxGairY|7RkWXo~80{V1B|2~l(&fhDGp%Nl}5$YhhS>;e7Gd7RJ> zT%^5DWsy_in7k&)1o!G(+y(^(kEJB0fsPp12?T{m&pd3;} zU3&}jCy@_e$3I{+d5w|#JQ#$Q&fYjRlF4hp0_IK>6b<6Gy_VNsyI;2MsIDf^9#p8F zzFB8eR1=hul(tIi_WbJ8}VU*VsGrJOyT?ue{P{*FJ;%o%HEF3{g>aIZ#)&2dVWY^u54oqZMx!1arHrh3UpMYJ4f*Ix~ zR*KRJ`z({sRKN?&W`0Q9de`3Bv~5k*?^ATE^v>7?=>!_g0H~D@HlTT?Xl#&_AvY{o|oSf7!kEw1I?)(sq$VTyXMTGs0P9?}T~BP7mKGB^Y*5PSrrkOy zT1D+#aVrX}wej`_okfu}H`+>?NOAMNYF}r|s1+ozHx_r)a`Z_}9#OFNQl{@nGx zCKBCKnjsQJG^)qLy*jYN29C~vaP&d{c{J;uwHLVj4Be@9bnYy0`^wiu(yJ|V4of4z zG+yq^wgK*5(&5-{X6xY3nowW@=^KLQdFTQvA5S`0P93Yb!uqXl>9Fs~M9+Ne( z8k2w=1e1TT3IS7-im*iiiIdQ