)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"7ce5a183fb971bf2c859de1efe8af31b91743a3b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hardik \u003chardik.parekh@nectechnologies.in\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-10 16:29:06 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filtering support for actions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: Filter support for \"tag\"."},{"line_number":10,"context_line":"Currently, tag column has \"MutableList\" type."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dab17558_bc6cd508","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":29},"updated":"2016-05-11 05:01:18.000000000","message":"I know it\u0027s kind of stupid but there was a requirement that said that there shouldn\u0027t be a period at the end of first line in commit messages. Not sure if it\u0027s still true.","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: Filter support for \"tag\"."},{"line_number":10,"context_line":"Currently, tag column has \"MutableList\" type."},{"line_number":11,"context_line":"As per my investigation this data type does not supprt"},{"line_number":12,"context_line":"filtering/querying. So I think, we have to create"},{"line_number":13,"context_line":"seprate tag table for this. However, I will discuss"},{"line_number":14,"context_line":"and investigate more for this."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dab17558_6eb7783a","line":11,"range":{"start_line":11,"start_character":48,"end_line":11,"end_character":54},"updated":"2016-05-16 12:38:10.000000000","message":"Please, fix typo: supprt -\u003e support","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Currently, tag column has \"MutableList\" type."},{"line_number":11,"context_line":"As per my investigation this data type does not supprt"},{"line_number":12,"context_line":"filtering/querying. So I think, we have to create"},{"line_number":13,"context_line":"seprate tag table for this. However, I will discuss"},{"line_number":14,"context_line":"and investigate more for this."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I110c2073b82c4ffb3a1f02e152937451395a1e87"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dab17558_aed16059","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":7},"updated":"2016-05-16 12:38:10.000000000","message":"Please, fix typo: seprate -\u003e separate","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":12,"context_line":"filtering/querying. So I think, we have to create"},{"line_number":13,"context_line":"seprate tag table for this. However, I will discuss"},{"line_number":14,"context_line":"and investigate more for this."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I110c2073b82c4ffb3a1f02e152937451395a1e87"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dab17558_ee3ec889","line":15,"updated":"2016-05-16 12:38:10.000000000","message":"Also, could you please provide link to blueprint","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"799a01f1fe0472c030df1a7b79f9e0ce89dcf10e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     hardik \u003chardik.parekh@nectechnologies.in\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-04 19:32:31 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filtering support for actions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: Add more tests."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_e9635118","line":7,"range":{"start_line":7,"start_character":29,"end_line":7,"end_character":30},"updated":"2016-08-05 05:03:06.000000000","message":"I know it\u0027s a tiny thing but periods are not allowed in commit summary lines","commit_id":"ba1b436ca09697869ca90cc63bf285ce2164f0f8"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"799a01f1fe0472c030df1a7b79f9e0ce89dcf10e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"TODO: Add more tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I110c2073b82c4ffb3a1f02e152937451395a1e87"},{"line_number":12,"context_line":"Implements: bp mistral-items-filtering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bacf61ea_296a89ed","line":12,"range":{"start_line":12,"start_character":14,"end_line":12,"end_character":15},"updated":"2016-08-05 05:03:06.000000000","message":"Although the resulting link works we usually use format \"bp/\u003cbp-name\u003e\"","commit_id":"ba1b436ca09697869ca90cc63bf285ce2164f0f8"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"562c964515a0db65b38a5b0ce4510eaa28f6d228","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filtering support for actions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: Add more tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I110c2073b82c4ffb3a1f02e152937451395a1e87"},{"line_number":12,"context_line":"Implements: blueprint mistral-items-filtering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9ad45d7e_8df4385b","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":21},"updated":"2016-08-11 14:30:19.000000000","message":"It would be addressed in this or next patchset?","commit_id":"eebe77b20f7022391eb701ca1ef7a67260535fac"},{"author":{"_account_id":18238,"name":"Hardik Parekh","email":"hardik.parekh047@gmail.com","username":"hparekh"},"change_message_id":"b9de33f102a1b68e3359d32e9422acbb0e397f0a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filtering support for actions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: Add more tests."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I110c2073b82c4ffb3a1f02e152937451395a1e87"},{"line_number":12,"context_line":"Implements: blueprint mistral-items-filtering"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9ad45d7e_5673ba15","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":21},"in_reply_to":"9ad45d7e_8df4385b","updated":"2016-08-12 10:02:10.000000000","message":"Yes, I will add in another patchset","commit_id":"eebe77b20f7022391eb701ca1ef7a67260535fac"}],"mistral/api/controllers/v2/action.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"11571febc97142873a76f709938978e32946dbac","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                          Default: name."},{"line_number":187,"context_line":"        :param sort_dirs: Optional. Directions to sort corresponding to"},{"line_number":188,"context_line":"                          sort_keys, \"asc\" or \"desc\" can be choosed."},{"line_number":189,"context_line":"                          Default: asc."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        Where project_id is the same as the requester or"},{"line_number":192,"context_line":"        project_id is different but the scope is public."}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_f53e09b7","line":189,"updated":"2016-02-20 09:07:14.000000000","message":"Please, update method description according to your changes","commit_id":"c95a77b75dbb84238560a7645a27e23684b5e838"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"1787b466e73a84ca8270a68382213cbb3803b17b","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                         types.list, wtypes.text, wtypes.text, wtypes.text,"},{"line_number":175,"context_line":"                         wtypes.text)"},{"line_number":176,"context_line":"    def get_all(self, marker\u003dNone, limit\u003dNone, sort_keys\u003d\u0027name\u0027,"},{"line_number":177,"context_line":"                sort_dirs\u003d\u0027asc\u0027, created_at\u003dNone, updated_at\u003dNone,"},{"line_number":178,"context_line":"                is_system\u003dNone):"},{"line_number":179,"context_line":"        \"\"\"Return all actions."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :param marker: Optional. Pagination marker for large data sets."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_8cf093cb","line":178,"range":{"start_line":177,"start_character":32,"end_line":178,"end_character":30},"updated":"2016-04-08 09:50:48.000000000","message":"Can you explain why you chose exactly these parameters? In the spec https://review.openstack.org/#/c/269975/ we discussed it and decided that there should be just a general parameter \"filter\" that would be able to combine multiple fields and operations. But now you\u0027re adding some specific fields instead of it. I don\u0027t understand why.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"856d42381baecf4d4c90b600bf91d5377e9dc39a","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                         types.list, wtypes.text, wtypes.text, wtypes.text,"},{"line_number":175,"context_line":"                         wtypes.text)"},{"line_number":176,"context_line":"    def get_all(self, marker\u003dNone, limit\u003dNone, sort_keys\u003d\u0027name\u0027,"},{"line_number":177,"context_line":"                sort_dirs\u003d\u0027asc\u0027, created_at\u003dNone, updated_at\u003dNone,"},{"line_number":178,"context_line":"                is_system\u003dNone):"},{"line_number":179,"context_line":"        \"\"\"Return all actions."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :param marker: Optional. Pagination marker for large data sets."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_e0615313","line":178,"range":{"start_line":177,"start_character":32,"end_line":178,"end_character":30},"in_reply_to":"9a061dce_8cf093cb","updated":"2016-04-08 09:57:00.000000000","message":"Ok, I now understand why I was confused in the first place. Again, when it comes to such important functionality, be verbose when documenting it. It\u0027s impossible to understand now that values of \"created_at\" and other new fields can contain something like \"lte:some_value\". If it\u0027s too verbose to document here please use references so that readers know where to read more. Here at least we can briefly mention filter expressions.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                          sort_keys, \"asc\" or \"desc\" can be choosed."},{"line_number":191,"context_line":"                          Default: asc."},{"line_number":192,"context_line":"        :param created_at: Optional. To filter data as per created date."},{"line_number":193,"context_line":"                           it can be specified in url like \"?created_at\u003dgt:xx\""},{"line_number":194,"context_line":"                           or \"?created_at\u003dlt:xx\"."},{"line_number":195,"context_line":"        :param updated_at: Optional. To filter data as per updated date. it"},{"line_number":196,"context_line":"                           can be specified in url like \"?updated_at\u003din:xx,xx\""}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0e1fcc08","line":193,"range":{"start_line":193,"start_character":27,"end_line":193,"end_character":28},"updated":"2016-05-16 12:38:10.000000000","message":"Please, capitalize \"i\".","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        :param created_at: Optional. To filter data as per created date."},{"line_number":193,"context_line":"                           it can be specified in url like \"?created_at\u003dgt:xx\""},{"line_number":194,"context_line":"                           or \"?created_at\u003dlt:xx\"."},{"line_number":195,"context_line":"        :param updated_at: Optional. To filter data as per updated date. it"},{"line_number":196,"context_line":"                           can be specified in url like \"?updated_at\u003din:xx,xx\""},{"line_number":197,"context_line":"                           or \"?updated_at\u003dlte:xx\"."},{"line_number":198,"context_line":"        :patam is_system: Optional. To filter data as per is_system column."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0ecd0c85","line":195,"range":{"start_line":195,"start_character":73,"end_line":195,"end_character":74},"updated":"2016-05-16 12:38:10.000000000","message":"ditto","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"}],"mistral/api/controllers/v2/base.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"ecd3bd5bcfe2b399040178ff7886d75ddbcdb94c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from oslo_utils import timeutils"},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":"import wsme"},{"line_number":24,"context_line":"from wsme import types as wtypes"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Filter(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_07e4e938","line":24,"updated":"2016-01-20 09:57:30.000000000","message":"Please, check imports order regarding to https://www.python.org/dev/peps/pep-0008/#imports. I guess that \"from mistral import exceptions as exc\" has to be at the end.","commit_id":"eb3c82babedc9d1935706a60f2ca95bccf5d7139"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"ecd3bd5bcfe2b399040178ff7886d75ddbcdb94c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    value \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    type \u003d wtypes.text"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __repr__(self):"},{"line_number":46,"context_line":"        return \u0027\u003cQuery %r %r %s\u003e\u0027 % (self.field, self.value, self.type)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_872a192b","line":44,"updated":"2016-01-20 09:57:30.000000000","message":"Do we really need these blank lines (40, 42) ?","commit_id":"eb3c82babedc9d1935706a60f2ca95bccf5d7139"}],"mistral/db/v2/sqlalchemy/api.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"11571febc97142873a76f709938978e32946dbac","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                           sort_dirs\u003dNone, **kwargs):"},{"line_number":476,"context_line":"    query \u003d db_filters.filter_by_op("},{"line_number":477,"context_line":"        _secure_query(models.ActionDefinition),"},{"line_number":478,"context_line":"        models.ActionDefinition, **kwargs"},{"line_number":479,"context_line":"    )"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_d56e65c8","line":478,"updated":"2016-02-20 09:07:14.000000000","message":"Please, use following format for method call:\n\nquery \u003d db.filters.filter_by_op(\n    _secure_query(models.ActionDefinition),\n    models.ActionDefinition,\n    **kwargs\n)","commit_id":"c95a77b75dbb84238560a7645a27e23684b5e838"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"1787b466e73a84ca8270a68382213cbb3803b17b","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def get_action_definitions(limit\u003dNone, marker\u003dNone, sort_keys\u003d[\u0027name\u0027],"},{"line_number":473,"context_line":"                           sort_dirs\u003dNone, **kwargs):"},{"line_number":474,"context_line":"    query \u003d db_filters.filter_by_op("},{"line_number":475,"context_line":"        _secure_query(models.ActionDefinition),"},{"line_number":476,"context_line":"        models.ActionDefinition,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_ec382f40","line":473,"range":{"start_line":473,"start_character":43,"end_line":473,"end_character":51},"updated":"2016-04-08 09:50:48.000000000","message":"Again, I don\u0027t understand how we can specify something like \"created_at \u003c 01.01.2107\" using just **kwargs. What am I missing. I would expect to see a general \"filter_expr\" param where all should be encoded.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"856d42381baecf4d4c90b600bf91d5377e9dc39a","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def get_action_definitions(limit\u003dNone, marker\u003dNone, sort_keys\u003d[\u0027name\u0027],"},{"line_number":473,"context_line":"                           sort_dirs\u003dNone, **kwargs):"},{"line_number":474,"context_line":"    query \u003d db_filters.filter_by_op("},{"line_number":475,"context_line":"        _secure_query(models.ActionDefinition),"},{"line_number":476,"context_line":"        models.ActionDefinition,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_032451ad","line":473,"range":{"start_line":473,"start_character":43,"end_line":473,"end_character":51},"in_reply_to":"9a061dce_ec382f40","updated":"2016-04-08 09:57:00.000000000","message":"I now understand why I was confused here, too. From now on \"kwargs\" is a very bad name for this parameter because it doesn\u0027t contain just key-value pairs anymore. Now we deal with the whole new format so please pick up a good name like \"field_filters\" or something similar. It will be reflecting the meaning more precisely.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"}],"mistral/db/v2/sqlalchemy/filters.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"1787b466e73a84ca8270a68382213cbb3803b17b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def filter_by_op(query, model, **filters):"},{"line_number":19,"context_line":"    filter_dict \u003d {}"},{"line_number":20,"context_line":"    if filters is None:"},{"line_number":21,"context_line":"        filters \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_4c0b1b2c","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":16},"updated":"2016-04-08 09:50:48.000000000","message":"Please never use reduced forms in methods names except well known abbreviations. I would just call it \"add_filters\" or \"apply_filters\". It better expresses your intentions. Plural form is also important here because it reflects that there may be multiple filters added by this method.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"65c9f886f1a82134b6bc93d8c179974e0299acf4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def apply_filters(query, model, **filters):"},{"line_number":19,"context_line":"    filter_dict \u003d {}"},{"line_number":20,"context_line":"    if filters is None:"},{"line_number":21,"context_line":"        filters \u003d {}"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    for key, value in six.iteritems(filters):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_31da8379","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":23},"updated":"2016-05-27 10:39:19.000000000","message":"I\u0027m assuming that this condition should be True if no filters are provided (I mean apply_filters was called like this: apply_filters(var_a, var_b)). But in such case filters variable is already an empty dict, therefore it is not equal to None and there is no need to call \"filters \u003d {}\"","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"}],"mistral/utils/filter_utils.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":18,"context_line":"def create_filters_from_request_params(req_params):"},{"line_number":19,"context_line":"    \"\"\"Create filters from REST request parameters."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    :param req_params: REST request paramters."},{"line_number":22,"context_line":"    :return: filters dictionary."},{"line_number":23,"context_line":"    \"\"\""},{"line_number":24,"context_line":"    filters \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_4ee0b496","line":21,"range":{"start_line":21,"start_character":40,"end_line":21,"end_character":41},"updated":"2016-05-16 12:38:10.000000000","message":"\"e\" is missed.","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    :return: filter dictionary."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    if _filter is None:"},{"line_number":47,"context_line":"        _filter \u003d {}"},{"line_number":48,"context_line":"    _filter[column] \u003d {filter_type: value}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_f1ad0d85","line":46,"updated":"2016-05-16 12:38:10.000000000","message":"Why don\u0027t you to change default value for _filter from None to {}? After doing this you can delete lines 46-47, can\u0027t you?","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"65c9f886f1a82134b6bc93d8c179974e0299acf4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    :return: filter dictionary."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    if _filter is None:"},{"line_number":47,"context_line":"        _filter \u003d {}"},{"line_number":48,"context_line":"    _filter[column] \u003d {filter_type: value}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_ec2b0232","line":46,"in_reply_to":"dab17558_f1ad0d85","updated":"2016-05-27 10:39:19.000000000","message":"This cannot be done in such way due to the fact that the first time create_or_update_filter would be called, it would create an empty dict, but on every other call it will point to the same dict like this: \n\n\u003e\u003e\u003e def foo(a,b,d\u003d{}):\n...     d[a] \u003d b\n...     print(d)\n... \n\u003e\u003e\u003e foo(1,1)\n{1: 1}\n\u003e\u003e\u003e foo(2,2)\n{1: 1, 2: 2}\n\u003e\u003e\u003e \n\nMore information can be found here https://pythonconquerstheuniverse.wordpress.com/category/python-gotchas/","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d4a962f38fd18b375208dedb825290c5f6583379","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def _extract_filter_type_and_value(data):"},{"line_number":54,"context_line":"    \"\"\"Extract filter type and its value from the data."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    :param data: REST paramter value from which filter type and"},{"line_number":57,"context_line":"                 value can be get. It should be in format of"},{"line_number":58,"context_line":"                 \u0027filter_type:value\u0027."},{"line_number":59,"context_line":"    :return: filter type and value."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_11c9b159","line":56,"range":{"start_line":56,"start_character":26,"end_line":56,"end_character":27},"updated":"2016-05-16 12:38:10.000000000","message":"\"e\" is missed.","commit_id":"370fce722b65d84c0850aa8dba651ec3c33d100a"}],"mistral/utils/rest_utils.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"ecd3bd5bcfe2b399040178ff7886d75ddbcdb94c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    for f in filters:"},{"line_number":117,"context_line":"        if f.field not in fields:"},{"line_number":118,"context_line":"            raise exc.ClientSideError("},{"line_number":119,"context_line":"                \"unrecognized field in filters : %s, valid fields are: %s\""},{"line_number":120,"context_line":"                % (f.field, sorted(fields))"},{"line_number":121,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_07d8691c","line":119,"updated":"2016-01-20 09:57:30.000000000","message":"Let\u0027s capitalize \"unrecognized\"","commit_id":"eb3c82babedc9d1935706a60f2ca95bccf5d7139"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"1787b466e73a84ca8270a68382213cbb3803b17b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        )"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def create_filter(params):"},{"line_number":102,"context_line":"    filters \u003d {}"},{"line_number":103,"context_line":"    for key, value in six.iteritems(params):"},{"line_number":104,"context_line":"        if value:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_40f59fc9","line":101,"range":{"start_line":101,"start_character":4,"end_line":101,"end_character":17},"updated":"2016-04-08 09:50:48.000000000","message":"This function requires a docstring. It\u0027s not clear what is the format of function argument \"params\" and what it is in general by nature.\n\nPlease clearly separate programming concerns here: IMO there should be a well defined and documented language that DB API accepts and a number of helper methods for building proper values for DB API in upper layers. In our case this upper layer is REST API but it\u0027s not be in REST API because, for example, what if I want to use these helpers not in REST API layer? It can be work with cron triggers, unit tests or anything else. Please think about it.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"1787b466e73a84ca8270a68382213cbb3803b17b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    return filters"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def convert_param_to_filter(param):"},{"line_number":110,"context_line":"    filters \u003d {}"},{"line_number":111,"context_line":"    if param.startswith(\"in:\"):"},{"line_number":112,"context_line":"        filters[\"in\"] \u003d list(six.text_type(param[3:]).split(\",\"))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_60cd4386","line":109,"range":{"start_line":109,"start_character":4,"end_line":109,"end_character":27},"updated":"2016-04-08 09:50:48.000000000","message":"I believe rest_utils.py is not a good home for this function because it\u0027s related with a very important aspect of our public API. I would move it to a separate module like \"filter_service\" or similar.","commit_id":"4f06af256d05fe75360cac7e995c5ed3816d6e69"}],"mistral_tempest_tests/tests/api/v2/test_actions.py":[{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"562c964515a0db65b38a5b0ce4510eaa28f6d228","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":130,"context_line":"    def test_get_list_actions_equalto_filter(self):"},{"line_number":131,"context_line":"        resp, body \u003d self.client.create_action(\u0027action_v2.yaml\u0027)"},{"line_number":132,"context_line":"        self.assertEqual(201, resp.status)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_f17b0ebc","line":130,"range":{"start_line":130,"start_character":30,"end_line":130,"end_character":37},"updated":"2016-08-11 14:30:19.000000000","message":"Soft: it should be named using lower_case (equal_to vs equalto). Same applies to the rest name of methods in this file.","commit_id":"eebe77b20f7022391eb701ca1ef7a67260535fac"}]}
