)]}'
{"designate/storage/impl_sqlalchemy/__init__.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"347e55d37cb3ff3490de2cef7ee2eda94d80a79e","unresolved":false,"context_lines":[{"line_number":960,"context_line":"        else:"},{"line_number":961,"context_line":"            pool.ns_records \u003d objects.PoolNsRecordList()"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"        if pool.obj_attr_is_set(\u0027nameservers\u0027):"},{"line_number":964,"context_line":"            for nameserver in pool.nameservers:"},{"line_number":965,"context_line":"                self.create_pool_nameserver(context, pool.id, nameserver)"},{"line_number":966,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_560ffa2d","line":963,"range":{"start_line":963,"start_character":0,"end_line":963,"end_character":8},"updated":"2016-03-16 12:27:17.000000000","message":"I\u0027m wondering if this 5 if/else blocks should be refactored in a loop.\nMaybe two loops, one to instantiate *List() where the attr is not set and then one to run self.create_*\n\nThe same if/else pattern is in use elsewhere: maybe there could be a method in the List() class or the object to do the creation loop","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"c119ad0d4aa3594c02a11618187d98736a463649","unresolved":false,"context_lines":[{"line_number":960,"context_line":"        else:"},{"line_number":961,"context_line":"            pool.ns_records \u003d objects.PoolNsRecordList()"},{"line_number":962,"context_line":""},{"line_number":963,"context_line":"        if pool.obj_attr_is_set(\u0027nameservers\u0027):"},{"line_number":964,"context_line":"            for nameserver in pool.nameservers:"},{"line_number":965,"context_line":"                self.create_pool_nameserver(context, pool.id, nameserver)"},{"line_number":966,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_1c4bcc88","line":963,"range":{"start_line":963,"start_character":0,"end_line":963,"end_character":8},"in_reply_to":"1af94dfe_560ffa2d","updated":"2016-03-17 00:55:32.000000000","message":"Yea, agree - this was the \"Fugly Code\" I referred to at the mid-cycle. The whole (existing) pattern is busted, and needs to be replaced, but it\u0027s too late this cycle to do so.","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"}],"designate/storage/impl_sqlalchemy/migrate_repo/versions/085_new_pools_tables.py":[{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"af387a59eb3720c762a715b5c7e5850dc211e5e2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    pool_also_notifies.create()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def downgrade(migrate_engine):"},{"line_number":130,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    pool_also_notifies.create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_1dcd2085","line":129,"updated":"2016-02-23 15:07:11.000000000","message":"remove - we dont do this. and it is not a downgrade","commit_id":"2618f96c5730ee9243a2dfa492f2bf50567fb243"}],"designate/storage/impl_sqlalchemy/migrate_repo/versions/086_new_pools_tables.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"347e55d37cb3ff3490de2cef7ee2eda94d80a79e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"meta \u003d MetaData()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"pool_nameservers \u003d Table(\u0027pool_nameservers\u0027, meta,"},{"line_number":28,"context_line":"    Column(\u0027id\u0027, UUID, default\u003dutils.generate_uuid, primary_key\u003dTrue),"},{"line_number":29,"context_line":"    Column(\u0027version\u0027, Integer(), default\u003d1, nullable\u003dFalse),"},{"line_number":30,"context_line":"    Column(\u0027created_at\u0027, DateTime, default\u003dlambda: timeutils.utcnow()),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_7cd2d501","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":16},"updated":"2016-03-16 12:27:17.000000000","message":"This table definitions are the same as in tables.py , can this be refactored?","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"c119ad0d4aa3594c02a11618187d98736a463649","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"meta \u003d MetaData()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"pool_nameservers \u003d Table(\u0027pool_nameservers\u0027, meta,"},{"line_number":28,"context_line":"    Column(\u0027id\u0027, UUID, default\u003dutils.generate_uuid, primary_key\u003dTrue),"},{"line_number":29,"context_line":"    Column(\u0027version\u0027, Integer(), default\u003d1, nullable\u003dFalse),"},{"line_number":30,"context_line":"    Column(\u0027created_at\u0027, DateTime, default\u003dlambda: timeutils.utcnow()),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_ff50920c","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":16},"in_reply_to":"1af94dfe_7cd2d501","updated":"2016-03-17 00:55:32.000000000","message":"No, tables.py will change over time. This \"copy\" must remain static forever in order for the migrations to work. i.e. when a new column is added in tables.py, this migration must not create it, because a later migration will do that...","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"}],"designate/tests/test_storage/__init__.py":[{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"347e55d37cb3ff3490de2cef7ee2eda94d80a79e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # TODO(kiall): Someone, Somewhere, could probably make use of a"},{"line_number":34,"context_line":"    #              assertNestedDictContainsSubset(), cleanup and put somewhere"},{"line_number":35,"context_line":"    #              better."},{"line_number":36,"context_line":"    def assertNestedDictContainsSubset(self, expected, actual):"},{"line_number":37,"context_line":"        for key, value in expected.items():"},{"line_number":38,"context_line":"            if isinstance(value, dict):"},{"line_number":39,"context_line":"                self.assertNestedDictContainsSubset(value, actual.get(key, {}))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_e465b5e1","line":36,"updated":"2016-03-16 12:27:17.000000000","message":"\"\"\"Ensure that `actual` contains (at least) all the key-value pairs in `expected`, recursively.\nIterables are checked for identity.\n\n{\u0027a\u0027: {\u0027nested\u0027: 1, \u0027foo\u0027: 2}} contains {\u0027a\u0027: {\u0027nested\u0027: 1}} \n\"\"\"","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"347e55d37cb3ff3490de2cef7ee2eda94d80a79e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            if isinstance(value, dict):"},{"line_number":39,"context_line":"                self.assertNestedDictContainsSubset(value, actual.get(key, {}))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"            elif isinstance(value, list):"},{"line_number":42,"context_line":"                self.assertEqual(len(value), len(actual[key]))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"                for index, item in enumerate(value):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_691dfe72","line":41,"updated":"2016-03-16 12:27:17.000000000","message":"Any iterable should do (e.g. tuples as well?)","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"c119ad0d4aa3594c02a11618187d98736a463649","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            if isinstance(value, dict):"},{"line_number":39,"context_line":"                self.assertNestedDictContainsSubset(value, actual.get(key, {}))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"            elif isinstance(value, list):"},{"line_number":42,"context_line":"                self.assertEqual(len(value), len(actual[key]))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"                for index, item in enumerate(value):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_549509dc","line":41,"in_reply_to":"1af94dfe_691dfe72","updated":"2016-03-17 00:55:32.000000000","message":"Ah, I meant to include both this an the one above. It\u0027s now 3 patches deep, I\u0027ll tack another one an after it lands.","commit_id":"49dfdb685adc04bf64672215ba6a9a9d19480bc9"}]}
