excel2moodle.core package
These Modules are the heart of the excel2moodle Package.
Submodules
excel2moodle.core.category module
- class excel2moodle.core.category.Category(n, name, description, dataframe, points=0, version=0)[source]
Bases:
objectCategory stores a list of question. And holds shared information for all.
- Parameters:
n (int)
name (str)
description (str)
dataframe (DataFrame)
points (float)
version (int)
- getCategoryHeader()[source]
Insert an <question type=’category’> before all Questions of this Category.
- Return type:
Element
- property id: str
- property name: str
excel2moodle.core.dataStructure module
Main Module which does the heavy lifting.
At the heart is the class xmlTest
- class excel2moodle.core.dataStructure.QuestionDB(settings)[source]
Bases:
objectThe QuestionDB is the main class for processing the Spreadsheet.
It provides the functionality, for setting up the categories and Questions. Any interaction with the questions are done by its methods.
- Parameters:
settings (Settings)
- appendQuestions(questions, file=None)[source]
Append selected question Elements to the tree.
- Return type:
None- Parameters:
questions (list[QuestionItem])
file (Path | None)
- asyncInitAllCategories(sheetPath)[source]
Read all category sheets asynchron and initialize all Categories.
It does the same as initAllCategories but the parsing of the excelfile is done asynchron via concurrent.futures.ProcessPoolExecutor
- Return type:
None- Parameters:
sheetPath (Path)
- initAllCategories(sheetPath)[source]
Read all category sheets and initialize all Categories.
- Return type:
None- Parameters:
sheetPath (Path)
- initCategory(sheetPath, categoryName)[source]
Read categoryName from the file
sheetPathand initialize the category.- Return type:
None- Parameters:
sheetPath (Path)
categoryName (str)
-
mcParser:
MCQuestionParser= <excel2moodle.question_types.mc.MCQuestionParser object>
-
nfParser:
NFQuestionParser= <excel2moodle.question_types.nf.NFQuestionParser object>
-
nfmParser:
NFMQuestionParser= <excel2moodle.question_types.nfm.NFMQuestionParser object>
- parseAllQuestions()[source]
Parse all question from all categories.
The categories need to be initialized first.
- Return type:
None
- parseCategoryQuestions(category)[source]
Parse all questions inside
category.The category has to be initialized first.
- Return type:
None- Parameters:
category (Category)
- readCategoriesMetadata(sheetPath)[source]
Read the metadata and questions from the spreadsheet.
Get the category data from the spreadsheet and stores it in the
categoriesMetaDatadataframe Setup the categories and store them inself.categories = {}Pass the question data to the categories.- Return type:
None- Parameters:
sheetPath (Path)
- classmethod setupAndParseQuestion(category, qNumber)[source]
Check if the Question Data is valid. Then parse it.
The Question data is accessed from category.dataframe via its number First it is checked if all mandatory fields for the given question type are provided. Then in checks, weather the data has the correct type. If the data is valid, the corresponding parser is fed with the data and run.
- Raises:
QNotParsedException – If the parsing of the question is not possible this is raised
InvalidFieldException – If the data of the question is invalid. This gives more information wheather a missing field, or the invalid type caused the Exception.
- Return type:
None- Parameters:
category (Category)
qNumber (int)
- signals = <excel2moodle.core.dataStructure.QuestionDBSignals(0x558ecb9d5950)>
- class excel2moodle.core.dataStructure.QuestionDBSignals[source]
Bases:
QObject- categoryQuestionsReady
- categoryReady
- staticMetaObject = PySide6.QtCore.QMetaObject("QuestionDBSignals" inherits "QObject": Methods: #4 type=Signal, signature=categoryReady(PyObject), parameters=PyObject #5 type=Signal, signature=categoryQuestionsReady(PyObject), parameters=PyObject )
excel2moodle.core.etHelpers module
Helper Module which aids in creating XML-Elements for the Questions.
This module host different functions. All of them will return an lxml.etree.Element
- excel2moodle.core.etHelpers.getCdatTxtElement(subEle)[source]
Puts all
subEleasstrinto a<text><![CDATA[...subEle...]]</text>element.- Return type:
Element- Parameters:
subEle (_Element | list[_Element])
- excel2moodle.core.etHelpers.getElement(eleName, text, **attribs)[source]
Creates an XML-Element with text.
If
type(text)``is a ``QuestionFields, the specific field is directly read. Otherwise it will include whatever istextas a string :param **kwargs: are treated as attributes for the Element :raises NanException if the spreadsheet cell of text: QuestionFields isnan- Return type:
Element- Parameters:
eleName (str)
text (str)
- excel2moodle.core.etHelpers.getFeedBEle(feedback, text=None, style=None)[source]
Gets ET Elements with the feedback for the question.
- Return type:
Element- Parameters:
feedback (XMLTags)
text (str | None)
style (TextElements | None)
excel2moodle.core.exceptions module
- exception excel2moodle.core.exceptions.InvalidFieldException(message, qID, field, *args, **kwargs)[source]
Bases:
Exception
- exception excel2moodle.core.exceptions.NanException(message, qID, field, *args, **kwargs)[source]
Bases:
QNotParsedException- Return type:
None
excel2moodle.core.globals module
- class excel2moodle.core.globals.DFIndex(*values)[source]
Bases:
StrEnumThe identifier string for for the spreadsheet and the string for the xml-tag.
Each enum corresponds to a list of two values. The first Value is the index in the spreadsheet, the second is the name of the xml-tag
- ANSTYPE = 'answerType'
- BPOINTS = 'bulletPoint'
- FALSE = 'false'
- NAME = 'name'
- NUMBER = 'number'
- PICTURE = 'picture'
- RESULT = 'result'
- TEXT = 'text'
- TOLERANCE = 'tolerance'
- TRUE = 'true'
- TYPE = 'type'
- class excel2moodle.core.globals.TextElements(*values)[source]
Bases:
Enum- LISTITEM = ('li', 'text-align: left;')
- PLEFT = ('p', 'text-align: left;')
- SPANGREEN = ('span', 'color: rgb(152, 202, 62)')
- SPANORANGE = ('span', 'color: rgb(152, 100, 100)')
- SPANRED = ('span', 'color: rgb(239, 69, 64)')
- ULIST = ('ul', '')
- property style: str
- class excel2moodle.core.globals.XMLTags(_, dfkey=None, getEle=None)[source]
Bases:
StrEnum- ANSFEEDBACK = 'feedback'
- ANSWER = 'answer'
- CORFEEDB = 'correctfeedback'
- GENFEEDB = 'generalfeedback'
- HIDE = 'hidden'
- ID = 'idnumber'
- INCORFEEDB = 'incorrectfeedback'
- NAME = 'name'
- PCORFEEDB = 'partialcorrectfeedback'
- PENALTY = 'penalty'
- PICTURE = 'file'
- POINTS = 'defaultgrade'
- QTEXT = 'questiontext'
- QUESTION = 'question'
- TEXT = 'text'
- TOLERANCE = 'tolerance'
- TYPE = 'type'
- property dfkey: str
excel2moodle.core.numericMultiQ module
Numeric Multi Questions Module to calculate results from a formula.
This module calculates a series of results from al matrix of variables. For each column in the matrix there will be one result. As well it returns a bullet points string that shows the numerical values corresponding to the set of variables
- excel2moodle.core.numericMultiQ.getVariablesDict(df, keyList, index)[source]
Liest alle Variablen-Listen deren Name in
keyListist aus dem DataFrame im Column[index].- Return type:
dict- Parameters:
df (DataFrame)
keyList (list)
index (int)
- excel2moodle.core.numericMultiQ.getVarsList(bps)[source]
Durchsucht den bulletPoints String nach den Variablen {var}.
- Return type:
list- Parameters:
bps (str)
- excel2moodle.core.numericMultiQ.insertVariablesToBPoints(varDict, bulletPoints, index)[source]
Für jeden Eintrag im varDict, wird im bulletPoints String der Substring “{key}” durch value[index] ersetzt.
- Return type:
str- Parameters:
varDict (dict)
bulletPoints (str)
index (int)
- excel2moodle.core.numericMultiQ.parseNumericMultiQuestion(datFrame, bulletPoints, equation, questionIndex)[source]
Berechnet die Ergebnisse anhand der Variablen in bulletPoints.
Gibt eine Liste mit allen Ergebnissen zurück und eine Liste mit den bulletPoints-Strings, die die Numerischen Variablen enthalten
- Return type:
tuple[list[str],list[float]]- Parameters:
datFrame (DataFrame)
bulletPoints (str)
equation (str)
questionIndex (int)
excel2moodle.core.parser module
- class excel2moodle.core.parser.QuestionParser[source]
Bases:
objectSetup the Parser Object.
This is the superclass which implements the general Behaviour of he Parser. Important to implement the answers methods.
- appendToTmpEle(eleName, text, txtEle=False, **attribs)[source]
Append
textto the temporary Element.It uses the data from
self.rawInputiftextis type``DFIndex`` Otherwise the value oftextwill be inserted.- Return type:
None- Parameters:
eleName (str)
text (str | DFIndex)
- getFeedBEle(feedback, text=None, style=None)[source]
- Return type:
Element- Parameters:
feedback (XMLTags)
text (str | None)
style (TextElements | None)
- getNumericAnsElement(result, fraction=100, format='moodle_auto_format')[source]
Get
<answer/>Element specific for the numerical Question.- Return type:
Element- Parameters:
result (float)
fraction (float)
format (str)
- The element contains those children:
<text/>which holds the value of the answer<tolerance/>with the relative tolerance for the result in percent<feedback/>with general feedback for a true answer.
- hasPicture()[source]
Create a
Pictureobject ``question``if the question needs a pic.- Return type:
bool
- parse()[source]
Parse the Question.
Generates an new Question Element stored as
self.tmpEle:ET.Elementif no Exceptions are raised,self.tmpEleis passed toself.question.element- Return type:
None
- setAnswers()[source]
Needs to be implemented in the type-specific subclasses.
- Return type:
list[Element] |None
- setBPoints()[source]
If there bulletPoints are set in the Spreadsheet it creates an unordered List-Element in
Question.bulletList.- Return type:
None
- settings = <excel2moodle.core.settings.Settings(0x558ecc5243d0)>
excel2moodle.core.question module
- class excel2moodle.core.question.Picture(picKey, imgFolder, questionId, width=0)[source]
Bases:
object- Parameters:
picKey (str)
imgFolder (Path)
questionId (str)
width (int)
- getImgId(imgKey)[source]
Get the image ID and width based on the given key. The key should either be the full ID (as the question) or only the question Num. If only the number is given, the category.id is prepended. The width should be specified by ID:width:XX. where xx is the px value.
- Return type:
bool- Parameters:
imgKey (str)
excel2moodle.core.validator module
This Module checks if the data inside the Spreadsheet is valid.
Those things are considered:
The mandatory entries must not be
NanAll fields must have the right data-type
If Those checks pass, a question is created,
which can be accessed via Validator.question
- class excel2moodle.core.validator.Validator[source]
Bases:
objectValidate the question data from the spreadsheet.
Creates a dictionary with the data, for easier access later.
excel2moodle.ui.settings module
Settings module provides the adjusted subclass of PySide6.QtCore.QSettings.
- class excel2moodle.core.settings.Settings[source]
Bases:
QSettingsSettings for Excel2moodle.
- get(key)[source]
Get the typesafe settings value.
If local Settings are stored, they are returned. If no setting is made, the default value is returned.
- Parameters:
key (SettingsKey)
-
localSettings:
ClassVar[dict[str,str|float|Path]] = {}
- set(key, value, local=False)[source]
Set the setting to value.
- Parameters:
local (
bool) – True saves local project specific settings. Defaults to False The local settings are meant to be set in the first sheet settingskey (SettingsKey | str)
value (float | bool | Path | str)
- Return type:
None
- setSpreadsheet(sheet)[source]
Save spreadsheet path and emit the changed event.
- Return type:
None- Parameters:
sheet (Path)
- shPathChanged
- staticMetaObject = PySide6.QtCore.QMetaObject("Settings" inherits "QSettings": Methods: #4 type=Signal, signature=shPathChanged(PyObject), parameters=PyObject )
- class excel2moodle.core.settings.SettingsKey(_, place, typ, default)[source]
Bases:
StrEnumSettings Keys are needed to always acess the correct Value.
As the QSettings settings are accesed via strings, which could easily gotten wrong. Further, this Enum defines, which type a setting has to be.
- ANSPICWIDTH = 'answerImgWidth'
- CATEGORIESSHEET = 'categoriesSheet'
- INCLUDEINCATS = 'includeCats'
- LOGFILE = 'logfile'
- LOGLEVEL = 'loglevel'
- PICTUREFOLDER = 'pictureFolder'
- PICTURESUBFOLDER = 'imgFolder'
- PICTUREWIDTH = 'imgWidth'
- POINTS = 'points'
- QUESTIONVARIANT = 'defaultQuestionVariant'
- SPREADSHEETFOLDER = 'spreadsheetFolder'
- TOLERANCE = 'tolerance'
- VERSION = 'version'
- property default: str | int | float | Path | bool | None
Get default value for the key.
- property full: str
- property place: str
excel2moodle.core.stringHelpers module
This Module holds small Helperfunctions related to string manipulation.
- excel2moodle.core.stringHelpers.getListFromStr(stringList)[source]
Get a python List of strings from a semi-colon separated string.
- Return type:
list[str]- Parameters:
stringList (str | list[str])
- excel2moodle.core.stringHelpers.printDom(xmlElement, file=None)[source]
Prints the document tree of
xmlTreetofile, if specified, else dumps to stdout.- Return type:
None- Parameters:
xmlElement (Element)
file (Path | None)