)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"436c5f9aaa11edc3e2ce169962152d695de616b0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In order for a user to know if the task execution is"},{"line_number":10,"context_line":"of type workflow execution or action execution,"},{"line_number":11,"context_line":"the type should be returned in the API"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9ff474797df0f9cbbddfeda3292d582dfeb2b702"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a95cdbc_8093b34e","line":12,"updated":"2016-10-06 12:34:41.000000000","message":"todo add:\nPartially implements: blueprint mistral-task-subexecutions-endpoint","commit_id":"7622a9a87f53bb200d7b1bc4ce3ad7e97c952e36"}],"mistral/db/sqlalchemy/migration/alembic_migrations/versions/020_add_type_to_task_execution.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    op.add_column("},{"line_number":35,"context_line":"        \u0027task_executions_v2\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027type\u0027, sa.String(length\u003d30), nullable\u003dTrue)"},{"line_number":37,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_bc25de5c","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":45},"updated":"2016-11-03 05:41:02.000000000","message":"I would make it even less than 30 because \"WORKFLOW\" and \"ACTION\" are much shorter. 10 or 15 would be enough.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    op.add_column("},{"line_number":35,"context_line":"        \u0027task_executions_v2\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027type\u0027, sa.String(length\u003d30), nullable\u003dTrue)"},{"line_number":37,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_89879b11","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":45},"in_reply_to":"ba5da102_bc25de5c","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"}],"mistral/db/v2/sqlalchemy/models.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(30))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_dc28d235","line":236,"range":{"start_line":236,"start_character":31,"end_line":236,"end_character":33},"updated":"2016-11-03 05:41:02.000000000","message":"Same comment about the length.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(30))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_a9161fa5","line":236,"in_reply_to":"ba5da102_883d35df","updated":"2016-11-06 20:03:11.000000000","message":"I didn\u0027t find such class under /usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/sqltypes.py\n\nI did see documentation on this in the next link, but I don\u0027t know if I should use that package:\nhttp://sqlalchemy-utils.readthedocs.io/en/latest/data_types.html\n\nCan you please elaborate?","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(30))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_c90b537c","line":236,"range":{"start_line":236,"start_character":31,"end_line":236,"end_character":33},"in_reply_to":"ba5da102_dc28d235","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"c0b17f44ffe9725d9f0283e758a9f6bd0a44e02d","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(30))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_883d35df","line":236,"in_reply_to":"ba5da102_dc28d235","updated":"2016-11-03 07:46:34.000000000","message":"It might be even better to use the sqlalchemy choicetype.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"05378dbe47b2447921f30e740f10e949b0812bc7","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(10))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_4cbbf172","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":35},"updated":"2016-11-07 14:58:14.000000000","message":"Does this information needs to be stored in the DB? From what I remember we are able to somehow tell if given task is an workflow or action execution in engine. It would be better to reuse existing fields rather than adding new one.","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":7700,"name":"Nikolay Mahotkin","email":"nikolay.makhotkin@gmail.com","username":"nmakhotkin"},"change_message_id":"bcd8f39c08ad7ad65e5759858e3b4ca217b5cec7","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(10))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_81bbf571","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":35},"in_reply_to":"9a629dbe_4cbbf172","updated":"2016-11-08 06:54:22.000000000","message":"Exactly the same I thought when I\u0027ve looked at the new field :) \nYes, I also think that better to calculate task type based on task spec (which already has this information)","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"484cd306443896e07aacd973c91cf75d761e1871","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(10))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_f3a0f592","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":35},"in_reply_to":"9a629dbe_81bbf571","updated":"2016-11-08 12:29:54.000000000","message":"My first comment was exactly the same but then I changed my opinion after thinking about it more. The reason is as follows: I think this field carries one of the fundamental properties of tasks, and it will be used pretty often in UI and other cases. If this assumption is correct then we\u0027ll need to index it so that we could do sorting/filtering when fetching collections of tasks.\n\nI also thought that specifications may be quite large but this is not true for tasks. Only for workflows when parsing from yaml some takes seconds (yes!). So IMO it\u0027s mostly about indexing an important task property.\n\nAnyway, I\u0027m not insisting. Let\u0027s discuss it further.\n\n\nMichal, what do you think?","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"0b879ee3cad7c7c02ed0786282d0a1e227a5a264","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    # Main properties."},{"line_number":234,"context_line":"    action_spec \u003d sa.Column(st.JsonLongDictType())"},{"line_number":235,"context_line":"    unique_key \u003d sa.Column(sa.String(250), nullable\u003dTrue)"},{"line_number":236,"context_line":"    type \u003d sa.Column(sa.String(10))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    # Whether the task is fully processed (publishing and calculating commands"},{"line_number":239,"context_line":"    # after it). It allows to simplify workflow controller implementations"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_c53086eb","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":35},"in_reply_to":"9a629dbe_f3a0f592","updated":"2016-11-08 13:38:05.000000000","message":"I think we should add type as a column.\nType is an important property, just like name. The name property appears in the spec and also has a column, this was my initial reasoning for adding a type column.\n\n\nIn addition to that, from what I saw in the code, when we are returning a response for a get tasks API call, the way it works in mistral today is this: in order to create the response object we are using a common class to many different resources. The class is _MistralModelBase (/opt/stack/mistral/mistral/db/sqlalchemy/model_base.py) and it takes the DB columns and the relevant object (in our case it is Task from /opt/stack/mistral/controllers/v2/resources.py) and create the response from the DB columns that exists in the object.\n\n\nCode described in previous paragraph: \nhttps://github.com/openstack/mistral/blob/master/mistral/db/sqlalchemy/model_base.py#L66-L82\nhttps://github.com/openstack/mistral/blob/master/mistral/api/controllers/v2/task.py#L43-L47\n\n\nAs you see in this PS I didn\u0027t do anything special in the code to support the new property returned in the API response, besides adding it to the DB and to the Task class.\nAdding the type column allows us to keep the current design for returning such responses to the get API calls.\n\n\nIf someone still think we should not add a type column, please advise how to add the type property to the response.\n\n\nI would much prefer to add the type column, if it\u0027s alright with you guys.","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"}],"mistral/workbook/v2/tasks.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        return self._description"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def get_type(self):"},{"line_number":190,"context_line":"        return self._type"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def get_action_name(self):"},{"line_number":193,"context_line":"        return self._action if self._action else None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_fcd11624","side":"PARENT","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":25},"updated":"2016-11-03 05:41:02.000000000","message":"I wonder why we had this method before? Was it just there by mistake?","commit_id":"dda2cff000272b5ec2631f01eceff67e99fd6481"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        return self._description"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def get_type(self):"},{"line_number":190,"context_line":"        return self._type"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def get_action_name(self):"},{"line_number":193,"context_line":"        return self._action if self._action else None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_69aa4772","side":"PARENT","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":25},"in_reply_to":"ba5da102_fcd11624","updated":"2016-11-06 20:03:11.000000000","message":"I think it might have been some preparation step, but it is just a guess.\n\nFrom what I saw it used to be initialized to be None TaskSpec class, but not anymore.","commit_id":"dda2cff000272b5ec2631f01eceff67e99fd6481"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_1ce6ca14","line":218,"range":{"start_line":218,"start_character":20,"end_line":218,"end_character":38},"updated":"2016-11-03 05:41:02.000000000","message":"Let\u0027s make it just \"WORKFLOW\".","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_89b5dbd1","line":218,"range":{"start_line":218,"start_character":20,"end_line":218,"end_character":38},"in_reply_to":"ba5da102_1ce6ca14","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_9cc01a52","line":219,"range":{"start_line":219,"start_character":8,"end_line":219,"end_character":12},"updated":"2016-11-03 05:41:02.000000000","message":"Soft: \u0027else\u0027 is not necessary here.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_a9ba9fbe","line":219,"range":{"start_line":219,"start_character":8,"end_line":219,"end_character":12},"in_reply_to":"ba5da102_9cc01a52","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"class DirectWorkflowTaskSpec(TaskSpec):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_5cecc2f2","line":220,"range":{"start_line":220,"start_character":20,"end_line":220,"end_character":36},"updated":"2016-11-03 05:41:02.000000000","message":"Let\u0027s make it just \"ACTION\".","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW_EXECUTION\u0027"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            return \u0027ACTION_EXECUTION\u0027"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"class DirectWorkflowTaskSpec(TaskSpec):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_c9afd37b","line":220,"range":{"start_line":220,"start_character":20,"end_line":220,"end_character":36},"in_reply_to":"ba5da102_5cecc2f2","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"05378dbe47b2447921f30e740f10e949b0812bc7","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def get_description(self):"},{"line_number":187,"context_line":"        return self._description"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def get_type(self):"},{"line_number":190,"context_line":"        return self._type"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def get_action_name(self):"},{"line_number":193,"context_line":"        return self._action if self._action else None"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_4faa03d6","side":"PARENT","line":190,"range":{"start_line":189,"start_character":0,"end_line":190,"end_character":25},"updated":"2016-11-07 14:58:14.000000000","message":"Is it safe to change the return of this public method?","commit_id":"dda2cff000272b5ec2631f01eceff67e99fd6481"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"36a732e3b93225dda7b45e9a6e83761b3c5d558e","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def get_description(self):"},{"line_number":187,"context_line":"        return self._description"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def get_type(self):"},{"line_number":190,"context_line":"        return self._type"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def get_action_name(self):"},{"line_number":193,"context_line":"        return self._action if self._action else None"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_6e4077a6","side":"PARENT","line":190,"range":{"start_line":189,"start_character":0,"end_line":190,"end_character":25},"in_reply_to":"9a629dbe_28f4b7f0","updated":"2016-11-08 14:18:38.000000000","message":"BTW/FYI, I\u0027ve added a new rally test that has nested workflows and join. It will probably get merged sooner than this commit and it will make everyone more sure the code isn\u0027t broken:\nhttps://review.openstack.org/#/c/394879/","commit_id":"dda2cff000272b5ec2631f01eceff67e99fd6481"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"0b879ee3cad7c7c02ed0786282d0a1e227a5a264","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def get_description(self):"},{"line_number":187,"context_line":"        return self._description"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def get_type(self):"},{"line_number":190,"context_line":"        return self._type"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def get_action_name(self):"},{"line_number":193,"context_line":"        return self._action if self._action else None"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_28f4b7f0","side":"PARENT","line":190,"range":{"start_line":189,"start_character":0,"end_line":190,"end_character":25},"in_reply_to":"9a629dbe_4faa03d6","updated":"2016-11-08 13:38:05.000000000","message":"I thing it is OK. All the tests passed too.\nIt threw an exception before from what I see in the code, and before that it returned None.","commit_id":"dda2cff000272b5ec2631f01eceff67e99fd6481"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"05378dbe47b2447921f30e740f10e949b0812bc7","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW\u0027"},{"line_number":219,"context_line":"        return \u0027ACTION\u0027"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_6f96e795","line":218,"range":{"start_line":218,"start_character":20,"end_line":218,"end_character":28},"updated":"2016-11-07 14:58:14.000000000","message":"I\u0027d suggest to use some variables for storing the constant strings.","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"0b879ee3cad7c7c02ed0786282d0a1e227a5a264","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW\u0027"},{"line_number":219,"context_line":"        return \u0027ACTION\u0027"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_2842f710","line":218,"range":{"start_line":218,"start_character":20,"end_line":218,"end_character":28},"in_reply_to":"9a629dbe_6f96e795","updated":"2016-11-08 13:38:05.000000000","message":"Good point.","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"05378dbe47b2447921f30e740f10e949b0812bc7","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW\u0027"},{"line_number":219,"context_line":"        return \u0027ACTION\u0027"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class DirectWorkflowTaskSpec(TaskSpec):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_af90ff96","line":219,"range":{"start_line":219,"start_character":16,"end_line":219,"end_character":22},"updated":"2016-11-07 14:58:14.000000000","message":"ditto","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"0b879ee3cad7c7c02ed0786282d0a1e227a5a264","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def get_type(self):"},{"line_number":217,"context_line":"        if self._workflow:"},{"line_number":218,"context_line":"            return \u0027WORKFLOW\u0027"},{"line_number":219,"context_line":"        return \u0027ACTION\u0027"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class DirectWorkflowTaskSpec(TaskSpec):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_48456b15","line":219,"range":{"start_line":219,"start_character":16,"end_line":219,"end_character":22},"in_reply_to":"9a629dbe_af90ff96","updated":"2016-11-08 13:38:05.000000000","message":"I\u0027ll do it in the next PS.","commit_id":"855e961f4a2b850ef49b65101ce779889ecd9fcc"}],"mistral_tempest_tests/tests/api/v2/test_tasks.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def setUp(self):"},{"line_number":69,"context_line":"        super(TaskTypesTestsV2, self).setUp()"},{"line_number":70,"context_line":"        self.useFixture(lockutils.LockFixture(\u0027mistral-workflow\u0027))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        _, wb_body \u003d self.client.create_workbook(\u0027wb_with_nested_wf.yaml\u0027)"},{"line_number":73,"context_line":"        self.nested_wf_name \u003d \u0027wb_with_nested_wf.wrapping_wf\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_fc98367a","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":10},"updated":"2016-11-03 05:41:02.000000000","message":"Soft: IMO it\u0027s better to separate calls to super classes from the rest of the code with blank lines.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def setUp(self):"},{"line_number":69,"context_line":"        super(TaskTypesTestsV2, self).setUp()"},{"line_number":70,"context_line":"        self.useFixture(lockutils.LockFixture(\u0027mistral-workflow\u0027))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        _, wb_body \u003d self.client.create_workbook(\u0027wb_with_nested_wf.yaml\u0027)"},{"line_number":73,"context_line":"        self.nested_wf_name \u003d \u0027wb_with_nested_wf.wrapping_wf\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_e9b497d2","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":10},"in_reply_to":"ba5da102_fc98367a","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"822dd325b8510f9ad06301c8f3a293e478dc797f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        bt \u003d body[\u0027tasks\u0027]"},{"line_number":83,"context_line":"        ll \u003d [[v for k, v in d.iteritems() if \u0027type\u0027 in k] for d in bt]"},{"line_number":84,"context_line":"        types_list \u003d [item for sublist in ll for item in sublist]"},{"line_number":85,"context_line":"        self.assertIn("},{"line_number":86,"context_line":"            \u0027WORKFLOW_EXECUTION\u0027, types_list"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        self.assertIn("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_3c9f0e60","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":12},"updated":"2016-11-03 05:41:02.000000000","message":"Soft: IMO it\u0027s better to separate a block of assertions from preparation steps with blank lines.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        bt \u003d body[\u0027tasks\u0027]"},{"line_number":83,"context_line":"        ll \u003d [[v for k, v in d.iteritems() if \u0027type\u0027 in k] for d in bt]"},{"line_number":84,"context_line":"        types_list \u003d [item for sublist in ll for item in sublist]"},{"line_number":85,"context_line":"        self.assertIn("},{"line_number":86,"context_line":"            \u0027WORKFLOW_EXECUTION\u0027, types_list"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        self.assertIn("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_29c76f46","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":12},"in_reply_to":"ba5da102_3c9f0e60","updated":"2016-11-06 20:03:11.000000000","message":"Done","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"c0b17f44ffe9725d9f0283e758a9f6bd0a44e02d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        self.assertIn("},{"line_number":89,"context_line":"            \u0027ACTION_EXECUTION\u0027, types_list"},{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # there are 2 tasks in the workflow one of each type"},{"line_number":93,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_eb1ceb6b","line":90,"updated":"2016-11-03 07:46:34.000000000","message":"I think both of these assertIn\u0027s would fit on one line.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"},{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"25b580cb3330291731c1cc6baf5614a65163a948","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        self.assertIn("},{"line_number":89,"context_line":"            \u0027ACTION_EXECUTION\u0027, types_list"},{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # there are 2 tasks in the workflow one of each type"},{"line_number":93,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_a9e1bfd2","line":90,"in_reply_to":"ba5da102_eb1ceb6b","updated":"2016-11-06 20:03:11.000000000","message":"True, but this way you will know if the test fail, you will know by the line number where is the problem. For example, if ACTION_EXECUTION will fail, you will know not to waist time looking into WORKFLOW_EXECUTION.","commit_id":"d5414312916a61a9e58370b69e75d86b384a3874"}]}
