)]}'
{"doc/source/inputs_and_outputs.rst":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"b2eb66a4e274343a760c2f45565ab3309c66001f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Task \u0026 Flow Inputs and Outputs"},{"line_number":13,"context_line":"------------------------------"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"A task accept inputs via task arguments and provides outputs via task results (see arguments and results for more details). This the standard and recommended way to pass data from one task to another. Of course not every task argument needs to be provided to some other task of a flow, and not every task result should be consumed by every task."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If some value is required by one or more tasks of a flow, but is not provided by any task, it is considered to be flow input, and MUST be put into the storage before the flow is run. A set of names required by a flow can be retrieved via that flows requires property. These names can be used to determine what names may be applicable for placing in storage ahead of time and which names are not applicable."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F%2Bg%2Fc%3D","line":15,"updated":"2014-03-26 09:06:43.000000000","message":"What about making `arguments and results` a link?","commit_id":"1aa5f62696417f1703a114b9c46055e364175a79"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"b2eb66a4e274343a760c2f45565ab3309c66001f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   \u003e\u003e\u003e flow.requires"},{"line_number":34,"context_line":"   set([\u0027a\u0027])"},{"line_number":35,"context_line":"   \u003e\u003e\u003e flow.provides"},{"line_number":36,"context_line":"   set([\u0027c\u0027, \u0027b\u0027, \u0027d\u0027])"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"As you can see, this flow does not require b, as it is provided by the fist task."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F%2Bg%2FE%3D","line":36,"updated":"2014-03-26 09:06:43.000000000","message":"As this example is tested with doctest, it\u0027s better to print sorted(flow.provides).","commit_id":"1aa5f62696417f1703a114b9c46055e364175a79"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"b2eb66a4e274343a760c2f45565ab3309c66001f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"   woof"},{"line_number":105,"context_line":"   {\u0027meow\u0027: \u0027meow\u0027, \u0027woof\u0027: \u0027woof\u0027, \u0027dog\u0027: \u0027dog\u0027}"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"**Note:** you can also directly interact with the engine storage layer to add additional values although you must use the load method instead."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"   \u003e\u003e\u003e flo \u003d lf.Flow(\"cat-dog\")"},{"line_number":110,"context_line":"   \u003e\u003e\u003e flo.add(CatTalk(), DogTalk(provides\u003d\"dog\"))"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F%2Bg%2BU%3D","line":107,"updated":"2014-03-26 09:06:43.000000000","message":"Suggestion: covert this to .. note:: directive","commit_id":"1aa5f62696417f1703a114b9c46055e364175a79"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"b2eb66a4e274343a760c2f45565ab3309c66001f","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"As you can see from examples above, run method returns all flow outputs in a dict. This same data can be fetched via fetch_all method of the storage, or in a more precise manner by using fetch method."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"**For example:**"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"   \u003e\u003e\u003e eng \u003d engines.load(flo, store\u003d{\u0027meow\u0027: \u0027meow\u0027, \u0027woof\u0027: \u0027woof\u0027})"},{"line_number":125,"context_line":"   \u003e\u003e\u003e eng.run()"}],"source_content_type":"text/x-rst","patch_set":1,"id":"AAAAWH%2F%2Bg%2BA%3D","line":122,"updated":"2014-03-26 09:06:43.000000000","message":"Emphasis looks not so nice in sphinx-generated docs. I also suggest to add second colon.","commit_id":"1aa5f62696417f1703a114b9c46055e364175a79"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"baa626ba8539418f4de05f047065915f7b8c444a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"As you can see, this flow does not require b, as it is provided by the fist task."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":".. note::"},{"line_number":40,"context_line":"   There is no difference between processing of Task and Retry inputs and otputs."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"-------------------------"},{"line_number":43,"context_line":"Engine Inputs and Outputs"}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAAWH%2F%2BXGk%3D","line":40,"updated":"2014-03-27 11:44:23.000000000","message":"outputs?","commit_id":"0ab633e390e7dcea0a9ab3634389600dfa85ab91"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"6f081e7faf04f04976e809aff9a63a3f0c833d93","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"   \u003e\u003e\u003e from taskflow import task"},{"line_number":68,"context_line":"   \u003e\u003e\u003e from taskflow import engines"},{"line_number":69,"context_line":"   \u003e\u003e\u003e from taskflow.patterns import linear_flow as lf"},{"line_number":70,"context_line":"   \u003e\u003e\u003e"},{"line_number":71,"context_line":"   \u003e\u003e\u003e class CatTalk(task.Task):"},{"line_number":72,"context_line":"   ...   def execute(self, meow):"}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAWH%2F%2BWio%3D","line":69,"updated":"2014-03-27 13:07:56.000000000","message":"I think you can safely remove these imports without loosing readability and correctness.","commit_id":"cc69221f1593910c119675a7cebd079df6305a58"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"6f081e7faf04f04976e809aff9a63a3f0c833d93","unresolved":false,"context_lines":[{"line_number":89,"context_line":"     File \"/usr/lib/python2.6/site-packages/taskflow/utils/lock_utils.py\", line 51, in wrapper"},{"line_number":90,"context_line":"       return f(*args, **kwargs)"},{"line_number":91,"context_line":"     File \"/usr/lib/python2.6/site-packages/taskflow/engines/action_engine/engine.py\", line 104, in run"},{"line_number":92,"context_line":"       raise exc.MissingDependencies(self._flow, sorted(missing))"},{"line_number":93,"context_line":"   taskflow.exceptions.MissingDependencies: taskflow.patterns.linear_flow.Flow: cat-dog;"},{"line_number":94,"context_line":"   2 requires [\u0027meow\u0027, \u0027woof\u0027] but no other entity produces said requirements"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"AAAAWH%2F%2BWg0%3D","line":92,"updated":"2014-03-27 13:07:56.000000000","message":"What bout replacing traceback with \u0027...\u0027? \n\n\u003c\u003cBest practice is to omit the traceback stack, unless it adds significant documentation value to the example.\u003e\u003e(http://docs.python.org/2/library/doctest.html#what-about-exceptions)","commit_id":"cc69221f1593910c119675a7cebd079df6305a58"}]}
