Skip to content

Commit

Permalink
allow placeholders in event_player. fix #973
Browse files Browse the repository at this point in the history
  • Loading branch information
jabdoa2 committed Dec 26, 2017
1 parent c156cd3 commit 20a5237
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 2 deletions.
6 changes: 5 additions & 1 deletion mpf/config_players/event_player.py
@@ -1,5 +1,8 @@
"""Event Config Player."""
from copy import deepcopy

from mpf.core.placeholder_manager import TextTemplate

from mpf.config_players.flat_config_player import FlatConfigPlayer
from mpf.core.delays import DelayManager
from mpf.core.utility_functions import Util
Expand Down Expand Up @@ -36,7 +39,8 @@ def play(self, settings, context, calling_context, priority=0, **kwargs):
self._post_event(event, s)

def _post_event(self, event, s):
self.machine.events.post(event, **s)
event_name_placeholder = TextTemplate(self.machine, event.replace(".", "|"))
self.machine.events.post(event_name_placeholder.evaluate(), **s)

def get_list_config(self, value):
"""Parse list."""
Expand Down
20 changes: 19 additions & 1 deletion mpf/core/placeholder_manager.py
Expand Up @@ -129,6 +129,21 @@ def evaluate_and_subscribe(self, parameters) -> Tuple[int, asyncio.Future]:
return int(result), subscriptions


class StringTemplate(BaseTemplate):

"""String template."""

def evaluate(self, parameters, fail_on_missing_params=False):
"""Evaluate template to string."""
try:
result = self.placeholder_manager.evaluate_template(self.template, parameters)
except ValueError:
if fail_on_missing_params:
raise
return self.default_value
return str(result)


class NativeTypeTemplate:

"""Native type template which encapsulates an int/float/bool."""
Expand Down Expand Up @@ -156,7 +171,6 @@ class TextTemplate:
"""Legacy text placeholder."""

var_finder = re.compile("(?<=\\()[a-zA-Z_0-9|]+(?=\\))")
string_finder = re.compile("(?<=\\$)[a-zA-Z_0-9]+")

def __init__(self, machine: "MachineController", text: str) -> None:
"""Initialise placeholder."""
Expand Down Expand Up @@ -582,6 +596,10 @@ def build_bool_template(self, template_str, default_value=False):
return NativeTypeTemplate(template_str, self.machine)
return BoolTemplate(self._parse_template(template_str), self, default_value)

def build_string_template(self, template_str, default_value=""):
"""Build a string template from a string."""
return StringTemplate(self._parse_template(template_str), self, default_value)

def get_global_parameters(self, name):
"""Return global params."""
raise NotImplementedError()
Expand Down
Expand Up @@ -29,6 +29,8 @@ event_player:
test_time_delay2: td2|1.5s
test_conditional_mode{mode.mode1.active}: mode1_active
test_conditional_mode{not mode.mode1.active}: mode1_not_active
play_placeholder_event:
- my_event_(machine.test)_123

shows:
test_event_show:
Expand Down
14 changes: 14 additions & 0 deletions mpf/tests/test_EventPlayer.py
Expand Up @@ -135,3 +135,17 @@ def test_mode_condition(self):

self.assertEventCalled('mode1_active')
self.assertEventNotCalled('mode1_not_active')

def test_event_placeholder(self):
self.mock_event('my_event__123')
self.mock_event('my_event_hello_world_123')

self.post_event("play_placeholder_event")
self.assertEventCalled("my_event__123")
self.mock_event('my_event__123')
self.assertEventNotCalled("my_event_hello_world_123")

self.machine.set_machine_var("test", "hello_world")
self.post_event("play_placeholder_event")
self.assertEventNotCalled("my_event__123")
self.assertEventCalled("my_event_hello_world_123")

0 comments on commit 20a5237

Please sign in to comment.