def parse()

in src/composer/composer.py [0:0]


def parse(composition):
    ''' recursively deserialize composition '''
    if not isinstance(composition, dict):
        raise ComposerError('Invalid argument "composition" in "parse" combinator', composition)

    combinator = composition['.combinator']() if '.combinator' in composition and callable(composition['.combinator']) else combinators[composition['type']]

    if not isinstance(combinator, dict):
        raise ComposerError('Invalid composition type in "parse" combinator', composition)

    extended = { '.combinator': lambda : combinator }
    extended.update(composition)
    return visit(extended, lambda composition, _: composer.parse(composition))