Skip to main content

Decorators Parser

License

© 2023 Smartschool Inc. All rights reserved.

Installation guide

  1. Install Python 3.7 or newer from https://www.python.org/downloads/
  2. Install PIP using this guide
  3. Run pip install decorator-parser in 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)

Source distribution for decorator-parser 1.2.0
File Size Uploaded
decorator_parser-1.2.0.tar.gz 5.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for decorator-parser 1.2.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.1

1 release file

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page