Decorators Parser
License
© 2023 Smartschool Inc. All rights reserved.
Installation guide
- Install Python 3.7 or newer from https://www.python.org/downloads/
- Install PIP using this guide
- Run
pip install decorator-parserin your command line
API
parse
def parse(self, path=None, data=None)
Parses given string or file and returns a list of dictionaries. If both path and data are provided, data will be ignored.
Decorators format
Decorator name can be any string that does not contain '@' character. If decorator
does not satisfy this requirement InvalidDecoratorException will be thrown.
Example:
@decorator(some nice value)
Standard decorators
Decorators can be used in one of three ways:
@decorator(value)
or
@decorator()
Some very long and complicated value that would be hard to read if it were in parenthesis like the value above.
or
@decorator
Some very long and complicated value that would be hard to read if it were in parenthesis like the value above.
All of these create Python dictionary like this:
{
'decorator': 'value'
}
@new decorator
Using @new decorator starts a new dictionary and adds it to the current list of dictionaries. In a single piece of text between two @new decorators (which correspond to a single Python dictionary) there can not be two decorators with the same name. Using a same name without an appropriate @new decorator will result in DuplicateDecoratorException being thrown.
Example:
task.txt:
@question()
Who is Lincoln?
@new
@question()
What is the purpose of the Bill of Rights?
run.py:
from decorator_parser.parse import Parser
task_parser = Parser()
print(task_parser.parse_file('task.txt'))
result:
[
{
'question': 'Who is Lincoln?'
},
{
'question': 'What is the purpose of the Bill of Rights?'
}
]
Global decorators
In addition to standard decorators, decorators which name starts with global- are added to each dictionary while parsing a file. Dictionary key is the decorator's suffix after global-
Example:
task.txt:
@global-topic(History)
@question()
Who is Lincoln?
@new
@question()
What is the purpose of the Bill of Rights?
run.py:
from decorator_parser.parse import Parser
task_parser = Parser()
print(task_parser.parse_file('task.txt'))
result:
[
{
'topic': 'History',
'question': 'Who is Lincoln?'
},
{
'topic': 'History',
'question': 'What is the purpose of the Bill of Rights?'
}
]
Constraints
Decorators can use constraints on their values. If a decorator has value that does not match regular expression
provided, Parser will throw InvalidValueException. Parser class takes optional constraints argument in its constructor which
is a Python dictionary in a format shown below (if format of the given dictionary is invalid, InvalidConstraintException will be thrown):
example = {
'question':
{
'regex': '([^@]+)',
'description': 'any non-empty string without @'
},
'correct':
{
'regex': '([1-4])',
'description': 'any number from 1 to 4'
}
}
Example 1
task.txt:
@correct(11)
run.py:
from decorator_parser.parse import Parser
task_parser = Parser(example)
print(task_parser.parse_file('task.txt'))
Will result in the following output:
errors.InvalidValueException: Line 1: 'correct' should be any number from 1 to 4 but is 11
Example 2
If we take Example 1 but change task.txt file to:
correct(1)
The output will be:
[
{
'correct': '1'
}
]
Ignored decorators
If you need to use @ symbol for something else than decorator, you can specify names to exclude from the search
Example:
task.txt:
@question
Some long question with @ref in it
run.py:
from decorator_parser.parse import Parser
task_parser = Parser(ignored=['ref'])
print(task_parser.parse_file('task.txt'))
Will result in the following output:
[
{
'question': 'Some long question with @ref in it'
}
]
Release files for decorator-parser 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| decorator_parser-1.2.0.tar.gz | 5.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| decorator_parser-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.6 kB
Release files / decorator_parser-1.2.0.tar.gz
| Download URL | decorator_parser-1.2.0.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d97a1a25361f53fda9158385913d46b4e7d96b9d220563788d45852336cbd1e
|
|
BLAKE2b-256 checksum How to use checksums |
f7f729803f1c6c79c177eb892785203feedf666bb60cbdea95bacf0c11b5418f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.10
|
Release files / decorator_parser-1.2.0-py3-none-any.whl
| Download URL | decorator_parser-1.2.0-py3-none-any.whl |
|---|---|
| Size | 6.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
08bc5367bf55e7150ac2e6021664b727ccef9944494fda07031488a0beece933
|
|
BLAKE2b-256 checksum How to use checksums |
75687ba0e87d099ec84f916359a9320dd4a79371f84709d7eb22a07f1cfc8771
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.10
|