)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andrey Kurilin \u003cakurilin@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-20 16:21:47 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add DictWithDeprecation class"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This class allows to deprecate keys in dict."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a8ffd7b_5ba7864f","line":7,"updated":"2015-11-24 13:55:16.000000000","message":"utils: add DictWithDeprecation class","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add DictWithDeprecation class"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This class allows to deprecate keys in dict."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I35457d5923a3e1bc57a75ca968630be90cf1e2b4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a8ffd7b_5b7ea6af","line":9,"updated":"2015-11-24 13:55:16.000000000","message":"in a dict","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"}],"rally/common/utils.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"eb47ef138e97378dc562702801bd82046ed7b9ee","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            return"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"class DictWithDeprecation(dict):"},{"line_number":481,"context_line":"    \"\"\"Dict object with helper for deprecated keys"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    Usage example:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_f7dbef1f","line":480,"updated":"2015-11-20 12:57:58.000000000","message":"This works for getter but but does not work if we set deprecated key in runtime: http://paste.openstack.org/show/479581/","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"397c5cda85aefd19bd0b5196be685a5271470111","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            return"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"class DictWithDeprecation(dict):"},{"line_number":481,"context_line":"    \"\"\"Dict object with helper for deprecated keys"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    Usage example:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_50a68154","line":480,"in_reply_to":"ba8a016a_f7dbef1f","updated":"2015-11-24 13:36:43.000000000","message":"It is a correct way. It should print warning while setting value.","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"eb47ef138e97378dc562702801bd82046ed7b9ee","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    Usage example:"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # deprecate key without alternative"},{"line_number":486,"context_line":"        some_dict \u003d DictWithDeprecated"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        In [1]: some_dict \u003d DictWithDeprecation("},{"line_number":489,"context_line":"        ...: {\"k1\": \"v1\", \"k2\": \"v2\"},"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_77405f36","line":486,"updated":"2015-11-20 12:57:58.000000000","message":"This line is probably not required (shoud be remoded).\n\nOr at least instantiation is needed: DictWithDeprecated(...)","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"397c5cda85aefd19bd0b5196be685a5271470111","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    Usage example:"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # deprecate key without alternative"},{"line_number":486,"context_line":"        some_dict \u003d DictWithDeprecated"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        In [1]: some_dict \u003d DictWithDeprecation("},{"line_number":489,"context_line":"        ...: {\"k1\": \"v1\", \"k2\": \"v2\"},"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_909f0950","line":486,"in_reply_to":"ba8a016a_77405f36","updated":"2015-11-24 13:36:43.000000000","message":"Done","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"eb47ef138e97378dc562702801bd82046ed7b9ee","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                \"key\": key,"},{"line_number":549,"context_line":"                \"release\": self.__deprecate_keys[key][\"release\"]}"},{"line_number":550,"context_line":"            if self.__deprecate_keys[key].get(\"alternative\"):"},{"line_number":551,"context_line":"                warnings.warn(\"%(msg)s Use %(alternative)s instead.\" % {"},{"line_number":552,"context_line":"                    \"msg\": msg,"},{"line_number":553,"context_line":"                    \"alternative\": self.__deprecate_keys[key][\"alternative\"]})"},{"line_number":554,"context_line":"                key \u003d self.__deprecate_keys[key][\"alternative\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_f74bef5d","line":551,"updated":"2015-11-20 12:57:58.000000000","message":"Wrap %(alternative)s with quotes","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"397c5cda85aefd19bd0b5196be685a5271470111","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                \"key\": key,"},{"line_number":549,"context_line":"                \"release\": self.__deprecate_keys[key][\"release\"]}"},{"line_number":550,"context_line":"            if self.__deprecate_keys[key].get(\"alternative\"):"},{"line_number":551,"context_line":"                warnings.warn(\"%(msg)s Use %(alternative)s instead.\" % {"},{"line_number":552,"context_line":"                    \"msg\": msg,"},{"line_number":553,"context_line":"                    \"alternative\": self.__deprecate_keys[key][\"alternative\"]})"},{"line_number":554,"context_line":"                key \u003d self.__deprecate_keys[key][\"alternative\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_90fe2937","line":551,"in_reply_to":"ba8a016a_f74bef5d","updated":"2015-11-24 13:36:43.000000000","message":"Done","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"eb47ef138e97378dc562702801bd82046ed7b9ee","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    def keys(self):"},{"line_number":575,"context_line":"        keys \u003d [key for key in self.__deprecate_keys"},{"line_number":576,"context_line":"                if \"alternative\" in self.__deprecate_keys[key]]"},{"line_number":577,"context_line":"        keys.extend(super(DictWithDeprecation, self).keys())"},{"line_number":578,"context_line":"        return keys"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_f7244fb3","line":577,"updated":"2015-11-20 12:57:58.000000000","message":"This can create duplicates in some cases:\n\nhttp://paste.openstack.org/show/479579/","commit_id":"9c1f1d24216e86ef6676cc9c6e9a65f70167fd87"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    Usage example:"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # deprecate key without alternative"},{"line_number":486,"context_line":"        In [1]: some_dict \u003d DictWithDeprecation("},{"line_number":487,"context_line":"        ...: {\"k1\": \"v1\", \"k2\": \"v2\"},"},{"line_number":488,"context_line":"        ...: deprecated_keys\u003d{\"k2\": {\"release\": \"0.1.2\"}})"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_3b588256","line":486,"updated":"2015-11-24 13:55:16.000000000","message":"Please use standard \u003e\u003e\u003e notation here from the docttests.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    Usage example:"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # deprecate key without alternative"},{"line_number":486,"context_line":"        In [1]: some_dict \u003d DictWithDeprecation("},{"line_number":487,"context_line":"        ...: {\"k1\": \"v1\", \"k2\": \"v2\"},"},{"line_number":488,"context_line":"        ...: deprecated_keys\u003d{\"k2\": {\"release\": \"0.1.2\"}})"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_ac743acf","line":486,"in_reply_to":"9a8ffd7b_3b588256","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        Out[4]: \u0027v1\u0027"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":"    __DEPRECATED_KEYS_SCHEME \u003d {"},{"line_number":507,"context_line":"        \"type\": \"object\","},{"line_number":508,"context_line":"        \"$schema\": \"http://json-schema.org/draft-04/schema\","},{"line_number":509,"context_line":"        \"patternProperties\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_bb3a32e6","line":506,"updated":"2015-11-24 13:55:16.000000000","message":"Please don\u0027t use __. Single underscore is enough IMO.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        Out[4]: \u0027v1\u0027"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":"    __DEPRECATED_KEYS_SCHEME \u003d {"},{"line_number":507,"context_line":"        \"type\": \"object\","},{"line_number":508,"context_line":"        \"$schema\": \"http://json-schema.org/draft-04/schema\","},{"line_number":509,"context_line":"        \"patternProperties\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_5169a78a","line":506,"in_reply_to":"9a8ffd7b_bb3a32e6","updated":"2015-11-24 14:24:16.000000000","message":"I want to make this class looks like real dict, so I don\u0027t to give access to this private variable","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"770f7d0db522e5a80682b976d5aaff61c2806f0f","unresolved":false,"context_lines":[{"line_number":527,"context_line":"    def __init__(self, iterable, deprecated_keys\u003dNone):"},{"line_number":528,"context_line":"        \"\"\"Init dict"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        :param iterable: Iterable object"},{"line_number":531,"context_line":"        :param deprecated_keys: Dictionary with information for deprecated"},{"line_number":532,"context_line":"            keys. Supported format:"},{"line_number":533,"context_line":"                {\"deprecated_key_name\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_8c13765c","line":530,"updated":"2015-11-24 14:09:34.000000000","message":"Iterable? This looks more like mapping.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"dcded65c8ee753a12e76b4d811a627dbf431bf53","unresolved":false,"context_lines":[{"line_number":527,"context_line":"    def __init__(self, iterable, deprecated_keys\u003dNone):"},{"line_number":528,"context_line":"        \"\"\"Init dict"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        :param iterable: Iterable object"},{"line_number":531,"context_line":"        :param deprecated_keys: Dictionary with information for deprecated"},{"line_number":532,"context_line":"            keys. Supported format:"},{"line_number":533,"context_line":"                {\"deprecated_key_name\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_cc6dfecd","line":530,"in_reply_to":"9a8ffd7b_8c13765c","updated":"2015-11-24 14:10:53.000000000","message":"Mapping is an iterable object.\n\nDict can be instantiated by the iterable of 2-tuples with (key, value).","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        :param deprecated_keys: Dictionary with information for deprecated"},{"line_number":532,"context_line":"            keys. Supported format:"},{"line_number":533,"context_line":"                {\"deprecated_key_name\": {"},{"line_number":534,"context_line":"                    \"release\": \"Rally release from which key was deprecated\","},{"line_number":535,"context_line":"                    \"alternative\": \"optional key_name, which will be used as \""},{"line_number":536,"context_line":"                                   \"alternative\"}}"},{"line_number":537,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_ce865613","line":534,"updated":"2015-11-24 13:55:16.000000000","message":"Just \"where the key\"","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        :param deprecated_keys: Dictionary with information for deprecated"},{"line_number":532,"context_line":"            keys. Supported format:"},{"line_number":533,"context_line":"                {\"deprecated_key_name\": {"},{"line_number":534,"context_line":"                    \"release\": \"Rally release from which key was deprecated\","},{"line_number":535,"context_line":"                    \"alternative\": \"optional key_name, which will be used as \""},{"line_number":536,"context_line":"                                   \"alternative\"}}"},{"line_number":537,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_d1eb57af","line":534,"in_reply_to":"9a8ffd7b_ce865613","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        if deprecated_keys:"},{"line_number":540,"context_line":"            jsonschema.validate(deprecated_keys, self.__DEPRECATED_KEYS_SCHEME)"},{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_4eefc6b0","line":542,"updated":"2015-11-24 13:55:16.000000000","message":"Please use \u0027key in self\u0027.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        if deprecated_keys:"},{"line_number":540,"context_line":"            jsonschema.validate(deprecated_keys, self.__DEPRECATED_KEYS_SCHEME)"},{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_ec5ec275","line":542,"in_reply_to":"9a8ffd7b_4eefc6b0","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3d73887ec341c639acb02b4419018b34bfaea354","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        if deprecated_keys:"},{"line_number":540,"context_line":"            jsonschema.validate(deprecated_keys, self.__DEPRECATED_KEYS_SCHEME)"},{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_5d1a1670","line":542,"in_reply_to":"9a8ffd7b_e7b49dd2","updated":"2015-11-24 14:56:27.000000000","message":"I don\u0027t understand your comment:)","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"ba473309583fd97bbfbfe686f9b8e1decb84bd4e","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        if deprecated_keys:"},{"line_number":540,"context_line":"            jsonschema.validate(deprecated_keys, self.__DEPRECATED_KEYS_SCHEME)"},{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_e7b49dd2","line":542,"in_reply_to":"9a8ffd7b_ec5ec275","updated":"2015-11-24 14:35:21.000000000","message":"Well, actually this should break it because it breaks __check_deprectad.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"},{"line_number":546,"context_line":"        self.__deprecated_keys \u003d deprecated_keys or {}"},{"line_number":547,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_6ea3aa9f","line":544,"updated":"2015-11-24 13:55:16.000000000","message":"Please specify what keys have triggerted the exception.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in iterable:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated key is restricted when \""},{"line_number":545,"context_line":"                        \"alternative key is presented\")"},{"line_number":546,"context_line":"        self.__deprecated_keys \u003d deprecated_keys or {}"},{"line_number":547,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_71d14bfb","line":544,"in_reply_to":"9a8ffd7b_6ea3aa9f","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"2df4a92176572b9fa908e2d147c263dfed86eb70","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        return super(DictWithDeprecation, self).__getitem__("},{"line_number":564,"context_line":"            self.__check_deprecated(key))"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def __setitem__(self, key, value):"},{"line_number":567,"context_line":"        if self.__deprecated_keys.get(key, {}).get(\"alternative\"):"},{"line_number":568,"context_line":"            raise ValueError("},{"line_number":569,"context_line":"                \"Setting value for deprecated key is restricted when \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_11eebf22","line":566,"updated":"2015-11-24 13:58:47.000000000","message":"Setter still does not raise warning: http://paste.openstack.org/show/479858/","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        return super(DictWithDeprecation, self).__getitem__("},{"line_number":564,"context_line":"            self.__check_deprecated(key))"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def __setitem__(self, key, value):"},{"line_number":567,"context_line":"        if self.__deprecated_keys.get(key, {}).get(\"alternative\"):"},{"line_number":568,"context_line":"            raise ValueError("},{"line_number":569,"context_line":"                \"Setting value for deprecated key is restricted when \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_8c54d654","line":566,"in_reply_to":"9a8ffd7b_11eebf22","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"906f9758ca0dde3ff2db1c063ab8709a2d9bccae","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                \"Setting value for deprecated key is restricted when \""},{"line_number":570,"context_line":"                \"alternative key is presented. Use \u0027%s\u0027 instead.\" %"},{"line_number":571,"context_line":"                self.__deprecated_keys[key][\"alternative\"])"},{"line_number":572,"context_line":"        super(DictWithDeprecation, self).__setitem__(key, value)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def get(self, key, default\u003dNone):"},{"line_number":575,"context_line":"        return super(DictWithDeprecation, self).get("}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_8eadae33","line":572,"updated":"2015-11-24 13:55:16.000000000","message":"Please return that.","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"83868ac647043a87dc4a55bd1695ad8f60a9090a","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                \"Setting value for deprecated key is restricted when \""},{"line_number":570,"context_line":"                \"alternative key is presented. Use \u0027%s\u0027 instead.\" %"},{"line_number":571,"context_line":"                self.__deprecated_keys[key][\"alternative\"])"},{"line_number":572,"context_line":"        super(DictWithDeprecation, self).__setitem__(key, value)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def get(self, key, default\u003dNone):"},{"line_number":575,"context_line":"        return super(DictWithDeprecation, self).get("}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_512c47ab","line":572,"in_reply_to":"9a8ffd7b_8eadae33","updated":"2015-11-24 14:24:16.000000000","message":"Done","commit_id":"6f5db165fc6770b108ab75f0e969ce1b56bfe69c"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"9b44ea3cdda1c7a8ad41a66b87614b4e388c161c","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __check_deprecated(self, key):"},{"line_number":549,"context_line":"        if key in self.__deprecated_keys:"},{"line_number":550,"context_line":"            msg \u003d \"Key \u0027%(key)s\u0027 is deprecated since Rally %(release)s.\" % {"},{"line_number":551,"context_line":"                \"key\": key,"},{"line_number":552,"context_line":"                \"release\": self.__deprecated_keys[key][\"release\"]}"},{"line_number":553,"context_line":"            if self.__deprecated_keys[key].get(\"alternative\"):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_c66371b0","line":550,"updated":"2015-11-25 08:12:41.000000000","message":"anyone prefer %(package)s than Rally here? because the name of DictWithDeprecation is not rally specified","commit_id":"82d8867730b0c8d807abf72a4cfb95851b2caa07"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        ...                             \"alternative\": \"k1\"}})"},{"line_number":499,"context_line":"        \u003e\u003e\u003eanother_dict[\"k2\"]"},{"line_number":500,"context_line":"        UserWarning: Key \u0027k2\u0027 is deprecated since Rally 0.1.2. Use k1 instead."},{"line_number":501,"context_line":"        \"alternative\": self.__deprecate_keys[key][\"alternative\"]})"},{"line_number":502,"context_line":"        \u0027v1\u0027"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_96f573cc","line":501,"updated":"2015-11-25 17:26:48.000000000","message":"What this line is for?","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        \"additionalProperties\": False"},{"line_number":524,"context_line":"    }"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def __init__(self, iterable, deprecated_keys\u003dNone):"},{"line_number":527,"context_line":"        \"\"\"Init dict"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        :param iterable: Iterable object"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_96e33305","line":526,"updated":"2015-11-25 17:26:48.000000000","message":"\u0027iterable\u0027 can be a dict or a list of tuples. Please call the variable correspondingly.","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        self.__deprecated_keys \u003d {}"},{"line_number":539,"context_line":"        if deprecated_keys:"},{"line_number":540,"context_line":"            jsonschema.validate(deprecated_keys, self.__DEPRECATED_KEYS_SCHEME)"},{"line_number":541,"context_line":"            for key in deprecated_keys:"},{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in self:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated \u0027%s\u0027 key is restricted \""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_b6999770","line":541,"updated":"2015-11-25 17:26:48.000000000","message":"There can be more than one such a key. Please, show them all at once.","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                if \"alternative\" in deprecated_keys[key] and key in self:"},{"line_number":543,"context_line":"                    raise ValueError("},{"line_number":544,"context_line":"                        \"Setting value for deprecated \u0027%s\u0027 key is restricted \""},{"line_number":545,"context_line":"                        \"when alternative key is presented.\" % key)"},{"line_number":546,"context_line":"            self.__deprecated_keys \u003d deprecated_keys"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __check_deprecated(self, key):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_56c06b2a","line":545,"updated":"2015-11-25 17:26:48.000000000","message":"\"is present\" imo.","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                        \"when alternative key is presented.\" % key)"},{"line_number":546,"context_line":"            self.__deprecated_keys \u003d deprecated_keys"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def __check_deprecated(self, key):"},{"line_number":549,"context_line":"        if key in self.__deprecated_keys:"},{"line_number":550,"context_line":"            msg \u003d \"Key \u0027%(key)s\u0027 is deprecated since Rally %(release)s.\" % {"},{"line_number":551,"context_line":"                \"key\": key,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_b6e8b77d","line":548,"updated":"2015-11-25 17:26:48.000000000","message":"I don\u0027t like that _check_deprecated has a return value.\n\nLet\u0027s separate check_deprecated and get_alternative functions or rename the former.","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"cad2abb4d3ec9a3899f9b2450f9ae79e2ffec3aa","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            self.__check_deprecated(key))"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    def keys(self):"},{"line_number":592,"context_line":"        keys \u003d [key for key in self.__deprecated_keys"},{"line_number":593,"context_line":"                if \"alternative\" in self.__deprecated_keys[key]]"},{"line_number":594,"context_line":"        keys.extend(super(DictWithDeprecation, self).keys())"},{"line_number":595,"context_line":"        return keys"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_d670dbde","line":592,"updated":"2015-11-25 17:26:48.000000000","message":"This returns keys that are not in the dict:\n\n \u003e\u003e\u003e import rally.common.utils as utils\n\u003e\u003e\u003e dwd \u003d utils.DictWithDeprecation\n\u003e\u003e\u003e d \u003d dwd({}, deprecated_keys\u003d{\"abc\": {\"release\": \"0.1.2\", \"alternative\": \"def\"}})\n\u003e\u003e\u003e d.keys()\n[\u0027abc\u0027]\n\u003e\u003e\u003e d[\"abc\"]\nrally/common/utils.py:556: UserWarning: Key \u0027abc\u0027 is deprecated since Rally 0.1.2. Use \u0027def\u0027 instead.\n  \"alternative\": self.__deprecated_keys[key][\"alternative\"]})\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"rally/common/utils.py\", line 564, in __getitem__\n    self.__check_deprecated(key))\nKeyError: \u0027def\u0027","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"}],"tests/unit/common/test_utils.py":[{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"3cf6df8dda56c0bf6cc8d5565c04159855a0c8fd","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(3, mock_warnings.warn.call_count)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @mock.patch(\"rally.common.utils.warnings\")"},{"line_number":485,"context_line":"    def test_deprecation_withoit_alternative(self, mock_warnings):"},{"line_number":486,"context_line":"        simple_dict \u003d {\"k1\": \"v1\"}"},{"line_number":487,"context_line":"        d \u003d utils.DictWithDeprecation(simple_dict, deprecated_keys\u003d{"},{"line_number":488,"context_line":"            \"k1\": {\"release\": \"\"}})"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_3b45be16","line":485,"updated":"2015-11-13 15:28:44.000000000","message":"without :)","commit_id":"1ee8d1ffb490dda5a38fea7b4a59032fb45d771b"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b3ae09c689c04f9bfff965f16bf16bc01826515a","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(3, mock_warnings.warn.call_count)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @mock.patch(\"rally.common.utils.warnings\")"},{"line_number":485,"context_line":"    def test_deprecation_withoit_alternative(self, mock_warnings):"},{"line_number":486,"context_line":"        simple_dict \u003d {\"k1\": \"v1\"}"},{"line_number":487,"context_line":"        d \u003d utils.DictWithDeprecation(simple_dict, deprecated_keys\u003d{"},{"line_number":488,"context_line":"            \"k1\": {\"release\": \"\"}})"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_fb78962d","line":485,"in_reply_to":"da85f559_3b45be16","updated":"2015-11-13 15:35:02.000000000","message":"Done","commit_id":"1ee8d1ffb490dda5a38fea7b4a59032fb45d771b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"265a8706f4483b4a6d8e358dde61e590f148cd98","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        self.assertEqual(3, self.mock_warnings.call_count)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def test_deprecation_without_alternative(self):"},{"line_number":495,"context_line":"        simple_dict \u003d {\"k1\": \"v1\"}"},{"line_number":496,"context_line":"        d \u003d utils.DictWithDeprecation(simple_dict, deprecated_keys\u003d{"},{"line_number":497,"context_line":"            \"k1\": {\"release\": \"\"}})"},{"line_number":498,"context_line":"        self.assertEqual(simple_dict[\"k1\"], d.get(\"k1\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_78bd4767","line":495,"updated":"2015-11-26 02:58:35.000000000","message":"simple_dict \u003d {} should also be tested","commit_id":"45a423b084b41b0f728728cbfb57335df131b8f1"}]}
