)]}'
{"ceilometer/event/storage/impl_sqlalchemy.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"adfd97cc125e901500df56399a2c8e7021bd8b13","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"TRAIT_ID2MODEL \u003d dict((x, y) for x, y in TRAIT_MAPLIST)"},{"line_number":52,"context_line":"TRAIT_MODEL2ID \u003d dict((y, x) for x, y in TRAIT_MAPLIST)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"trait_models_dict \u003d {\u0027string\u0027: models.TraitText,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_a5f7edd1","line":52,"updated":"2014-10-27 14:49:57.000000000","message":"IWD4U but I still think ID_TO_MODEL and MODEL_TO_ID are probably more readable.","commit_id":"8b6f18c75975c7f5926449a63e8fd525e0544671"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96c119c3386f43fde9efe2d1f128c77753ecf2ef","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"TRAIT_ID2MODEL \u003d dict((x, y) for x, y in TRAIT_MAPLIST)"},{"line_number":52,"context_line":"TRAIT_MODEL2ID \u003d dict((y, x) for x, y in TRAIT_MAPLIST)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"trait_models_dict \u003d {\u0027string\u0027: models.TraitText,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_ef81cffb","line":52,"in_reply_to":"9aa7fdbe_a5f7edd1","updated":"2014-10-27 16:02:05.000000000","message":"Done","commit_id":"8b6f18c75975c7f5926449a63e8fd525e0544671"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"adfd97cc125e901500df56399a2c8e7021bd8b13","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        for dtype in trait_map.keys():"},{"line_number":195,"context_line":"                            model \u003d TRAIT_ID2MODEL[dtype]"},{"line_number":196,"context_line":"                            session.execute(model.__table__.insert(),"},{"line_number":197,"context_line":"                                            trait_map[dtype])"},{"line_number":198,"context_line":"            except dbexc.DBDuplicateEntry as e:"},{"line_number":199,"context_line":"                LOG.exception(_(\"Failed to record duplicated event: %s\") % e)"},{"line_number":200,"context_line":"                problem_events.append((api_models.Event.DUPLICATE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_c54871ce","line":197,"updated":"2014-10-27 14:49:57.000000000","message":"There\u0027s something about this block (start with line 185) which feels wrong somehow, but unfortunately can\u0027t quite figure out what it is. I mention it just to flag it in case it tickles someone else\u0027s brain.\n\nIt might simply be that it feels awkward to mix add() and execute() on the same session.","commit_id":"8b6f18c75975c7f5926449a63e8fd525e0544671"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96c119c3386f43fde9efe2d1f128c77753ecf2ef","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        for dtype in trait_map.keys():"},{"line_number":195,"context_line":"                            model \u003d TRAIT_ID2MODEL[dtype]"},{"line_number":196,"context_line":"                            session.execute(model.__table__.insert(),"},{"line_number":197,"context_line":"                                            trait_map[dtype])"},{"line_number":198,"context_line":"            except dbexc.DBDuplicateEntry as e:"},{"line_number":199,"context_line":"                LOG.exception(_(\"Failed to record duplicated event: %s\") % e)"},{"line_number":200,"context_line":"                problem_events.append((api_models.Event.DUPLICATE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aa7fdbe_6ff15f94","line":197,"in_reply_to":"9aa7fdbe_c54871ce","updated":"2014-10-27 16:02:05.000000000","message":"so the reason i run session.execute here rather than session.add is to allow for bulk insert rather than inserting each trait one by one.\n\ni\u0027d run it for events too but there\u0027s an issue there because we currently track individual problem events and i don\u0027t think i could continue to support that if i bulk insert events","commit_id":"8b6f18c75975c7f5926449a63e8fd525e0544671"},{"author":{"_account_id":12637,"name":"Srinivas Sakhamuri","email":"srini.openstack@gmail.com","username":"srsakhamuri"},"change_message_id":"6a4e8154a601aaf46438d0b06ea065438585f87b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        for dtype in trait_map.keys():"},{"line_number":195,"context_line":"                            model \u003d TRAIT_ID_TO_MODEL[dtype]"},{"line_number":196,"context_line":"                            session.execute(model.__table__.insert(),"},{"line_number":197,"context_line":"                                            trait_map[dtype])"},{"line_number":198,"context_line":"            except dbexc.DBDuplicateEntry as e:"},{"line_number":199,"context_line":"                LOG.exception(_(\"Failed to record duplicated event: %s\") % e)"},{"line_number":200,"context_line":"                problem_events.append((api_models.Event.DUPLICATE,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_1d70090a","line":197,"updated":"2014-10-27 16:59:18.000000000","message":"If there is a problem in trait insertion the related event will still be around looks like, it won\u0027t get rolled back.","commit_id":"dbddcd0f8ba7b66ba9143aea51176af5b7b607b0"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"20f0ac8675436117236d4ccbe654def9138ccc21","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                         .join(models.Event,"},{"line_number":353,"context_line":"                               models.Event.id \u003d\u003d trait_model.event_id)"},{"line_number":354,"context_line":"                         .join(models.EventType,"},{"line_number":355,"context_line":"                               sa.and_(models.EventType.id \u003d\u003d models.Event.id,"},{"line_number":356,"context_line":"                                       models.EventType.desc \u003d\u003d event_type))"},{"line_number":357,"context_line":"                         .distinct())"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_a6a976e1","line":355,"updated":"2015-02-07 14:50:03.000000000","message":"I think here should be models.EventType.id \u003d\u003d models.Event.event_type_id\n\nEvent.event_type_id\u0027s ForeignKey is EventType.id, Event.id is something generated by sql, not related to EventType IIUC","commit_id":"9ad9117d36eb1e56b42381b06d1c269bcb055925"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e4c29f82cf6684fbb8ed0504d3de681d148d6943","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                         .join(models.Event,"},{"line_number":353,"context_line":"                               models.Event.id \u003d\u003d trait_model.event_id)"},{"line_number":354,"context_line":"                         .join(models.EventType,"},{"line_number":355,"context_line":"                               sa.and_(models.EventType.id \u003d\u003d models.Event.id,"},{"line_number":356,"context_line":"                                       models.EventType.desc \u003d\u003d event_type))"},{"line_number":357,"context_line":"                         .distinct())"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_e690ce50","line":355,"in_reply_to":"da86d52c_a6a976e1","updated":"2015-02-07 15:33:54.000000000","message":"great catch!","commit_id":"9ad9117d36eb1e56b42381b06d1c269bcb055925"}],"ceilometer/storage/sqlalchemy/migrate_repo/versions/041_expand_event_traits.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"0dab3e05ae3c6296174728686e3c0613dbd8b20c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ceilometer.storage.sqlalchemy import models"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"tables \u003d [(\u0027trait_text\u0027, sa.Text, True, \u0027t_string\u0027, 1),"},{"line_number":19,"context_line":"          (\u0027trait_int\u0027, sa.Integer, False, \u0027t_int\u0027, 2),"},{"line_number":20,"context_line":"          (\u0027trait_float\u0027, sa.Float, False, \u0027t_float\u0027, 3),"},{"line_number":21,"context_line":"          (\u0027trait_datetime\u0027, models.PreciseTimestamp(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_3e0a5cd2","line":18,"updated":"2015-02-18 15:10:40.000000000","message":"The last element of each tuple wasn\u0027t immediately obvious to me ... would it be more readable to replace the literal int value with ceilo.event.storage.models.Trait.TEXT_TYPE, INT_TYPE etc?","commit_id":"4be819efb6bb2f57eb01d2b3798f1b4921d01dd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"266f139fca5e1290347cb88dfbefe07bbc8458b1","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ceilometer.storage.sqlalchemy import models"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"tables \u003d [(\u0027trait_text\u0027, sa.Text, True, \u0027t_string\u0027, 1),"},{"line_number":19,"context_line":"          (\u0027trait_int\u0027, sa.Integer, False, \u0027t_int\u0027, 2),"},{"line_number":20,"context_line":"          (\u0027trait_float\u0027, sa.Float, False, \u0027t_float\u0027, 3),"},{"line_number":21,"context_line":"          (\u0027trait_datetime\u0027, models.PreciseTimestamp(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_becd6c5f","line":18,"in_reply_to":"da86d52c_3e0a5cd2","updated":"2015-02-18 15:16:21.000000000","message":"i\u0027ve tended to avoid using models representations in migrations because as the models change over time, the migrations are catered to a specific (historical) point in time so a change in current model could effectively break a historical migration.","commit_id":"4be819efb6bb2f57eb01d2b3798f1b4921d01dd2"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c9e841d0e89bb3fecfd45789ddf67b73eae8cc1c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ceilometer.storage.sqlalchemy import models"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"tables \u003d [(\u0027trait_text\u0027, sa.Text, True, \u0027t_string\u0027, 1),"},{"line_number":19,"context_line":"          (\u0027trait_int\u0027, sa.Integer, False, \u0027t_int\u0027, 2),"},{"line_number":20,"context_line":"          (\u0027trait_float\u0027, sa.Float, False, \u0027t_float\u0027, 3),"},{"line_number":21,"context_line":"          (\u0027trait_datetime\u0027, models.PreciseTimestamp(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_dea5c048","line":18,"in_reply_to":"da86d52c_becd6c5f","updated":"2015-02-18 15:19:25.000000000","message":"Fair point, makes sense.","commit_id":"4be819efb6bb2f57eb01d2b3798f1b4921d01dd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"50e034e4e8287c1d28f38ba595b59b911be3d9e5","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ceilometer.storage.sqlalchemy import models"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"tables \u003d [(\u0027trait_text\u0027, sa.Text, True, \u0027t_string\u0027, 1),"},{"line_number":19,"context_line":"          (\u0027trait_int\u0027, sa.Integer, False, \u0027t_int\u0027, 2),"},{"line_number":20,"context_line":"          (\u0027trait_float\u0027, sa.Float, False, \u0027t_float\u0027, 3),"},{"line_number":21,"context_line":"          (\u0027trait_datetime\u0027, models.PreciseTimestamp(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_9f55c2c3","line":18,"updated":"2015-02-19 21:38:31.000000000","message":"this should\u0027ve been sa.String(255)","commit_id":"b41d8243df7b711df98d60fbc7f7e7ab3602de16"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"50e034e4e8287c1d28f38ba595b59b911be3d9e5","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"tables \u003d [(\u0027trait_text\u0027, sa.Text, True, \u0027t_string\u0027, 1),"},{"line_number":19,"context_line":"          (\u0027trait_int\u0027, sa.Integer, False, \u0027t_int\u0027, 2),"},{"line_number":20,"context_line":"          (\u0027trait_float\u0027, sa.Float, False, \u0027t_float\u0027, 3),"},{"line_number":21,"context_line":"          (\u0027trait_datetime\u0027, models.PreciseTimestamp(),"},{"line_number":22,"context_line":"           False, \u0027t_datetime\u0027, 4)]"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_3f4db63b","line":20,"updated":"2015-02-19 21:38:31.000000000","message":"this should\u0027ve been sa.Float(53)","commit_id":"b41d8243df7b711df98d60fbc7f7e7ab3602de16"}]}
