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:
object
Category 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:
object
oberste Klasse für den Test.
- 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
sheetPath
and 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)
- classmethod parseQuestion(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)
- readCategoriesMetadata(sheetPath)[source]
Read the metadata and questions from the spreadsheet.
Get the category data from the spreadsheet and stores it in the
categoriesMetaData
dataframe Setup the categories and store them inself.categories = {}
Pass the question data to the categories.- Return type:
None
- Parameters:
sheetPath (Path)
- signals = <excel2moodle.core.dataStructure.QuestionDBSignals(0x6545863ae4c0)>
-
validator:
Validator
= <excel2moodle.core.validator.Validator object>
- 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
subEle
asstr
into 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 istext
as 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:
StrEnum
The 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 = 'bulletPoints'
- 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
keyList
ist 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:
object
Setup 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
text
to the temporary Element.It uses the data from
self.rawInput
iftext
is type``DFIndex`` Otherwise the value oftext
will 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, tolerance=0, fraction=100, format='moodle_auto_format')[source]
Get
<answer/>
Element specific for the numerical Question.- Return type:
Element
- Parameters:
result (float)
tolerance (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.
- getTolerancePercent(tolerance)[source]
Get the correct tolerance. If
tolerance < 1
: it is interpreted as the fraction. Iftolerance >= 1
: it is interpreted as percentage.- Return type:
int
- Parameters:
tolerance (float)
- hasPicture()[source]
Create a
Picture
object ``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.Element
if no Exceptions are raised,self.tmpEle
is passed toself.question.element
- Return type:
None
- setAnswers()[source]
Needs to be implemented in the type-specific subclasses.
- Return type:
list
[Element
] |None
excel2moodle.core.question module
- class excel2moodle.core.question.Picture(picKey, imgFolder, question)[source]
Bases:
object
- Parameters:
picKey (str)
imgFolder (Path)
question (Question)
excel2moodle.core.questionValidator module
excel2moodle.core.questionWriter module
This Module holds the related Functions for writing the Questions to an xml-File.
It is planned to rework those Functions, because they’re not quite elegant.
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)
- excel2moodle.core.stringHelpers.printDom(xmlElement, file=None)[source]
Prints the document tree of
xmlTree
tofile
, if specified, else dumps to stdout.- Return type:
None
- Parameters:
xmlElement (Element)
file (Path | None)