)]}'
{"mistral_lib/actions/__init__.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from mistral_lib.actions.base import ActionDescriptor"},{"line_number":18,"context_line":"from mistral_lib.actions.base import ActionProvider"},{"line_number":19,"context_line":"from mistral_lib.actions.types import Result"},{"line_number":20,"context_line":"from mistral_lib.actions.providers.python import PythonActionDescriptor"},{"line_number":21,"context_line":"from mistral_lib.actions.providers.composite import CompositeActionProvider"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"__all__ \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_3ca8fe75","line":20,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H306: imports not in alphabetical order (mistral_lib.actions.types.result, mistral_lib.actions.providers.python.pythonactiondescriptor)","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from mistral_lib.actions.base import ActionProvider"},{"line_number":19,"context_line":"from mistral_lib.actions.types import Result"},{"line_number":20,"context_line":"from mistral_lib.actions.providers.python import PythonActionDescriptor"},{"line_number":21,"context_line":"from mistral_lib.actions.providers.composite import CompositeActionProvider"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"__all__ \u003d ["},{"line_number":24,"context_line":"    \u0027Action\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_9cb66adc","line":21,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H306: imports not in alphabetical order (mistral_lib.actions.providers.python.pythonactiondescriptor, mistral_lib.actions.providers.composite.compositeactionprovider)","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"}],"mistral_lib/actions/base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1e8aec47d2788423f9f761f0ed58921e5d23180e","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        pass"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    @abc.abstractmethod"},{"line_number":208,"context_line":"    def find_all(self, namespace\u003dNone, sort_fields\u003dNone, sort_dirs\u003dNone, **filters):"},{"line_number":209,"context_line":"        \"\"\"Finds all action descriptors for this provider."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        :param namespace: Action namespace."}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_25224702","line":208,"updated":"2020-08-20 04:40:40.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"a8e73ecf6fa6a4a813e75142a1888cf4a6043523"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @property"},{"line_number":108,"context_line":"    @abc.abstractmethod"},{"line_number":109,"context_line":"    def input_string(self):"},{"line_number":110,"context_line":"        \"\"\"Comma-separated string with input parameter names."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        Each parameter name can be either just a name or a string"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_689d6a65","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":20},"updated":"2020-09-02 08:16:56.000000000","message":"simply: inputs? How does one define a string parameter with spaces? How can we define a Bool parameter?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @property"},{"line_number":108,"context_line":"    @abc.abstractmethod"},{"line_number":109,"context_line":"    def input_string(self):"},{"line_number":110,"context_line":"        \"\"\"Comma-separated string with input parameter names."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        Each parameter name can be either just a name or a string"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a99db20b","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":20},"in_reply_to":"9f560f44_689d6a65","updated":"2020-09-03 08:43:31.000000000","message":"This is basically a reflection of what we already have. Now if we call CLI to get information about an action we\u0027ll see its parameters as a string \"a, b, c\u003d123\" that describes what the action takes and what the default values are. I would avoid making it more complex for now like defining parameter types etc. May be some time in the future.\n\nAs far as naming, may be we need to somehow correlate it with \"params\". Params are basically the actual values for \"input_string\". I\u0027ll try to make it better.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def scope(self):"},{"line_number":142,"context_line":"        \"\"\"The scope of the action within a project (tenant)."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        It makes sense only of the \"project_id\" property is not None."},{"line_number":145,"context_line":"        It should be assigned with the \"public\" value if the action"},{"line_number":146,"context_line":"        is available in all projects and \"private\" if it\u0027s accessible"},{"line_number":147,"context_line":"        only by users of the specified project."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_28b0928b","line":144,"range":{"start_line":144,"start_character":28,"end_line":144,"end_character":30},"updated":"2020-09-02 08:16:56.000000000","message":"if","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def scope(self):"},{"line_number":142,"context_line":"        \"\"\"The scope of the action within a project (tenant)."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        It makes sense only of the \"project_id\" property is not None."},{"line_number":145,"context_line":"        It should be assigned with the \"public\" value if the action"},{"line_number":146,"context_line":"        is available in all projects and \"private\" if it\u0027s accessible"},{"line_number":147,"context_line":"        only by users of the specified project."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a9b492f3","line":144,"range":{"start_line":144,"start_character":28,"end_line":144,"end_character":30},"in_reply_to":"9f560f44_28b0928b","updated":"2020-09-03 08:43:31.000000000","message":"Done","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\"The scope of the action within a project (tenant)."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        It makes sense only of the \"project_id\" property is not None."},{"line_number":145,"context_line":"        It should be assigned with the \"public\" value if the action"},{"line_number":146,"context_line":"        is available in all projects and \"private\" if it\u0027s accessible"},{"line_number":147,"context_line":"        only by users of the specified project."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        NOTE: Not all actions have to support projects(tenants)."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a8614214","line":146,"range":{"start_line":145,"start_character":39,"end_line":146,"end_character":50},"updated":"2020-09-02 08:16:56.000000000","message":"why not make an enum for this?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\"The scope of the action within a project (tenant)."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        It makes sense only of the \"project_id\" property is not None."},{"line_number":145,"context_line":"        It should be assigned with the \"public\" value if the action"},{"line_number":146,"context_line":"        is available in all projects and \"private\" if it\u0027s accessible"},{"line_number":147,"context_line":"        only by users of the specified project."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        NOTE: Not all actions have to support projects(tenants)."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_49bfb65f","line":146,"range":{"start_line":145,"start_character":39,"end_line":146,"end_character":50},"in_reply_to":"9f560f44_a8614214","updated":"2020-09-03 08:43:31.000000000","message":":)","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @property"},{"line_number":154,"context_line":"    @abc.abstractmethod"},{"line_number":155,"context_line":"    def action_class_string(self):"},{"line_number":156,"context_line":"        \"\"\"String representation of an action Python class."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        Can be None in case if the action is dynamically generated with"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_e8821a00","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":27},"updated":"2020-09-02 08:16:56.000000000","message":"let\u0027s call it action_class_name?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @property"},{"line_number":154,"context_line":"    @abc.abstractmethod"},{"line_number":155,"context_line":"    def action_class_string(self):"},{"line_number":156,"context_line":"        \"\"\"String representation of an action Python class."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        Can be None in case if the action is dynamically generated with"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_89d26ed0","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":27},"in_reply_to":"9f560f44_e8821a00","updated":"2020-09-03 08:43:31.000000000","message":"OK","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    @property"},{"line_number":154,"context_line":"    @abc.abstractmethod"},{"line_number":155,"context_line":"    def action_class_string(self):"},{"line_number":156,"context_line":"        \"\"\"String representation of an action Python class."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        Can be None in case if the action is dynamically generated with"},{"line_number":159,"context_line":"        some kind of wrapper."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a88dc22b","line":156,"range":{"start_line":156,"start_character":36,"end_line":156,"end_character":45},"updated":"2020-09-02 08:16:56.000000000","message":"the Python class of the action. It would be good to add what interface the action has to implement.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @property"},{"line_number":164,"context_line":"    @abc.abstractmethod"},{"line_number":165,"context_line":"    def action_class_attributes(self):"},{"line_number":166,"context_line":"        \"\"\"The attributes of the action Python class, if relevant."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        If the action has a static Python class associated with it"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_68abaa74","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":30},"updated":"2020-09-02 08:16:56.000000000","message":"I don\u0027t clearly understand this","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @property"},{"line_number":164,"context_line":"    @abc.abstractmethod"},{"line_number":165,"context_line":"    def action_class_attributes(self):"},{"line_number":166,"context_line":"        \"\"\"The attributes of the action Python class, if relevant."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        If the action has a static Python class associated with it"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_09f77e5b","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":30},"in_reply_to":"9f560f44_68abaa74","updated":"2020-09-03 08:43:31.000000000","message":"Yep, it\u0027s a bit weird, I know. Basically, this for dynamic class generation. In our implementation of OpenStack actions we use same classes many times for different actions, but some of the class attributes are redefined for every action. We just create a new type for every action based on the known class with the call type(base_cls.__name__, (base_cls,), attributes) where attributes are used for storing fields like endpoint url and similar. I\u0027ll try to come up with a better docstring.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @abc.abstractmethod"},{"line_number":189,"context_line":"    def validate(self, input_dict):"},{"line_number":190,"context_line":"        \"\"\"Validate action parameters."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        :param input_dict: Action parameters as a dictionary where keys"},{"line_number":193,"context_line":"            are parameter names and values are parameter values."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_08382e39","line":190,"range":{"start_line":190,"start_character":11,"end_line":190,"end_character":38},"updated":"2020-09-02 08:16:56.000000000","message":"would be good to add a note that this is just a preliminary check and does not ensure the correct execution of the task. Maybe calling it check_params?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @abc.abstractmethod"},{"line_number":189,"context_line":"    def validate(self, input_dict):"},{"line_number":190,"context_line":"        \"\"\"Validate action parameters."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        :param input_dict: Action parameters as a dictionary where keys"},{"line_number":193,"context_line":"            are parameter names and values are parameter values."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a9b65289","line":190,"range":{"start_line":190,"start_character":11,"end_line":190,"end_character":38},"in_reply_to":"9f560f44_08382e39","updated":"2020-09-03 08:43:31.000000000","message":"Yeah, makes sense.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @abc.abstractmethod"},{"line_number":200,"context_line":"    def convert_result(self, result):"},{"line_number":201,"context_line":"        \"\"\"Converts the given action result."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        A certain action implementation may need to do an additional"},{"line_number":204,"context_line":"        conversion of the action result by its descriptor. This approach"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_6820caf8","line":201,"range":{"start_line":201,"start_character":11,"end_line":201,"end_character":44},"updated":"2020-09-02 08:16:56.000000000","message":"I\u0027m not sure what it converts to what. Is this for Mistral to interpret the result the other direction?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @abc.abstractmethod"},{"line_number":200,"context_line":"    def convert_result(self, result):"},{"line_number":201,"context_line":"        \"\"\"Converts the given action result."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        A certain action implementation may need to do an additional"},{"line_number":204,"context_line":"        conversion of the action result by its descriptor. This approach"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_494df697","line":201,"range":{"start_line":201,"start_character":11,"end_line":201,"end_character":44},"in_reply_to":"9f560f44_6820caf8","updated":"2020-09-03 08:43:31.000000000","message":"It\u0027s basically to give a chance for do post conversion for async actions. For async actions the result gets delivered by a 3rd party but we still may want to do some post-run transformation. Consider an ad-hoc action. It has the section \"output\" that can apply some transformation for the result of the base action, which is delivered by an external system (or human). So once it\u0027s in the system we will call this method and do what\u0027s needed.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    def name(self):"},{"line_number":233,"context_line":"        \"\"\"Gets the name of the action provider."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        Different action providers can use the name differently."},{"line_number":236,"context_line":"        Some may completely ignore it, others may use it for searching"},{"line_number":237,"context_line":"        actions. If an implementation chooses the second way it will"},{"line_number":238,"context_line":"        mean that names of its actions will be dynamic. I.e., full action"},{"line_number":239,"context_line":"        names will somehow contain the name of the action provider (e.g.,"},{"line_number":240,"context_line":"        suffix or prefix)."},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        return self._name"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_a8930200","line":240,"range":{"start_line":235,"start_character":8,"end_line":240,"end_character":26},"updated":"2020-09-02 08:16:56.000000000","message":"I think it would be better if this was standardized. I like the current quasi scheme with \"std.\" We can also make \"openstack.heat.someaction\" Do we really see the need for this level of flexibility?","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    def name(self):"},{"line_number":233,"context_line":"        \"\"\"Gets the name of the action provider."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        Different action providers can use the name differently."},{"line_number":236,"context_line":"        Some may completely ignore it, others may use it for searching"},{"line_number":237,"context_line":"        actions. If an implementation chooses the second way it will"},{"line_number":238,"context_line":"        mean that names of its actions will be dynamic. I.e., full action"},{"line_number":239,"context_line":"        names will somehow contain the name of the action provider (e.g.,"},{"line_number":240,"context_line":"        suffix or prefix)."},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        return self._name"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_243429de","line":240,"range":{"start_line":235,"start_character":8,"end_line":240,"end_character":26},"in_reply_to":"9f560f44_a8930200","updated":"2020-09-03 08:43:31.000000000","message":"Aah, it\u0027s declared this way because I tried to imagine how different providers could work and I realised that on one hand we need to have this backwards compatibility around std.xxx actions and all other actions named something like cbnd.xxx or cbam.xxx delivered in the old way via the entry point \"mistral.actions\". I found it very convenient to have just one action provider responsible for the legacy way of delivering actions via the entry point. So it means that in this case one provider will be responsible for more than one quasi namespace like \"std\" or something else. On the other hand I want to give a chance to other implementations to use it in a more tricky way so that, for example, we could change a namespace for all the actions of a certain provider just by changing one string in setup.cfg (the left part of the string \"foobar \u003d my_project.my_cool_action_provider\").","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        \"\"\"Finds all action descriptors for this provider."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        :param namespace: Optional. Action namespace."},{"line_number":261,"context_line":"        :param limit: Optional. Maximum number of action descriptors to"},{"line_number":262,"context_line":"            return in a single result."},{"line_number":263,"context_line":"        :param sort_fields: Optional. A list of action descriptor fields"},{"line_number":264,"context_line":"            that define sorting of the result set."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_6891eaf1","line":261,"range":{"start_line":261,"start_character":30,"end_line":261,"end_character":32},"updated":"2020-09-02 08:16:56.000000000","message":"positive integer or None","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        \"\"\"Finds all action descriptors for this provider."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        :param namespace: Optional. Action namespace."},{"line_number":261,"context_line":"        :param limit: Optional. Maximum number of action descriptors to"},{"line_number":262,"context_line":"            return in a single result."},{"line_number":263,"context_line":"        :param sort_fields: Optional. A list of action descriptor fields"},{"line_number":264,"context_line":"            that define sorting of the result set."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_6482a154","line":261,"range":{"start_line":261,"start_character":30,"end_line":261,"end_character":32},"in_reply_to":"9f560f44_6891eaf1","updated":"2020-09-03 08:43:31.000000000","message":"OK","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"64ed215bf1ca74c865a91978f0fe943224ec000c","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            that define sorting of the result set."},{"line_number":265,"context_line":"        :param sort_dirs: Optional. A list of sorting orders (\"asc\" or \"desc\")"},{"line_number":266,"context_line":"            in addition to the \"sort_fields\" argument."},{"line_number":267,"context_line":"        :param filters: Optional. Key-value pairs describing AND-joined"},{"line_number":268,"context_line":"            filters."},{"line_number":269,"context_line":"        :return: List of ActionDescriptor instances."},{"line_number":270,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_081e6e73","line":267,"range":{"start_line":267,"start_character":34,"end_line":267,"end_character":43},"updated":"2020-09-02 08:16:56.000000000","message":"to be honest, I never understood why kwargs in this case was better than having a simple \"filters\u003d\" dict parameter. Why it is so desirable to mix the parameters? I know, one can simply pass filters\u003d but still.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"b7139d20a8b5df7405831e3b4eff9440fce81eb3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            that define sorting of the result set."},{"line_number":265,"context_line":"        :param sort_dirs: Optional. A list of sorting orders (\"asc\" or \"desc\")"},{"line_number":266,"context_line":"            in addition to the \"sort_fields\" argument."},{"line_number":267,"context_line":"        :param filters: Optional. Key-value pairs describing AND-joined"},{"line_number":268,"context_line":"            filters."},{"line_number":269,"context_line":"        :return: List of ActionDescriptor instances."},{"line_number":270,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_e4da3177","line":267,"range":{"start_line":267,"start_character":34,"end_line":267,"end_character":43},"in_reply_to":"9f560f44_081e6e73","updated":"2020-09-03 08:43:31.000000000","message":"You know, I actually agree with you, 100%. I\u0027ll change this. I did it kind of automatically similar to what we have in DB API and REST API layers.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0fe4b58793f243ee3923013895737f89ffa3962b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # has to be sent to a remote executor."},{"line_number":127,"context_line":"        action \u003d cls.__new__(cls)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        for k,v in entity_dict[\u0027data\u0027].items():"},{"line_number":130,"context_line":"            setattr(action, k, v)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return action"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_5fd00454","line":129,"updated":"2020-09-03 09:30:16.000000000","message":"pep8: E231 missing whitespace after \u0027,\u0027","commit_id":"6dd43962294c097845e14be46a19ebbb464ccb46"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"61660d64b3eb3df771d4a0f959da0c61538f10ce","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            # to create a dynamic class."},{"line_number":113,"context_line":"            cls \u003d type(cls.__name__, (cls,), cls_attrs)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # NOTE(rakhmerov): We use this hacky was of instantiating"},{"line_number":116,"context_line":"        # the action here because we can\u0027t use normal __init__(),"},{"line_number":117,"context_line":"        # we don\u0027t know the parameters. And even if we find out"},{"line_number":118,"context_line":"        # what they are the real internal state of the object is"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_7fb348ea","line":115,"range":{"start_line":115,"start_character":47,"end_line":115,"end_character":48},"updated":"2020-09-03 09:59:34.000000000","message":"way","commit_id":"6340a5d35e465a218e0b4dc2aa1f4e7b5ee27697"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"61660d64b3eb3df771d4a0f959da0c61538f10ce","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    @property"},{"line_number":166,"context_line":"    @abc.abstractmethod"},{"line_number":167,"context_line":"    def params_spec(self):"},{"line_number":168,"context_line":"        \"\"\"Comma-separated string with input parameter names."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        Each parameter name can be either just a name or a string"},{"line_number":171,"context_line":"        \"param\u003dval\" where \"param\" is the name of the parameter"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_ff00f804","line":168,"range":{"start_line":168,"start_character":11,"end_line":168,"end_character":61},"updated":"2020-09-03 09:59:34.000000000","message":"Still would be great to have a complete definition of how it works and what types of data are supported.","commit_id":"6340a5d35e465a218e0b4dc2aa1f4e7b5ee27697"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"61660d64b3eb3df771d4a0f959da0c61538f10ce","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @abc.abstractmethod"},{"line_number":264,"context_line":"    def convert_result(self, result):"},{"line_number":265,"context_line":"        \"\"\"Converts the given action result."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        A certain action implementation may need to do an additional"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_3fc8b01f","line":264,"range":{"start_line":264,"start_character":8,"end_line":264,"end_character":22},"updated":"2020-09-03 09:59:34.000000000","message":"maybe post_process_result?\ndoes this run only on async tasks? in that case post_process_async_result could be even better.","commit_id":"6340a5d35e465a218e0b4dc2aa1f4e7b5ee27697"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"61660d64b3eb3df771d4a0f959da0c61538f10ce","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        A certain action implementation may need to do an additional"},{"line_number":268,"context_line":"        conversion of the action result by its descriptor. This approach"},{"line_number":269,"context_line":"        allows to implement wrapper actions running in the asynchronously"},{"line_number":270,"context_line":"        because in such cases, the initial action result depends on a 3rd"},{"line_number":271,"context_line":"        party that\u0027s responsible for delivering it to Mistral. But when"},{"line_number":272,"context_line":"        it comes to Mistral we still have a chance to apply needed"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_9fcf3c28","line":269,"range":{"start_line":269,"start_character":52,"end_line":269,"end_character":58},"updated":"2020-09-03 09:59:34.000000000","message":"delete","commit_id":"6340a5d35e465a218e0b4dc2aa1f4e7b5ee27697"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"61660d64b3eb3df771d4a0f959da0c61538f10ce","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            that define sorting of the result set."},{"line_number":326,"context_line":"        :param sort_dirs: Optional. A list of sorting orders (\"asc\" or \"desc\")"},{"line_number":327,"context_line":"            in addition to the \"sort_fields\" argument."},{"line_number":328,"context_line":"        :param filters: Optional. Key-value pairs describing AND-joined"},{"line_number":329,"context_line":"            filters."},{"line_number":330,"context_line":"        :return: List of ActionDescriptor instances."},{"line_number":331,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_5f2924f0","line":328,"range":{"start_line":328,"start_character":34,"end_line":328,"end_character":71},"updated":"2020-09-03 09:59:34.000000000","message":"this needs to be a dict now","commit_id":"6340a5d35e465a218e0b4dc2aa1f4e7b5ee27697"}],"mistral_lib/actions/providers/base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_dcb0e2e0","line":49,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_bcb52ed0","line":49,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_1cca5a4e","line":50,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_fcc68649","line":50,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, name, cache_size\u003d1000):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_5cc4d240","line":51,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class ActionProviderBase(actions.ActionProvider, abc.ABC):"},{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, name, cache_size\u003d1000):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_3cc11e30","line":51,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, name, cache_size\u003d1000):"},{"line_number":55,"context_line":"        super().__init__(name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_9cdb0a20","line":52,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \"\"\""},{"line_number":50,"context_line":"    Convenience base class for action providers that implements the most"},{"line_number":51,"context_line":"    common aspects."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, name, cache_size\u003d1000):"},{"line_number":55,"context_line":"        super().__init__(name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_7ce0b6cd","line":52,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"},{"author":{"_account_id":30755,"name":"ali","email":"ali.abdelal@nokia.com","username":"abdelal"},"change_message_id":"0a0e6fad0d4e111256e7531bb6f2db13ebca9dd3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            actual_params"},{"line_number":99,"context_line":"        )"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if missing or unexpected:"},{"line_number":102,"context_line":"            msg \u003d \u0027Invalid input [name\u003d%s, class\u003d%s\u0027"},{"line_number":103,"context_line":"            msg_props \u003d [self.name, self.action_class_string]"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            if missing:"},{"line_number":106,"context_line":"                msg +\u003d \u0027, missing\u003d%s\u0027"},{"line_number":107,"context_line":"                msg_props.append(missing)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            if unexpected:"},{"line_number":110,"context_line":"                msg +\u003d \u0027, unexpected\u003d%s\u0027"},{"line_number":111,"context_line":"                msg_props.append(unexpected)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            msg +\u003d \u0027]\u0027"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            raise exc.ActionException(msg % tuple(msg_props))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def convert_result(self, result):"},{"line_number":118,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_c8e8f6b4","line":115,"range":{"start_line":101,"start_character":0,"end_line":115,"end_character":61},"updated":"2020-09-02 07:25:57.000000000","message":"this could be extracted to another method, and the variables are being checking twice.","commit_id":"653c923a3ef2b673fdfa2e3a0a9f5e3cdfea151b"}],"mistral_lib/actions/providers/python.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def action_class_attributes(self):"},{"line_number":50,"context_line":"        return self._action_cls_attrs"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_7cbb96c3","line":52,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: W391 blank line at end of file","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"}],"mistral_lib/tests/actions/test_action_providers.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f42e7b7d7bec631b2a4e9e6d3aa49f304fcbdf0f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from mistral_lib.actions import action_providers"},{"line_number":14,"context_line":"from mistral_lib.tests import base as tests_base"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_dce582de","line":13,"updated":"2020-08-13 08:39:06.000000000","message":"pep8: F401 \u0027mistral_lib.actions.action_providers\u0027 imported but unused","commit_id":"bc7097a350c9b5c3a7e943e031933810847aacdf"}]}
