From 5cd92422a1042254eaaed5bd62dcb5e36fdeb508 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Sun, 24 May 2020 19:45:17 +0200 Subject: [PATCH 01/37] Add missing quotes --- installer.nsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer.nsi b/installer.nsi index 303cc1b..8080e51 100644 --- a/installer.nsi +++ b/installer.nsi @@ -5,7 +5,7 @@ ;Atributes Name "SerialExaminer" OutFile "SerialExaminerSetup.exe" -InstallDir $PROGRAMFILES\SerialExaminer +InstallDir "$PROGRAMFILES\SerialExaminer" RequestExecutionLevel admin ;Unicode True From 8070075dfccc31b09aff4e5cb02af29103c275f0 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 13:10:11 +0200 Subject: [PATCH 02/37] Enable export button --- SerialExaminer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 742937a..e5f351f 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -194,12 +194,14 @@ def examinate(self): resultName = os.path.basename(testFile).split('.')[0] RESULT_DICT[resultName] = [str(points) + '/' + str(questionCount), str(round(points*100/questionCount, 2)) + '%'] # NOTE: Result format: {: ['/%']} - # self.outputButtonExport['state'] = NORMAL # NOTE: export feature + self.outputButtonExport['state'] = NORMAL self.outputButtonDsiplay['state'] = NORMAL def resultDisplay(self): self.masterResultDisplayWindow = Toplevel(self.master) self.appResultDisplayWindow = ResultDisplayWindow(self.masterResultDisplayWindow, self) def resultExport(self): + # NOTE: RESULT_DICT format: {: ['/%']} + pass class KeyCreatorWindow(object): From e8d5aeed16f6bc0e9e61e3a27b2087d14cd8aa5c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 17:01:10 +0200 Subject: [PATCH 03/37] Remove comment on top --- SerialExaminer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 742937a..b7b6e49 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -2,7 +2,6 @@ # SerialExaminer.py # by Pixel # Repository: https://github.com/Pixel48/SerialExaminer.git -# Documentation: https://github.com/Pixel48/SerialExaminer (WIP) from tkinter import * from tkinter import filedialog from functools import partial From e6b80f9227e83788e4fba336ea314b4ed20c7d3f Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 18:08:51 +0200 Subject: [PATCH 04/37] Add basic filedialog --- SerialExaminer.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index e5f351f..c99f921 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -201,8 +201,15 @@ def resultDisplay(self): self.appResultDisplayWindow = ResultDisplayWindow(self.masterResultDisplayWindow, self) def resultExport(self): # NOTE: RESULT_DICT format: {: ['/%']} - - pass + global RESULT_DICT + EXPOT_FILE = os.path.normpath(filedialog.askopenfilename( + title = "Save test result", + initialdir = '.', + filetypes =( + ("CSV file", "*.csv"), + ) + )) + class KeyCreatorWindow(object): """Creator for CreateKey Window""" From d4c45d6ca2511d16c9da47379fac41bd5efe596d Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 19:01:58 +0200 Subject: [PATCH 05/37] Add basic code for export in csv --- SerialExaminer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index c99f921..44c9a28 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -202,14 +202,20 @@ def resultDisplay(self): def resultExport(self): # NOTE: RESULT_DICT format: {: ['/%']} global RESULT_DICT - EXPOT_FILE = os.path.normpath(filedialog.askopenfilename( + EXPOT_FILE = os.path.normpath(filedialog.asksaveasfilename( title = "Save test result", initialdir = '.', + defaultextension = '.csv', filetypes =( ("CSV file", "*.csv"), ) )) - + if EXPOT_FILE[-4:] == '.csv': + with open(EXPOT_FILE, 'w') as export: + export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + for key in RESULT_DICT: + export.write(key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1]+'\n') + export.close() class KeyCreatorWindow(object): """Creator for CreateKey Window""" From 5e89707974482472f6c46f13924d4800ca5a1498 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 19:17:24 +0200 Subject: [PATCH 06/37] Remove unnecessary path formatting --- SerialExaminer.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 4b89609..01736cf 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -141,13 +141,13 @@ def importKey(self): global KEY_FILE self.keyButtonImport['state'] = DISABLED self.keyButtonCreate['state'] = DISABLED - KEY_FILE = os.path.normpath(filedialog.askopenfilename( + KEY_FILE = filedialog.askopenfilename( title = "Select exam key file", initialdir = './keys', filetypes =(("Exam key file", "*.exkey"), ("Plain text", "*.txt"), ) - )) + ) self.keyButtonImport['state'] = NORMAL self.keyButtonCreate['state'] = NORMAL if '.exkey' in KEY_FILE or '.txt' in KEY_FILE: @@ -164,10 +164,10 @@ def importKey(self): self.inputButton['state'] = NORMAL def browseExams(self): global INPUT_FILES - testDir = os.path.normpath(filedialog.askdirectory( + testDir = filedialog.askdirectory( title = "Examination txt files location", initialdir = '.', - )) + ) testFiles = os.listdir(testDir) buffer = [] for file in testFiles: @@ -201,14 +201,14 @@ def resultDisplay(self): def resultExport(self): # NOTE: RESULT_DICT format: {: ['/%']} global RESULT_DICT - EXPOT_FILE = os.path.normpath(filedialog.asksaveasfilename( + EXPOT_FILE = filedialog.asksaveasfilename( title = "Save test result", initialdir = '.', defaultextension = '.csv', filetypes =( ("CSV file", "*.csv"), ) - )) + ) if EXPOT_FILE[-4:] == '.csv': with open(EXPOT_FILE, 'w') as export: export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') @@ -398,11 +398,11 @@ def exportKeyFile(self, file): def die(self): global KEY_FILE - KEY_FILE = os.path.normpath(filedialog.asksaveasfilename( + KEY_FILE = filedialog.asksaveasfilename( title = "Select exam key file", initialdir = './keys', filetypes =(("Exam Key File", "*.exkey"),) - )) + ) if '.exkey' not in KEY_FILE: KEY_FILE += '.exkey' if KEY_FILE != '..exkey': # if no filename provided, don't proceed From 68a78702465b9e709daf24e1efa5f0291c02cb4c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 19:23:09 +0200 Subject: [PATCH 07/37] Change displayed version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 01736cf..8ce6419 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -8,7 +8,7 @@ import tkinter.font as tkFont import os, pickle -versionTag = 'v0.3.0' +versionTag = '0.4.0-alpha' # SOME GLOBALS R = 0 From d5e944f0b29403bde7a5da619ece319fd8d4c6ea Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 22:59:39 +0200 Subject: [PATCH 08/37] Fix exported csv file template --- SerialExaminer.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 8ce6419..9aa9ea4 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -211,9 +211,11 @@ def resultExport(self): ) if EXPOT_FILE[-4:] == '.csv': with open(EXPOT_FILE, 'w') as export: - export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + export.write(';FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + i = 1 for key in RESULT_DICT: - export.write(key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1]+'\n') + export.write(str(i)+';'+key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1]+'\n') + i += 1 export.close() class KeyCreatorWindow(object): From df4c3b942c2dc529de78d502e96510af46c07cf1 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 23:00:39 +0200 Subject: [PATCH 09/37] Change look of readme --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 53b3aa3..004679c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # SerialExaminer - SerialExaminer is a small tool to speed up assessing tests and detecting potential fraudsters. It's easy to use, fast to use and will be long developed and improved + SerialExaminer is a small tool to speed up assessing tests and detecting potential fraudsters. It's easy to use and gives - Ask your students to send you test responses in .txt files named after their full names, journal number, any ID numbers or anything else, that can identify them. Aks them to write answers in these files in format `.`, line by line. The order of questions and letter size don't matter + Ask your students to send you test responses in .txt files named after their full names, journal number, any ID numbers or anything else, that can identify them. Ask them to write answers in these files in format `.`, line by line. The order of questions and letter size don't matter #### Table of Contents - [Installation](https://github.com/Pixel48/SerialExaminer#installation) @@ -15,7 +15,9 @@ ## Installation Download the latest [SerialExaminer installer](https://github.com/Pixel48/SerialExaminer/releases/latest) - > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - I'm just a student developing a small project and I can't afford digital certification + + `SerialExaminerSetup.exe` is 32-bit. For 64-bit systems, download `SerialExaminerSetup-x64.exe` + > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - For now I can't afford digital certification ## Usage How to use SerialExaminer interface @@ -23,7 +25,7 @@ ![Main window dummy](./docs/img/main_window.png) ### Generating an exam key - 1. Provide the exact number of questions and answers in the exam and hit `Create key!` button + 1. Provide the exact number of questions and answers in the exam and Press `Create key!` button ![Key parameters](./docs/img/key_parameters.png) @@ -32,23 +34,24 @@ ![Key data](./docs/img/key_ans.png) > Now the key creator supports the number of answers in range from 4 to 12, future updates will gradually expand this range until they finally remove this restriction - 3. After key answer window vanish, hit `Done` button and provide where to save exam key for potential future use. (You dont need to import key after creating it, it's imported immediately after save). + 3. After key answer window vanish, press `Done` button and provide where to save exam key for potential future use. (You dont need to import key after creating it, it's imported immediately after save). ### Checking tests 1. Create or import correct exam key - 2. Hit `Browse` button and provide folder with files written by your students - 3. Hit `Check!` button to calculate results - 4. Hit `Display` button to show test results + 2. Press `Browse` button and provide folder with files written by your students + 3. Press `Check` button to calculate results + 4. Press `Display` button to show test results + 5. Press `Export` button, if you want to generate report file with result table in selected format ![Result window](./docs/img/results.png) > Future updates will add export options and `predicted grade` column in results ### Searching for cheaters - 1. Hit `Import` button + 1. Press `Import` button 2. In new dialog change file extension to ***Plain text (\*.txt)*** 3. Select the source file to which you want to check the similarity in other tests - 4. Hit `Browse` button and provide folder with other tests - 5. Hit `Check!` button to calculate results - 6. Hit `Display` button to show similarity of other tests to source test + 4. Press `Browse` button and provide folder with other tests + 5. Press `Check` button to calculate results + 6. Press `Display` button to show similarity of other tests to source test ###### Copyright (c) 2020 [Pixel48](https://github.com/Pixel48/) All Rights Reserved From bdf7afc018dffa969ba8e0d16733cd45d56bf1fd Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 23:17:32 +0200 Subject: [PATCH 10/37] Correct version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 9aa9ea4..4113776 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -8,7 +8,7 @@ import tkinter.font as tkFont import os, pickle -versionTag = '0.4.0-alpha' +versionTag = '0.4-alpha.0' # SOME GLOBALS R = 0 From b5c3683e96ce03c0216fd49590c688f2a73f4732 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Tue, 26 May 2020 17:05:23 +0200 Subject: [PATCH 11/37] Fix csv formating --- SerialExaminer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 44c9a28..74849e0 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -211,10 +211,10 @@ def resultExport(self): ) )) if EXPOT_FILE[-4:] == '.csv': - with open(EXPOT_FILE, 'w') as export: + with open(EXPOT_FILE, 'w+') as export: export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') for key in RESULT_DICT: - export.write(key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1]+'\n') + export.write(key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') export.close() class KeyCreatorWindow(object): From 8268ae2a0f28b5f017d8b12e569fb2065d7eea87 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 17:01:10 +0200 Subject: [PATCH 12/37] Remove comment on top --- SerialExaminer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 74849e0..f6555a7 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -2,7 +2,6 @@ # SerialExaminer.py # by Pixel # Repository: https://github.com/Pixel48/SerialExaminer.git -# Documentation: https://github.com/Pixel48/SerialExaminer (WIP) from tkinter import * from tkinter import filedialog from functools import partial From 3493ac9f9667c1d04bfd7369000d92bbbef78341 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 19:17:24 +0200 Subject: [PATCH 13/37] Remove unnecessary path formatting --- SerialExaminer.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index f6555a7..8d09571 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -141,13 +141,13 @@ def importKey(self): global KEY_FILE self.keyButtonImport['state'] = DISABLED self.keyButtonCreate['state'] = DISABLED - KEY_FILE = os.path.normpath(filedialog.askopenfilename( + KEY_FILE = filedialog.askopenfilename( title = "Select exam key file", initialdir = './keys', filetypes =(("Exam key file", "*.exkey"), ("Plain text", "*.txt"), ) - )) + ) self.keyButtonImport['state'] = NORMAL self.keyButtonCreate['state'] = NORMAL if '.exkey' in KEY_FILE or '.txt' in KEY_FILE: @@ -164,10 +164,10 @@ def importKey(self): self.inputButton['state'] = NORMAL def browseExams(self): global INPUT_FILES - testDir = os.path.normpath(filedialog.askdirectory( + testDir = filedialog.askdirectory( title = "Examination txt files location", initialdir = '.', - )) + ) testFiles = os.listdir(testDir) buffer = [] for file in testFiles: @@ -201,14 +201,14 @@ def resultDisplay(self): def resultExport(self): # NOTE: RESULT_DICT format: {: ['/%']} global RESULT_DICT - EXPOT_FILE = os.path.normpath(filedialog.asksaveasfilename( + EXPOT_FILE = filedialog.asksaveasfilename( title = "Save test result", initialdir = '.', defaultextension = '.csv', filetypes =( ("CSV file", "*.csv"), ) - )) + ) if EXPOT_FILE[-4:] == '.csv': with open(EXPOT_FILE, 'w+') as export: export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') @@ -398,11 +398,11 @@ def exportKeyFile(self, file): def die(self): global KEY_FILE - KEY_FILE = os.path.normpath(filedialog.asksaveasfilename( + KEY_FILE = filedialog.asksaveasfilename( title = "Select exam key file", initialdir = './keys', filetypes =(("Exam Key File", "*.exkey"),) - )) + ) if '.exkey' not in KEY_FILE: KEY_FILE += '.exkey' if KEY_FILE != '..exkey': # if no filename provided, don't proceed From 4387b718c411e6717cab2f86c35b193f97f3a5de Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 19:23:09 +0200 Subject: [PATCH 14/37] Change displayed version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 8d09571..b049bd3 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -8,7 +8,7 @@ import tkinter.font as tkFont import os, pickle -versionTag = 'v0.3.0' +versionTag = '0.4.0-alpha' # SOME GLOBALS R = 0 From 44d3de934459bf6d7c7041f56a3bcedf4f0b62ad Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 22:59:39 +0200 Subject: [PATCH 15/37] Fix exported csv file template --- SerialExaminer.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index b049bd3..19f0ee1 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -210,10 +210,12 @@ def resultExport(self): ) ) if EXPOT_FILE[-4:] == '.csv': - with open(EXPOT_FILE, 'w+') as export: - export.write('FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + with open(EXPOT_FILE, 'w') as export: + export.write(';FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + i = 1 for key in RESULT_DICT: - export.write(key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') + export.write(str(i)+';'+key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') + i += 1 export.close() class KeyCreatorWindow(object): From fb266ec25748ad0054e2a221719430dcfe9b0f34 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 23:17:32 +0200 Subject: [PATCH 16/37] Correct version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 19f0ee1..860d2cd 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -8,7 +8,7 @@ import tkinter.font as tkFont import os, pickle -versionTag = '0.4.0-alpha' +versionTag = '0.4-alpha.0' # SOME GLOBALS R = 0 From fc13440aed0a00976821ead78316628cb8810415 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 23:00:39 +0200 Subject: [PATCH 17/37] Change look of readme --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 53b3aa3..004679c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # SerialExaminer - SerialExaminer is a small tool to speed up assessing tests and detecting potential fraudsters. It's easy to use, fast to use and will be long developed and improved + SerialExaminer is a small tool to speed up assessing tests and detecting potential fraudsters. It's easy to use and gives - Ask your students to send you test responses in .txt files named after their full names, journal number, any ID numbers or anything else, that can identify them. Aks them to write answers in these files in format `.`, line by line. The order of questions and letter size don't matter + Ask your students to send you test responses in .txt files named after their full names, journal number, any ID numbers or anything else, that can identify them. Ask them to write answers in these files in format `.`, line by line. The order of questions and letter size don't matter #### Table of Contents - [Installation](https://github.com/Pixel48/SerialExaminer#installation) @@ -15,7 +15,9 @@ ## Installation Download the latest [SerialExaminer installer](https://github.com/Pixel48/SerialExaminer/releases/latest) - > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - I'm just a student developing a small project and I can't afford digital certification + + `SerialExaminerSetup.exe` is 32-bit. For 64-bit systems, download `SerialExaminerSetup-x64.exe` + > For now, downloading the installer will launch [UAC](https://en.wikipedia.org/wiki/User_Account_Control) *Unknown publisher* alert because it is not digitally signed - For now I can't afford digital certification ## Usage How to use SerialExaminer interface @@ -23,7 +25,7 @@ ![Main window dummy](./docs/img/main_window.png) ### Generating an exam key - 1. Provide the exact number of questions and answers in the exam and hit `Create key!` button + 1. Provide the exact number of questions and answers in the exam and Press `Create key!` button ![Key parameters](./docs/img/key_parameters.png) @@ -32,23 +34,24 @@ ![Key data](./docs/img/key_ans.png) > Now the key creator supports the number of answers in range from 4 to 12, future updates will gradually expand this range until they finally remove this restriction - 3. After key answer window vanish, hit `Done` button and provide where to save exam key for potential future use. (You dont need to import key after creating it, it's imported immediately after save). + 3. After key answer window vanish, press `Done` button and provide where to save exam key for potential future use. (You dont need to import key after creating it, it's imported immediately after save). ### Checking tests 1. Create or import correct exam key - 2. Hit `Browse` button and provide folder with files written by your students - 3. Hit `Check!` button to calculate results - 4. Hit `Display` button to show test results + 2. Press `Browse` button and provide folder with files written by your students + 3. Press `Check` button to calculate results + 4. Press `Display` button to show test results + 5. Press `Export` button, if you want to generate report file with result table in selected format ![Result window](./docs/img/results.png) > Future updates will add export options and `predicted grade` column in results ### Searching for cheaters - 1. Hit `Import` button + 1. Press `Import` button 2. In new dialog change file extension to ***Plain text (\*.txt)*** 3. Select the source file to which you want to check the similarity in other tests - 4. Hit `Browse` button and provide folder with other tests - 5. Hit `Check!` button to calculate results - 6. Hit `Display` button to show similarity of other tests to source test + 4. Press `Browse` button and provide folder with other tests + 5. Press `Check` button to calculate results + 6. Press `Display` button to show similarity of other tests to source test ###### Copyright (c) 2020 [Pixel48](https://github.com/Pixel48/) All Rights Reserved From cbe7468bdb972b1d9026603532fe58046a194791 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Mon, 25 May 2020 23:43:20 +0200 Subject: [PATCH 18/37] Add txt export option --- SerialExaminer.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 860d2cd..ad513b5 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -205,8 +205,8 @@ def resultExport(self): title = "Save test result", initialdir = '.', defaultextension = '.csv', - filetypes =( - ("CSV file", "*.csv"), + filetypes =(("CSV file", "*.csv"), + ("Plain text", "*.txt"), ) ) if EXPOT_FILE[-4:] == '.csv': @@ -217,6 +217,16 @@ def resultExport(self): export.write(str(i)+';'+key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') i += 1 export.close() + elif EXPOT_FILE[-4:] == '.txt': + with open(EXPOT_FILE, 'w') as export: + i = 1 + x = ' ' + for key in RESULT_DICT: + export.write(str(i)+'.'+x+key+'\t --- '+RESULT_DICT[key][0]+'\t --- '+RESULT_DICT[key][1]+'\n') + i += 1 + if i > 9: + x = ' ' + export.close() class KeyCreatorWindow(object): """Creator for CreateKey Window""" From 72a24a55dabe62072c486b4f994183471cb664c5 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Tue, 26 May 2020 14:57:39 +0200 Subject: [PATCH 19/37] Fix whitespaces in txt file --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index ad513b5..d9f5f47 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -222,7 +222,7 @@ def resultExport(self): i = 1 x = ' ' for key in RESULT_DICT: - export.write(str(i)+'.'+x+key+'\t --- '+RESULT_DICT[key][0]+'\t --- '+RESULT_DICT[key][1]+'\n') + export.write(str(i)+'.'+x+key+' --- '+RESULT_DICT[key][0]+' --- '+RESULT_DICT[key][1]+'\n') i += 1 if i > 9: x = ' ' From 303c1d646a5316a4e141c035b85b03cf04c424d6 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Tue, 26 May 2020 17:13:38 +0200 Subject: [PATCH 20/37] Change variable name --- SerialExaminer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index d9f5f47..bbaf089 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -220,12 +220,12 @@ def resultExport(self): elif EXPOT_FILE[-4:] == '.txt': with open(EXPOT_FILE, 'w') as export: i = 1 - x = ' ' + space = ' ' for key in RESULT_DICT: - export.write(str(i)+'.'+x+key+' --- '+RESULT_DICT[key][0]+' --- '+RESULT_DICT[key][1]+'\n') + export.write(str(i)+'.'+space+key+' --- '+RESULT_DICT[key][0]+' --- '+RESULT_DICT[key][1]+'\n') i += 1 if i > 9: - x = ' ' + space = ' ' export.close() class KeyCreatorWindow(object): From a8763c27bbd8c7c3291202450b7d19b112b71e63 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Tue, 26 May 2020 17:15:52 +0200 Subject: [PATCH 21/37] Add .gitignore exceptions Now SerialExaminer generates files --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 80fec52..5b6947f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# SerialExaminer +keys/ +test/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -39,7 +43,6 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ -test/ *.bat *.cmd .tox/ From f652d1c4889957e3e5bc110b41e980d8172db0d9 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Tue, 26 May 2020 17:44:42 +0200 Subject: [PATCH 22/37] Change version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index bbaf089..3ec0413 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -8,7 +8,7 @@ import tkinter.font as tkFont import os, pickle -versionTag = '0.4-alpha.0' +versionTag = '0.4-beta.0' # SOME GLOBALS R = 0 From 13a26023eb36402c2dde030f903ce2b05e5c8a26 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 13:51:09 +0200 Subject: [PATCH 23/37] Upgrade griding functions --- SerialExaminer.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 3ec0413..3c0d2db 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -21,16 +21,18 @@ questionCount = 0 answersCount = 0 -def newRow(arg = 1): +def newRow(col = 0, row = 1): global C, R - R += arg + R += row C = 0 -def newCol(arg = 1): + C += col +def newCol(col = 1): global C - C += arg -def zeroCol(): + C += col +def zeroCol(col = 0): global C, R C = R = 0 + C = col def splitLine(line): if line.split('.')[0].isdigit(): line = line.split('.') From edae706d60f0c05e4f47f24fcd2901e036c1b05b Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 14:19:03 +0200 Subject: [PATCH 24/37] Prevent escaping resuts window from screen Now over 40 records table will extend --- SerialExaminer.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 3c0d2db..fa1196a 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -564,8 +564,11 @@ def __init__(self, master, above): self.frame.grid() def build(self, frame): global RESULT_DICT + x = 0 zeroCol() # legend # + + newCol() Label(frame, text = "Name", fg = 'blue', @@ -580,16 +583,42 @@ def build(self, frame): text = "Result", fg = 'red').grid(row = R, column = C) # results # + limit = 40 for filename in RESULT_DICT: - newRow() + newRow(x//limit*4) + x += 1 + xx = str(x)+'.' + if x > limit: + xx = '\t' + xx + Label(frame, + text = xx).grid(row = R, column = C) + newCol() Label(frame, - text = filename).grid(row = R, column = C) + text = filename).grid(row = R, column = C, sticky = 'w') newCol() Label(frame, text = RESULT_DICT[filename][0]).grid(row = R, column = C) newCol() Label(frame, text = RESULT_DICT[filename][1]).grid(row = R, column = C) + if x % limit == 0: + zeroCol((x//limit)*4) + # legend # + + newCol() + Label(frame, + text = "Name", + fg = 'blue', + width = 15).grid(row = R, column = C) + newCol() + Label(frame, + text = "Points", + fg = 'blue', + width = 10).grid(row = R, column = C) + newCol() + Label(frame, + text = "Result", + fg = 'red').grid(row = R, column = C) def main(): root = Tk() From 39e5760286d67d6f54af56e60c52108318c3df1c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 14:40:03 +0200 Subject: [PATCH 25/37] Add results display limits Until it's not scrollable it will support up to 240 records --- SerialExaminer.py | 6 ++++-- docs/img/results.png | Bin 3587 -> 3847 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index fa1196a..13d7884 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -584,7 +584,9 @@ def build(self, frame): fg = 'red').grid(row = R, column = C) # results # limit = 40 - for filename in RESULT_DICT: + endLimit = 240 + x = 0 + for filename in list(RESULT_DICT.keys())[:endLimit]: newRow(x//limit*4) x += 1 xx = str(x)+'.' @@ -601,7 +603,7 @@ def build(self, frame): newCol() Label(frame, text = RESULT_DICT[filename][1]).grid(row = R, column = C) - if x % limit == 0: + if x % limit == 0 and x < endLimit: zeroCol((x//limit)*4) # legend # diff --git a/docs/img/results.png b/docs/img/results.png index b1358ead92761ec1f2eec97e1cfb8d064ded0886..4333faf7e3685cf72e9a5e352b8ab2a25228a22a 100644 GIT binary patch literal 3847 zcma)zD0Io5Na%06B!wM4BD(?A0+EgWE*0pWWN(-&#r8ZW!$z=5_13cFzj0n`&D7LJ>fzJ^dk005K0N%uH)+_Q(6JB9%OJnw%8 zQ-5$Z{8$uN7#rSt;JQ)(t$|sH_D9R^3sN)&aKgfyf_>)h?$Yx5s=F-wPuX!QCWcYb z2$+sK=Y83)T&v6~#v!sgC59nd*Ny4SK#?-i#rep^(N8yrA{Xx!;;K4q>={yf^F=pr zSGg9)-7d7YA3AG*3;^hy3z};8UY+jppN?MB4?`k@R;N0AS7*9|&t7@peij^a=d6Ad zoVNa+_k*pSK@7VJ3KXkH}PFMNg6Iv%RK3XFJ`Pr zQOazP-YU2aqpg;X8SG~*^mPd?mdRpnq0JfwodiSDEyK15tpoPmM^M4!GRO(2!Lm`)voBU%;3 zO_j0Y*=~w>)>l>Kd%Fn&pAB49Z55JYpGXn2OUc$bc#$AN)O>f>!%HMqwbL9=eL}@T zDt&L4ec4+cNiEZ7YcmBQ_An-Dm53jkOPD$bJaxv>^@Ra#qKZ=0y$5YdJF=Q^iu0LM zOtY~WS{w^{Jfyij@x>{q%^BkgD`>l@;tItN4a|#viW_}$0?P|R?7OgeS#2>-XD9uI zv;}IU+aIh*Y#^c`{<9mj?&uAC_~q`2wv`Jp-}AHK@_-F_&A#iO#M8(O-3(Fs`|(K zhPfs$;YMM#!+DaIGbXczx8s^UdHJzRPmznZv(JruI-imVD(0@;EVYBLPo$FFo>TmN zGP>Ykt!g#-%J=T#BAEJ*ja^6nik;QYw9NAo&P!e`{Ewxa&v-c$yC2MATReeTX$&+U z|MPEPy{yTl(mE~6nUHXr9PQ1LXx-l4o2Ba1f-cl6QJR}umty)zs&^tPwc$>WJF(di zA}{MPa^X|!1phHod}>@+DRCuuFm>8e%5zv@GEq|3yv+@`!#J@ZJ1jCQ~(lO*Eb({{M=20lrPkrWc|b&Yib< z-16u19zR5c#GX}L{<#g(FnF!zm|HV${^`p#%LvKp)V9c$5*uq{e8XT&(16SWoGmh< zJhsCXr`<#YHLaFU=DbQRT2pbsvt|Af1SG`;G2*c@pyR>a}ZSu zQGw|{W&-NXz9gb9yWxJJh+TzNhdk#4-n)q9orFo$Erz2JyK3Dm9a>ZxEH|6i;Bxur z-q;bFn5tf4+tU1PbJC6$y5Dya6XlUJnEvT;g!Z|Ws%dFCGf3SgEGxjRs!Ah5KExzH2r7`kGdF&rSb(3Ij zPs{0)Y}{_v;v?KDlBJP%zxQ14L=t^FG>~!abPl_tr7#8pj-E@iHr6MzxUlnjm0liu z6pi`lz%vWG8NZL-JvCW4j=UBDstZ2&d2Qddw+%PL==}@jZSS^&EU4|{;eW%~S~|A5 z@Qs&$Gruq?DwAh8=)Dj~s7OcngRey8nk(Wn(PT%!OBfQqXJ2F#Sm&mhE_m_+TKQ%3 zt%=RLmK>GP1V~Vb#sh~)Kdl{S1M%l!FQA0`Nw+`##&w|(Q> zoZWU~3p#~X!t6%{b6ormSzSY;q0URTh=jWFD=`>+@@_?(?=X1z^?{^l{Ql*Kg2(wE zyx!`m0|edCu-!`?fNH7#0PY_I${|OL(--;WQWXnPFCCRNW4Pdjrq!~1ipUDx*XCwkgCn0m-ru`D z@qW?i#!x_>d~tfFpXUsGXI<~Q z$FIOYE--@NIZYU{z|RnittZ8=_gse5!vJJ%E9tI){dRlM_*@tF0wu1lW3L&FM8G45ZC!1E{oSe z&uuFOTM}74(1fOFpu!rD@8P=~X@!Z&VSR-xyVvs*R%-y+^cb&IQZj>|-foh8A4RMDY58v_W zqvpBT%e5cry6U!gw6#?>`P7!9+-dAU#?0;qwY&(D$XF0&l4pV%Q(p@ldgy5fn#xFM z+SlQ!@H!$b>9M|SfZo-&9C@(E3WL&-XseB8dWt4?WCbgomPOk*!0Du`5>FR+61V8! zw6a_+O3QgETjSXi2+yi)MXOE8>V`Ik)@K>urjAIiw&Q3N$IOCX3an%S{5)q|8V(4z zm>d7N$o$9)O_xV5vc{KD=yVB?I-s90*Pj7|1JWfyaC)*lpr0GXb@kL$Jm41K--H8j zuDckZ6Lh@Q1!)jDB;=*X`gOG(@Abp8Jyog|{ZRs}3{U-}i`}-d$+I*I#e8tw9nUvz zs|m2!-(Y6xNuSO@h7Y4VDF*JB)|+iYuhet}Z;8DavP)8jyS!!k;Z;UsHh8{_+?Z!W z#@Gbkw9pUp%ky8s%g{o1{`4IlYhU}`$~>sP_#_9G*k_!B$xt^uO->q6)vZZctky(Y z;mOWQX;C6^#pJKIj#(6wpAH!ul3zN*=6H`{s@V0-y4eHS!6)W!ZzW~z-K>F7e;ecZ ztK4@%=@ySb{jXYTq?@&~PqnHlZz`J`Upv?&{o9mw<$`WP=3GYvRXcmMNtOEpLh8$b zymwiqUyg-|BLtMLCi5>KqeQVLxY1b;k z(}1;V+59UvSx=N19u7&|*y&pJ{U$80NVdxFI}^H)vF42$Xyqckx07bOm28!d_L9x& z+bPdTQvU{ri}L`bo^{Uc(3~#77nTdJ>{?-eKLiUSus>1rkWZcqDT#qp#yxncBqxI| zz4)ttT^)ogTo8hy+t#B-SdB&PI*)L%U^cDO+8>5n7)vAZ8`8!6HP0nKeXo`2GD$V_ z9njvJtzYoZavY!Y?=6uJ@vm9qQDL#PJOqLRdlRqOt%59AHk}q%L;P(s#+4P z3t%=y(@q)iW%fq!oF(%@t0R~5{~`7di4H+Hs#6`rxElKHH6Rz)mSI3{wfUMQAGTdv zBXAkjX~5sjR~4_+{9x~5+W0|bk?_E3BDsGm!_!Urp0t1IIGk7 z^FZ(ig{8TL96?>!XwzEZDYmDGyN9y6>f2#KTvZ@4?6>1h=T!1?2&FU%I^N%7Ue-fJ zgsbo&)<({8%LYuWp!k+PXYt0_QPy;2lWnfp!*Znlq=?mQNcYTsruuDuBvNC2mz6ua z6%@%VbxGcSAC`5 zN|)Mf9Oc+D%z&1@#a~5GzmF%!O{*aB>^gfh9lMOv2ZCim+tRpXqXCZO`k4KpSSeXh z%yRh&!4 zj!Dn!Hi*R&b+C=?@jtHOjY_6C3V5x!*xE$84_AX)m~=G%4SPNm*W2?UTNG&6Tp#z= zm~(J$>kM+TbBmxy*;$#S5DN8tFb*#wW@1U5jH81bUhtlD2oecK5C$1c_q^g+%Y^{H Qzq$Ym6Kmsoh1c*R6UNM`UnjBJ@?8-ofXh9ui#nPg9q zWsGEhWKAQ+8fs>;Z?ErpukVk(_n+^NbD!Ti*L|Psy6@|Ee)o0aZEei?k4qj0008`! z7N+)xe&*1Ec!7s&@JdYGq2mg)H@^y~=sml581Q%*TN?uamB}Y|Zy!C3`LGsFfdGI& z+y59B-M{$GVI{Jqsqys?*OhGR#Pf(#kA3B~%}sZY)Z7(vsox0vUgO9gdWj%2QlMnv zcZPa``X%PAu)4-7&?RmP{!`#+bg6zqTqGKF_Fog2R$Uf;ni*eK{Cv5rczNT4i5J`y z1JBm=H@)*GraZ?0?+yUW)8mDK1j+~)4k{BRfNsCGIqCkWMGq1u4E)~yPg38BD6_XB zGdH;r=~>adWx}CR!|BEo&)|41(6X++GqLVqi`szykui6|KYSu=zm#F0XP{!@d0PvW zB_$6R8PR7Pq^exuS2)SoiPw zk}$N=Gti_6aEEKT{M{mfW#y#AWPhaJ;f}~#rno((mkc>~fBMp&mfLx6toHi*SEXA5gF89s{?h+DEZQAwZP-loxqjRLNiyODS36Eznv47UdX0v+#=e= z{mS^~3PaLU)xE^e$8=kB7^Aa_%5bAmOCZGcWev}&3D1UDVLTF%)%u)<+8ODhG6cZ0wZ0#!~cXBx1n5czP z1VUQTlu^5b@u(KGpch%epR}6>HzbK5Lrv z|IyJ1C>lgC`0|!@98=D4d~8>(r$&lTa9+08PmbBu@$$y8zNIu##z!a#mAKRT zB>98^ohV?%+WIV*vOf9Z^vyHgmS?(BQcR?KD(=4$+}R2{UDus3-vDhS?=Pgd3-83_ zZYIQJoS2wsyxzO>e2`PwM0I^$erv0}I^gK96kgmW0IKP+AK|+iXx2t-xKvlhig40b zSgN;<hE z^oOh{YHT0R9NG$e742BOG4Xy!HD*WwUhXo-O}lF;RrE@+*{21Eb|bEns(35}Q{3t` zM^#$3N?a~(ZW8G=o36~Gj6T>V1Xu5rGO2mG%00>yG)U2^;hbF0Q0sX8YHS%5Dhz(+ zw)m?uT)tCUa}Y_474iUoHOltQ+#Uovie!ovMRnPGPGpogH+07&42Zx7wT}#zfimng zsKbk~+|0B2fyqinnrt%qIPO{`Y0DV~;|pjq(mgMG`AGU5*7i>4FMnZ4igXf4JwhyL zahdDGcJDo#ObKsTyur`n!#+Vqw<0e_l6J;vzQ1s|M9BQo9VLNFGqhOUfRbyUhOXnH zd$J9}t4falyy0@-Hh1JKAYHJX_ln{bA|QzS{|mA$iTYJe<=-{WDLQ|WLf1h`KdZdH zyf4q(8!jtdBNvmzTfW{K8Aw*$gDSEwMskgBxo&2!(LU)ZBa>BR?96R&a880z3>0FzqJApG$0^C|Hv zCr-Nhw^3zZ`{^A_iF050Brcca@)6T73J+h&wHZusFP7q1YFJ~)_Bv_8Gl zuCnt;^fVTG)cusX6TK|7^2N%6;LFmZt<<}f&af?vb%cbrjD3SMzltye^J_{9a#s8* zjVz#^6i#9#s^|gRT0>Pa`Ako#5N4`vK7FTVC4Dbu8Ynev)9A*7iQXNk1BsSdJ0#%h zKF$ZdL_$#P`u4jx0i1w-P}qty{cPR602u4oB@y!?Ydh0uR=5)t>I?#H!R}2eDHkl=Z z%y%|U5^F5Wy%3qak#{{fJ0fy7$c5f^-Xlt|@C^K$hhdRw$)Z#V3**3rkS4defrZSz zKNbv5yj&&fO{f3xyVW^NGC%zC>f9>PUfOWR%)o#klix@>JHPA^@a zD|F0F4|VJsay{OcOX0`4?=p*w$}zoHSrQ414H)PmeME3t@{Puo4|@e`f(I3l-M6hr zcfo023)4e~yGH$10+kb}OGOyNxK#M*weo}KM+!|{JxIQ;T4GjZRABx)$$Lx(1^AM` zBYY1WZ1WFIYfg%y$LAP2OF`H^3yOROmyx;+r=;cnT*Bgz7Hs=8R}0Nhsjutuf}T}a zYr`yyrMLgQq-i%aF}5#^**I7vMr@NuIo%f;8l11nuRElQho@39J!v)Ti9ox>CZLZC z$(yItiX#cxbmjk15T-Prcfsji0Xp3EuVm4}FugD|vIhD*FA z1om3h{D*otW)})}et@&my+sQd5`^E7hBOZNd7SB_LG6vsRea+CZS1iu@5SgUC)ds} zY%z&?4S%gJ)~D9|0P+^TfUpd(N}ZFWrtxoN zUjY9#D>pqpm`P(nk_AB#+F=HQ*sBlnka@}{d`87M^Ld=!=>?ReTb>#UDqiJ_Ve zd|cM+T7*>jq*R=+i_W%^AnBMp&kIp79H7Vb8^{JV?K_Gb!ZYd7l>$*fukU^MgCIp%oOaGVLfFgKb6+CvZxtsdv@&8Ht|*>k9F0; z_;4jEA_)4^%KRdBY#+<#xE&%iB>Q5%aQLt%NNIWRKv1UWI8_}f2Te@vobF0fB{Yx1 zMxAz1|0b#(*E5np@u?HnQH8VP zG}E_+%?U;U*ybQ5c;axOGA%?HW-+TWuR=Yl!|3D3C1JT|^T)_nx;Q8QZeum7b;&kw zIX46XDb=>@DcYXwIhZG;D{7_Z=Ko5hs7E$E;{vKrwPPt6xwWG0Y%6z4xS+#6;vP{H zVGTBEDPCL+4fuG9okcyxo)q-(9&rH;YN{zAI+0ey-dJ4oFwD!nf5h2vY`vw{)}?Cq z{FNq3CLZ(ZIDIxJCKxUB2UkZ2s*h@9<%1XSKrV-!Lhah0~THABFsDl z6}7872$QF@!5x-yh_P>PPDMHXM&xtx!T{|39P+`DmlE=3eANDjhl3ly(#*!R;wn1& E-}H~!2mk;8 From 46cecf3a805f99a0855cf3fe5858ef223b13609a Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 16:04:53 +0200 Subject: [PATCH 26/37] Add 'limits' section --- README.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 004679c..e4726fe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SerialExaminer - SerialExaminer is a small tool to speed up assessing tests and detecting potential fraudsters. It's easy to use and gives + SerialExaminer is a small tool to speed up test evaluation and detection of potential fraudsters. It's easy to use and works quickly with lots of files Ask your students to send you test responses in .txt files named after their full names, journal number, any ID numbers or anything else, that can identify them. Ask them to write answers in these files in format `.`, line by line. The order of questions and letter size don't matter @@ -12,6 +12,9 @@ - [Importing an exam key](https://github.com/Pixel48/SerialExaminer#importing-an-exam-key) - [Checking tests](https://github.com/Pixel48/SerialExaminer#checking-tests) - [Searching for cheaters](https://github.com/Pixel48/SerialExaminer#searching-for-cheaters) + - [Limits](https://github.com/Pixel48/SerialExaminer#limits) + - [Answers in exam key](https://github.com/Pixel48/SerialExaminer#answers-in-exam-key) + - [Records in result display](https://github.com/Pixel48/SerialExaminer#records-in-result-display) ## Installation Download the latest [SerialExaminer installer](https://github.com/Pixel48/SerialExaminer/releases/latest) @@ -32,7 +35,6 @@ 2. Provide answers to questions about the given number. If you make a mistake you can go back using the `<` button. Window will disappear automatically after entering the last answer ![Key data](./docs/img/key_ans.png) - > Now the key creator supports the number of answers in range from 4 to 12, future updates will gradually expand this range until they finally remove this restriction 3. After key answer window vanish, press `Done` button and provide where to save exam key for potential future use. (You dont need to import key after creating it, it's imported immediately after save). @@ -54,4 +56,20 @@ 5. Press `Check` button to calculate results 6. Press `Display` button to show similarity of other tests to source test +## Limits + SerialExaminer limitation list for [last release](https://github.com/Pixel48/SerialExaminer/releases/latest). + + *These limits will be removed by future updates.* + +### Answers in exam key + Key creator supports answers quantity in range from 4 to 12 + + ![Minimum answers quantity](./docs/img/limit_min_answers_quantity.png) + ![Maximum answers quantity](./docs/img/limit_max_answers_quantity.png) + +### Records in result display + Test result display windows supports up to 240 + + ![Maximum result display records](./docs/img/limit_results_display/png) + ###### Copyright (c) 2020 [Pixel48](https://github.com/Pixel48/) All Rights Reserved From f2d355c82330ae6f3956dd1b060c655d96be2d90 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 16:06:22 +0200 Subject: [PATCH 27/37] Add limits images --- docs/img/limit_max_answers_quantity.png | Bin 0 -> 3046 bytes docs/img/limit_min_answers_quantity.png | Bin 0 -> 2346 bytes docs/img/limit_results_display.png | Bin 0 -> 155009 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/img/limit_max_answers_quantity.png create mode 100644 docs/img/limit_min_answers_quantity.png create mode 100644 docs/img/limit_results_display.png diff --git a/docs/img/limit_max_answers_quantity.png b/docs/img/limit_max_answers_quantity.png new file mode 100644 index 0000000000000000000000000000000000000000..81e7213793251776b30199e5eda6198ef663dee0 GIT binary patch literal 3046 zcmZ`*cT`i!8V?AVP(x8lC<#T16e&U|Lbyu_NRuKRR_Sf&y=y?45UElkEJhGTkYW%7 zQ55MNM3Ay7Nl*x#AR_Rh?tAB*edql#_dDN|Z)SdF&P}&4Gh|~HU6+?-Kn*!8->)#za!3%`J`@CEfAyo$^#tB` z2Z2~(jr4S_qg*Js&P?&1Q$1>&)Xt#9S43`Er&*>O~ zZe=syWEC46A3qNQ^`ltQQE(CmI32~q1LaDVl7frVU$XE<)YsJw=71Tl4#Rm7v>tSs z>{5|y{6zb~hsBa1SfX#j?sB9+jLCa%5&GoY!g(p*KP2j?KHEE<)rvc88S?9lR%WK$ zbz8P$puZ)YhY^3d@a>i6C5YQ-1C}cponr)y-{&>nqlzpB93AW`vt3}{n+S!bRhyTe zx#ZyF%6sb`$f2cHDWMjUN=li&BVK1BM`P{N>E=w8WSKPe%9w};%Zo3}y z0J}5iJ-Qs#>K7$=4J%=2{2_!_&Fd+BTTZK(J^Gv7D`x6KUQQ{;(H6(~3x}dg9*4mC zUANWEow=yyiNS%}`Y}7K)s2tBN{8;vkc|1bw+J)N8ucTybnq%Y<4t28q?aA%J$F3P z2(1Ym9q72KCLV39&zlO-VD91!u|sEE7C0_Zz+OzBG(N>F$Q<3Cup>d((wO*^@hK|% zQ$7z=NiH`fth#m$ygy-n9H_ld?o`=9ssik0_Vee&DhtP9LToWN&cgMj+>t=ZIkoJd zJg?{XozZ8-4%f9w+3pB8wQx(r-j}5sx^ruj*7>!NKx!Br!tZAO#{#LK>@*19`!}3@ z0DJuEmK5#|5L=Hm|h1vcZc0uxsJL-V8_ zGQhN?QKRRqe5BffDb7(KIoQgpu%goR&*lmZfq_gK3r>ng=gXl2yjR)#!9P=DGp*!A50A;EFo?SSXxlSMzWO_ReqOK)rf z98VfuoqnEnAwz0M>;|RH-nq6kzU2`Q!iYc^ssw}yGJ)03&er5et@3RKK!&>Fri;0I zMbmfokcgfkIbEi+a%^qfO;N$6E|8m>1QaRMDZ=Os`V1UTX)yE%WsxT6=y*VkC~ls7 zlQlJCnhTdH)>OdM{E!k!(G(eW=_Ne29il=P7q4_vm_5BSkdJW&bb$`-zHi^Z3%AmY zk1!Ny%bt(i7t*}Jj+^*;5L4f>piys#9I+wK41vS4rNvJ7EtQQVpnDbJ;=v?<-RP8< zR>X4aEsEQ;sV-f_1X-9cajt%S4aOC+8t*n;KK9A%w!s}yd^CGit(V+Vv&&5RnJN|^ z3CC!$kDCVL4MC>bFa3l?yJyQAv)k)6I^P`#kG$s`SEoK^%emn+r2A zTnyu|l>0d)p%}F!*5TMGIehf|Uu7VS7BlzhROttVJp$uWhF{CR(r#6BWLmJ~myVqB z6yZfz_x@SU2=4=-EM}j@1BqGpmngKp7fC8&{BIY$-rYS?-ne+ZMW5x;MG*kPXiZ?ZinG3U6XwgMBIjn^ywAA1r<(qYTiJ=7#}s&lUDEnj7pD zU#uV}33673qLO$=4g(94*?Vp-F?SZZOx=$1L!F4hnlzS~gMH#(BP~Mw64T>-V)$#V z+hTBc4jI0QjTrorGe61+?I3);VcK)Vwj%AfMu_xiEA4ds4>rWZmRNH%Ir$Ouez0QU zQaRUTGkJH#9|t$HoiEQ64(urlic>y06ive5Bl?bxh&8)6xuAN)C+6sN?c)ct5w z=tf>-c=>NzgeFG7vx-nQ_CIK{U50>V@l>N;ls+ab_M#Gm(dR5}S z4h1cE2!s#^pWLan3$|^⁢Z=`jb-q0kRJUWTIe5JfTc~>t^jilWS2smQV3IwqE<& z`E8@GtJCfJClGSyA*~fQWP_ISRLP~ogS}$&E~ukN79H59293U;A@AY*wt-fRB|66* z9gBl+*y6#hsgZR7#;y=2ZqnfNemeNGlfsu%hhf9t^@j?ZsutfEVlenbq&aYGr1s~X zQmkLpl0PSB<88@^H~sVBm>vO09J(N>kNJDPyA@CF#-K2 z5MK1%q8$Hr#vKW8dclA)-A{UAh#?MgtyOt{dt=DC-pTBt#B>4F63$+}#t7*Mf$ev5?)W zxVilwA`vttm~J?{rEA=%7lh{p-mbQfO!o-~T2)Dbi%_sS7$Y76HhRci*oiqwhcHaW zB6cA)yzN(AT6k%-F|0Kvy_AyOoK-s->!@CA3C7>HH18`+gtimh9c>Cc(Aqofyw**7 z?IB=(%VKPPwM%(H3l8yPHb~|VlAlsAVrt~u8?(*C#|25)yC^gZ(RkYZdw1?{XyEwD znKRNJDgO2G5|^DMX;=7l(f_Bq3cDp;82O)wUqbk}$-PU>p`0!FrD*Ql1Q2NOqNF&e ff}yUYobGp*ya8jkkr>*)Imk%gOs@|3{o20(pf#A$ literal 0 HcmV?d00001 diff --git a/docs/img/limit_min_answers_quantity.png b/docs/img/limit_min_answers_quantity.png new file mode 100644 index 0000000000000000000000000000000000000000..2bf6cd6c257c70af7ddd757a6ccdf312ac436a0a GIT binary patch literal 2346 zcmZ8jdpOgJ8~<+ZN?05-jmdP#IW&nQ)Ld$tTn=+TD&}@dZp~0pLl?O&Ey*PbliSX5 zT*8t{HHk@MV}xT$+gyGuw?)p*bAEsP&hL-U`#zt~^FHq%@8^A==e_x}8%9MLrVIdp z3J&Y!Da|ud_$bOtg10PO1i z8z5%Pqfh`)?7}(OdnKKkFLBL69)dEz?v-e+W_>9SKAO%~h;6`ko8NuTtuVr#*5Rg` zT!MCHSY|y2sqRfuAFs0iPjkf&=BI;HpVEIvx$m!W^K|#FzL@WIRxLSwbQ(R zdZL379uW}%zW%3qJ^3o)*JKb@aX%J-q$xwlS0AKRl5OqmhPNHmENB_W044itpMwx( zo2!hrwJDRvWU;{#PiN7H9eMb8n3}8#Hwdx)ZT58I)9tFC+QqF&D=Uxv@Y=)W9cr@I zBGo9eBMiOdK8K!rLa?)CSiI_^o*k^@&wcnDr$j?bH5GiXozYISNmHMAtL6jLq%^-IQz z;TBQ9p#Q>IGlkNf&NXTy&a(N0i-M27BO{XDUET*M&Hf<>#`cEe60_`zAiwodwy;q0 z<&=-I(GG`=ZAnmuB39;muOf$h%WwiyLqRw3hwEvnmGB|Q)XKF#9uCGeeisJ?Qw&Xz zaUtI)x{Lz6-$G2FSczXZuqu!?9o3rb5eN*zdnMRA9&miw#M`?2;if-j4t*B5hedua zczf+gxML6Kf-z@@Xw$<6_%*{J-|AQzlL|s=<@EevJ`x@^_UY}Y$RhswF}eR}$g zROIlxw#Xx@rb?bFcT|5@or&K1>~LJ+^qo zi^d&S9JLN>slqtPRUJHhwhpX=&R4BG>Tp(&V{mRcyShf^Oi*Rls%S)6K7VXT39fHr zMY26f|L8@1v}AP&2I{HVkGz0KChd#^&NB%{&>ni89nWBfoM&gs`3}8$F>h*`Q*Z;o zF=IGXQl>I)eB=$>F=cAy4!kx9fm`Z=qABZa&mXVwU>0F5!V_j3Ef$SsnDcC8Nc$MI zS>M!^ib;v{&>p^7Wsjb&BdSq-(#c5mAPeCr+jmlGJzyZK!VW^@{CW~we5g6ySuc_z zI0P4M)$WnCFFg#!DyB{EKs)?w52mPjQ2?Z@CQ`bda!UV_D&>132JSyUVEYFMxl=0? zQ0kV`M!$%)m!}*Er2LN*FcIzZuxOx^N$#7y;}_L>Zfmf!h0n_z4t#BU`ewt)2#pvg z!!bH9HthW`{tM0Gz`i~Cn<-{?t3jtDJ7Qpf3` z<30>tLFweel-`NOjLJ?o=UEXxd zMV>-qE?nz(L(*-#-h%Uan1KV2@V6_hCVf`C682SBFD#{mG5Hk=f4I%H`$cUmzm^~0 z7u-S1fHTi%#L`|7JsR3bc)OHV3@m^dU9_H1>KLMl-zJrcy-h^Pp`y;^BgNXOnW)g0 zdkgEoj>dyVBLLiy^9aU+={fHFMKj`)m=80CK?hT!N8@3V%>;ifN(%QQr|ev(4DHqp zpk^}NSmYsNUGJMvee+K=tmhLeqiqb!Gooh`m#Q_HH{J6?D~qqJ_1YKr*y(~p z4`wR-pp*Lyv#YY~Wy-23p_6MfVG}jf${Nge&K(o=ccO)&1Xqwql*FD&S%V1Ch~i5m zP7ib5K;b>oa?-}80&nu%04&IH8RN)PT1gFOWNHRPA9n9VBtBceS$?~Aq0<#SI#m>6 z>e6s#LifOGz^O}X{+|~lI9h!}$4TZ|n--QhAKCmy#ga^=-!6s>d?k>t)|_H5DTPjO zVTXp>T_D9FD;UKD0y{iMxU&!TK7QBomBe^Uy^^nJbNE#`_uYD>?s^p$ON$R{lPyqk z4Q6@o08i_wI%4QiRKJmMs75&0M~_5@L^+0$c9rOm>sNeRQG`YHh8_`-%GzSH@8!I3dW~Q?*fqPCs4F{=}G7ys%ebGMWHWS zoxrLve(mzG4UYJYPT%*ZSS+Ruwl70+3dKp8sN1gNKO)+Ln=QWPu!fEMGpzHfp$E0m z;g$qe2w{>{M+!a@iJ#4YQ)-4|%>$F-I3Tm9M(Ji^ODEpN9}x@}V=VS0Hl<)!Y4q zXZ@=l9PC5tyEOK1i4WL@nVqdSi|26U?D4^kr|Rg}y82^zM%f~boCSCMF#dzHZWOiC z$paqzB*7g#lLOP|KPJ5}j{J~bnUv|bd3+56B7AnOWA+$t6u7?RMfD zpc2Jp1P%=9lyXir)OZQrxUTYAzo_T;&71VJRkyu`HHExU3{7T6#}^TZj9OH6g8=eM zcW}qzdbT$+_?2DzfIh$VzlQLoHp)}(NsWV|bA$ew{XaZOh`wJ^0`%-T-gm*4gov4Z zs)8UwQL{@!spswo9;wnnKb%1kSP{Du#WUw2@RCf|3Sw9lOj@83vJXH0@*z0?TWWAp zpcVQB*Q$T}Oz-nMRp#@(gU6p0azFKYZhU&YRI{#k*%#gsrC0a&zXRZoxjE4tg3|s1 D70!02 literal 0 HcmV?d00001 diff --git a/docs/img/limit_results_display.png b/docs/img/limit_results_display.png new file mode 100644 index 0000000000000000000000000000000000000000..82a06f357453b994c828d39911a48835bcf85045 GIT binary patch literal 155009 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 literal 0 HcmV?d00001 From edc6e815816ddef48486cdc229f63dfa462c8ddd Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 16:07:17 +0200 Subject: [PATCH 28/37] Fix path to photo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e4726fe..1555184 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,6 @@ ### Records in result display Test result display windows supports up to 240 - ![Maximum result display records](./docs/img/limit_results_display/png) + ![Maximum result display records](./docs/img/limit_results_display.png) ###### Copyright (c) 2020 [Pixel48](https://github.com/Pixel48/) All Rights Reserved From e623c92e5b0de975fa204a4cd3a24588a87a7bf4 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 16:09:14 +0200 Subject: [PATCH 29/37] Add an explanation --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1555184..7e62eb6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,9 @@ ![Maximum answers quantity](./docs/img/limit_max_answers_quantity.png) ### Records in result display - Test result display windows supports up to 240 + Test result display window supports up to 240. + + Export feature will work with all records, limit applies to display only ![Maximum result display records](./docs/img/limit_results_display.png) From 6af2bdbb915794b5ed1b7d9f10ced81ccc71a40f Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:15:27 +0200 Subject: [PATCH 30/37] Add basic xlsx export --- SerialExaminer.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 3ec0413..d29e42d 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -7,6 +7,7 @@ from functools import partial import tkinter.font as tkFont import os, pickle +import openpyxl versionTag = '0.4-beta.0' @@ -204,8 +205,11 @@ def resultExport(self): EXPOT_FILE = filedialog.asksaveasfilename( title = "Save test result", initialdir = '.', - defaultextension = '.csv', - filetypes =(("CSV file", "*.csv"), + initialfile = 'test', + defaultextension = '.xlsx', + filetypes =( + ("Excel Spreadsheet ", '*.xlsx'), + ("CSV file", "*.csv"), ("Plain text", "*.txt"), ) ) @@ -227,6 +231,27 @@ def resultExport(self): if i > 9: space = ' ' export.close() + elif EXPOT_FILE[-5:] == '.xlsx': + wb = openpyxl.Workbook() + sh = wb.create_sheet(index=0) + sh['B1'] = "FILENAME" + sh['C1'] = "POINTS" + sh['D1'] = "RESULT (in %)" + sh['E1'] = "MAX POINTS" + sh['E2'] = len(KEY_DICT.keys()) + sh.column_dimensions['B'].width = 25 + sh.column_dimensions['C'].width = 8 + sh.column_dimensions['D'].width = 13 + sh.column_dimensions['E'].width = 12 + row = 2 + col = 'ABCD' + for key in RESULT_DICT: + sh[str(col[0])+str(row)] = str(row-1) + sh[str(col[1])+str(row)] = key + sh[str(col[2])+str(row)] = int(RESULT_DICT[key][0].split('/')[0]) + sh[str(col[3])+str(row)] = '=ROUND('+str(col[2])+str(row)+'*100/E2, 2)' + row += 1 + wb.save(EXPOT_FILE) class KeyCreatorWindow(object): """Creator for CreateKey Window""" From b7d50a610d7444979d0c00d90e40c333e3b897db Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:18:14 +0200 Subject: [PATCH 31/37] Improve filedialog's code format --- SerialExaminer.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index d29e42d..3834024 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -145,7 +145,8 @@ def importKey(self): KEY_FILE = filedialog.askopenfilename( title = "Select exam key file", initialdir = './keys', - filetypes =(("Exam key file", "*.exkey"), + filetypes =( + ("Exam key file", "*.exkey"), ("Plain text", "*.txt"), ) ) @@ -438,7 +439,9 @@ def die(self): KEY_FILE = filedialog.asksaveasfilename( title = "Select exam key file", initialdir = './keys', - filetypes =(("Exam Key File", "*.exkey"),) + filetypes =( + ("Exam Key File", "*.exkey"), + ) ) if '.exkey' not in KEY_FILE: KEY_FILE += '.exkey' From dbea2e612dd15ea63d4057355a8e1a8c2a06e8d3 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:23:31 +0200 Subject: [PATCH 32/37] Fix indents and key export dialog --- SerialExaminer.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 3834024..0581a9c 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -167,9 +167,9 @@ def importKey(self): def browseExams(self): global INPUT_FILES testDir = filedialog.askdirectory( - title = "Examination txt files location", - initialdir = '.', - ) + title = "Examination txt files location", + initialdir = '.', + ) testFiles = os.listdir(testDir) buffer = [] for file in testFiles: @@ -439,13 +439,13 @@ def die(self): KEY_FILE = filedialog.asksaveasfilename( title = "Select exam key file", initialdir = './keys', + initialfile = 'key', + defaultextension = '.exkey', filetypes =( ("Exam Key File", "*.exkey"), ) ) - if '.exkey' not in KEY_FILE: - KEY_FILE += '.exkey' - if KEY_FILE != '..exkey': # if no filename provided, don't proceed + if KEY_FILE != '': # if no filename provided, don't proceed self.exportKeyFile(KEY_FILE) self.above.inputButton['state'] = NORMAL self.master.destroy() From 49057aa9f0d16219127e8aedf4e564b16c1fe347 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:34:40 +0200 Subject: [PATCH 33/37] Extend result display range to 270 records --- SerialExaminer.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 256f016..05dd098 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -164,6 +164,8 @@ def importKey(self): for line in keyf: line = splitLine(line) KEY_DICT[line[0]] = line[1] + if 0 in KEY_DICT.keys(): + KEY_DICT.pop(0) questionCount = len(KEY_DICT.keys()) self.inputButton['state'] = NORMAL def browseExams(self): @@ -611,8 +613,8 @@ def build(self, frame): text = "Result", fg = 'red').grid(row = R, column = C) # results # - limit = 40 - endLimit = 240 + limit = 45 + endLimit = 270 x = 0 for filename in list(RESULT_DICT.keys())[:endLimit]: newRow(x//limit*4) From d3779b81ffe6f6413785df46dd2f13d133081ddc Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:36:06 +0200 Subject: [PATCH 34/37] Update limits --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e62eb6..be1d206 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ ![Maximum answers quantity](./docs/img/limit_max_answers_quantity.png) ### Records in result display - Test result display window supports up to 240. + Test result display window supports up to 270. Export feature will work with all records, limit applies to display only From c6a0f9b44aca1c8b1cea21de6a904c47a7444335 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:40:30 +0200 Subject: [PATCH 35/37] Fix memoty usage --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 05dd098..10c01f9 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -220,7 +220,7 @@ def resultExport(self): ) if EXPOT_FILE[-4:] == '.csv': with open(EXPOT_FILE, 'w') as export: - export.write(';FILENAME;'+'POINTS (max '+RESULT_DICT[list(RESULT_DICT.keys())[0]][0].split('/')[1]+');RESULT IN %\n') + export.write(';FILENAME;'+'POINTS (max '+len(RESULT_DICT.keys())+');RESULT IN %\n') i = 1 for key in RESULT_DICT: export.write(str(i)+';'+key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') From 5181e4028c9ee21674c971315cc43e7c3e5551a8 Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:41:03 +0200 Subject: [PATCH 36/37] Fix typo --- SerialExaminer.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 10c01f9..6e771e4 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -207,7 +207,7 @@ def resultDisplay(self): def resultExport(self): # NOTE: RESULT_DICT format: {: ['/%']} global RESULT_DICT - EXPOT_FILE = filedialog.asksaveasfilename( + EXPORT_FILE = filedialog.asksaveasfilename( title = "Save test result", initialdir = '.', initialfile = 'test', @@ -218,16 +218,16 @@ def resultExport(self): ("Plain text", "*.txt"), ) ) - if EXPOT_FILE[-4:] == '.csv': - with open(EXPOT_FILE, 'w') as export: + if EXPORT_FILE[-4:] == '.csv': + with open(EXPORT_FILE, 'w') as export: export.write(';FILENAME;'+'POINTS (max '+len(RESULT_DICT.keys())+');RESULT IN %\n') i = 1 for key in RESULT_DICT: export.write(str(i)+';'+key+';'+RESULT_DICT[key][0].split('/')[0]+';'+RESULT_DICT[key][1][:-1].replace('.',',')+'\n') i += 1 export.close() - elif EXPOT_FILE[-4:] == '.txt': - with open(EXPOT_FILE, 'w') as export: + elif EXPORT_FILE[-4:] == '.txt': + with open(EXPORT_FILE, 'w') as export: i = 1 space = ' ' for key in RESULT_DICT: @@ -236,7 +236,7 @@ def resultExport(self): if i > 9: space = ' ' export.close() - elif EXPOT_FILE[-5:] == '.xlsx': + elif EXPORT_FILE[-5:] == '.xlsx': wb = openpyxl.Workbook() sh = wb.create_sheet(index=0) sh['B1'] = "FILENAME" @@ -256,7 +256,7 @@ def resultExport(self): sh[str(col[2])+str(row)] = int(RESULT_DICT[key][0].split('/')[0]) sh[str(col[3])+str(row)] = '=ROUND('+str(col[2])+str(row)+'*100/E2, 2)' row += 1 - wb.save(EXPOT_FILE) + wb.save(EXPORT_FILE) class KeyCreatorWindow(object): """Creator for CreateKey Window""" From 024461b6a768a9300f3402d18e61b3f964e3600c Mon Sep 17 00:00:00 2001 From: Pixel48 Date: Wed, 27 May 2020 17:42:34 +0200 Subject: [PATCH 37/37] Change version tag --- SerialExaminer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialExaminer.py b/SerialExaminer.py index 6e771e4..acf26d3 100644 --- a/SerialExaminer.py +++ b/SerialExaminer.py @@ -9,7 +9,7 @@ import os, pickle import openpyxl -versionTag = '0.4-beta.0' +versionTag = '0.4.0' # SOME GLOBALS R = 0