You've already forked STARK
mirror of
https://github.com/MarkParker5/STARK.git
synced 2026-04-23 19:31:10 +02:00
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from stark.core import Pattern
|
|
from stark.core.parsing import PatternParser
|
|
from stark.core.types import Object, Word
|
|
from stark.general.classproperty import classproperty
|
|
|
|
pattern_parser = PatternParser()
|
|
|
|
|
|
class FullName(Object):
|
|
first: Word
|
|
second: Word
|
|
|
|
@classproperty
|
|
def pattern(cls) -> Pattern:
|
|
return Pattern("$first:Word $second:Word")
|
|
|
|
|
|
class ExtraParameterInAnnotation(Object):
|
|
word1: Word
|
|
word2: Word
|
|
word3: Word
|
|
|
|
@classproperty
|
|
def pattern(cls) -> Pattern:
|
|
return Pattern("$word1:Word $word2:Word")
|
|
|
|
|
|
async def test_nested_objects():
|
|
pattern_parser.register_parameter_type(FullName)
|
|
|
|
p = Pattern("$name:FullName")
|
|
assert p
|
|
assert pattern_parser._compile_pattern(p)
|
|
|
|
m = await pattern_parser.match(p, "John Galt")
|
|
assert m
|
|
assert set(m[0].parameters.keys()) == {"name"}
|
|
assert m[0].parameters["name"].first == Word("John")
|
|
assert m[0].parameters["name"].second == Word("Galt")
|
|
|
|
|
|
async def test_extra_parameter_in_annotation():
|
|
pattern_parser.register_parameter_type(ExtraParameterInAnnotation)
|
|
|
|
p = Pattern("$name:ExtraParameterInAnnotation")
|
|
assert p
|
|
assert pattern_parser._compile_pattern(p)
|
|
|
|
m = await pattern_parser.match(p, "John Galt")
|
|
assert m
|
|
assert set(m[0].parameters.keys()) == {"name"}
|
|
assert m[0].parameters["name"].word1 == Word("John")
|
|
assert m[0].parameters["name"].word2 == Word("Galt")
|
|
assert not hasattr(m[0].parameters["name"], "word3")
|