Skip to content

Commit

Permalink
Creates 'greet_guests' example service for the programming guide.
Browse files Browse the repository at this point in the history
  • Loading branch information
Damir Jungic committed Jan 25, 2021
1 parent d53ae75 commit 9877610
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
28 changes: 27 additions & 1 deletion firexapp/tasks/example.py
@@ -1,7 +1,11 @@
from getpass import getuser
import time

from firexkit.argument_conversion import SingleArgDecorator
from firexkit.task import FireXTask

from firexapp.engine.celery import app
from firexapp.submit.arguments import InputConverter


@app.task
Expand All @@ -22,6 +26,28 @@ def getusername():


# The @app.task() makes this normal python function a FireX Service.
@app.task()
@app.task(returns=['greeting'])
def greet(name=getuser()):
return 'Hello %s!' % name


# Setting bind=True makes the first argument received by the service 'self'. It's most commonly used to invoke
# (enqueue) other services, but provides much more functionality as outlined here:
@app.task(bind=True, returns=['guests_greeting'])
def greet_guests(self: FireXTask, guests):
greetings = []
for guest in guests:
# Create a Celery Signature, see: https://docs.celeryproject.org/en/latest/userguide/canvas.html#signatures
greet_signature = greet.s(name=guest)
# enqueue_child_and_get_results is useful when you want to block on a service invocation and receive the result
# immediately. See the details of other enqueue methods here: ____
greet_results = self.enqueue_child_and_get_results(greet_signature)
greetings.append(greet_results['greeting'])

return ' '.join(greetings)


@InputConverter.register
@SingleArgDecorator('guests')
def to_list(guests):
return guests.split(',')
18 changes: 17 additions & 1 deletion tests/integration_tests/example_flow_tests.py
Expand Up @@ -23,4 +23,20 @@ def assert_expected_firex_output(self, cmd_output, cmd_err):
logs_dir = get_log_dir_from_output(cmd_output)
completion_data = get_completion_report_data(logs_dir)

assert completion_data['completed']
assert completion_data['results']['chain_results']['greeting'] == "Hello John!"


class GreetGuestsTest(FlowTestConfiguration):

def initial_firex_options(self) -> list:
return ['submit', '--chain', "greet_guests", "--guests", "John,Mohammad"]

def assert_expected_return_code(self, ret_value):
assert_is_good_run(ret_value)

def assert_expected_firex_output(self, cmd_output, cmd_err):
assert not cmd_err, "no errors expected"

logs_dir = get_log_dir_from_output(cmd_output)
completion_data = get_completion_report_data(logs_dir)
assert completion_data['results']['chain_results']['guests_greeting'] == "Hello John! Hello Mohammad!"

0 comments on commit 9877610

Please sign in to comment.