mcqpy.question.filter
Module for question filters.
Modules:
-
base_filter–Module for base-class for question filters.
-
date–Date filter for questions.
-
difficulty–Module for filtering questions by difficulty level.
-
factory–Module for filter factory.
-
manifest–Module for manifest-based question filtering.
-
slug–Module for slug-based question filtering.
-
stratified–Module for stratified question filtering.
-
tag–Module for question tag filter.
Classes:
-
AttributeFilter–Generic filter based on question attributes.
-
BaseFilter–Abstract base class for question filters.
-
CompositeFilter–Combines multiple filters into a single filter.
-
DateFilter– -
DifficultyFilter–DifficultyFilter for filtering questions by difficulty level.
-
FilterFactory–Creates filters from configuration dictionaries.
-
ManifestFilter–Manifest file based filter for questions.
-
SlugFilter–Filter questions by slug with exact match.
-
StratifiedFilter–Stratified selection filter
-
TagFilter–Filter questions by tag(s).
AttributeFilter
BaseFilter
Bases: ABC
Abstract base class for question filters.
CompositeFilter
CompositeFilter(filters: list[BaseFilter])
DateFilter
DateFilter(
date_value: str,
end_date: str = None,
strict_missing: bool = True,
)
Bases: BaseFilter
Filter questions by creation date.
Supports:
- Exact year:
DateFilter('2024')- matches all dates in that year - Exact date:
DateFilter('15/03/2024') - Before date:
DateFilter('<2024')orDateFilter('<15/03/2024') - After date:
DateFilter('>2023')orDateFilter('>01/01/2023') - Date range:
DateFilter('2023', '2024')
Note: All dates are stored internally as dd/mm/yyyy format.
Year-only inputs are treated as the full year range (Jan 1 - Dec 31).
Parameters:
-
(date_valuestr) –Date string ('yyyy' or 'dd/mm/yyyy'), may include operator prefix
-
(end_datestr, default:None) –Optional end date for range queries
-
(strict_missingbool, default:True) –If True (default), exclude questions without created_date attribute. If False, include questions without created_date attribute.
Methods:
-
apply–Apply date filter to questions.
DifficultyFilter
DifficultyFilter(
difficulty: str,
operator: Literal["==", "<", "<=", ">", ">="] = "==",
strict_missing: bool = True,
)
Bases: AttributeFilter
DifficultyFilter for filtering questions by difficulty level.
Filter questions by difficulty level with comparison operators.
Supports:
- Exact match:
DifficultyFilter('hard') - Less than:
DifficultyFilter('<hard')orDifficultyFilter('hard', operator='<') - Less than or equal:
DifficultyFilter('<=hard') - Greater than:
DifficultyFilter('>easy') - Greater than or equal:
DifficultyFilter('>=easy')
Parameters:
-
(difficultystr) –Difficulty level to filter by
-
(operatorLiteral['==', '<', '<=', '>', '>='], default:'==') –Comparison operator.
-
(strict_missingbool, default:True) –If True (default), exclude questions without difficulty attribute. If False, include questions without difficulty attribute.
FilterFactory
Creates filters from configuration dictionaries.
Methods:
-
from_config–Create filter from config dict.
ManifestFilter
ManifestFilter(
manifest: Manifest | None = None,
manifest_path: str | None = None,
exclude: bool = True,
)
Bases: BaseFilter
Manifest file based filter for questions.
Filter questions based on a manifest file.
The primary use case is to exclude questions that are listed in a manifest, such as questions used in a previous exam/quiz.
Parameters:
-
(manifestManifest | None, default:None) –An instance of Manifest. If provided, it will be used directly.
-
(manifest_pathstr | None, default:None) –Path to the manifest file. Used if
manifestis None. -
(excludebool, default:True) –If True, questions in the manifest are excluded.
SlugFilter
SlugFilter(slugs: list[str] | str)
Bases: AttributeFilter
Filter questions by slug with exact match.
Parameters:
-
(slugslist[str] | str) –Slugs to filter by
StratifiedFilter
StratifiedFilter(
number_of_questions: int,
filters: list[BaseFilter] | None = None,
proportions: list[float] | None = None,
filter_configs: list[dict] | None = None,
)
Bases: BaseFilter
Stratified selection filter
Stratified filter to select questions based on multiple filters and specified proportions.
Parameters:
-
(number_of_questionsint) –Total number of questions to select.
-
(filterslist[BaseFilter] | None, default:None) –List of BaseFilter instances to apply.
-
(proportionslist[float] | None, default:None) –List of proportions corresponding to each filter.
-
(filter_configslist[dict] | None, default:None) –List of filter configuration dictionaries to create filters if
filtersis None.
TagFilter
TagFilter(
tags: list[str] | str,
match_all: bool = False,
exclude: bool = False,
strict_missing: bool = True,
)
Bases: AttributeFilter
Filter questions by tag(s).
Supports:
- Include any:
TagFilter(['python', 'loops']) - Include all:
TagFilter(['python', 'loops'], match_all=True) - Exclude any:
TagFilter(['deprecated'], exclude=True)
Parameters:
-
(tagslist[str] | str) –Tag(s) to filter by.
-
(match_allbool, default:False) –If
True, question must have all specified tags. -
(excludebool, default:False) –If
True, exclude questions with any of the specified tags. -
(strict_missingbool, default:True) –If
True(default), exclude questions without tags attribute (unless exclude=True). IfFalse, include questions without tags attribute (unless exclude=True).