)]}'
{"nova/db/sqlalchemy/api_migrations/migrate_repo/versions/026_add_resource_classes.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"90f978cdd1de8a02b7273c9be205414b9e98a023","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    resource_classes.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_bd05ee11","line":36,"updated":"2016-10-07 16:50:34.000000000","message":"Remind me, checkfirst\u003dTrue means it\u0027s idempotent if these are already there, right?","commit_id":"d0fd71f42ad1e5cfd3ed9fe40a89f7e762d5f6c8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ee2692c0a6f348e069ccad2ac258af0642f418df","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    resource_classes.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_bd888e72","line":36,"in_reply_to":"1a95cdbc_bd05ee11","updated":"2016-10-07 16:52:41.000000000","message":"yuppers.","commit_id":"d0fd71f42ad1e5cfd3ed9fe40a89f7e762d5f6c8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e4cdeb0b5ddde638c6d0afcc53d17cf5f08aa9a1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":31,"context_line":"        UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_resource_classes0name\u0027),"},{"line_number":32,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":33,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    resource_classes.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_ef0030ad","line":33,"range":{"start_line":33,"start_character":7,"end_line":33,"end_character":28},"updated":"2016-10-11 09:21:34.000000000","message":"Looks like there is no clear schema definition for the name. If the schema is match to existed one  \u0027^[0-9A-Z_]+$\u0027, then we use latin-1 at here is enough. There isn\u0027t clear description in the spec https://review.openstack.org/#/c/312696/9 also.","commit_id":"a8cb95b6a891af9c901f76d804ceadd32e50d682"}],"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6dffdbb63baea7b005ad310ff77ecae6e4c3096","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        schema.UniqueConstraint(\"name\", name\u003d\"uniq_resource_classes0name\"),"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":281,"context_line":"    name \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_3f9b5667","line":280,"updated":"2016-10-10 14:44:46.000000000","message":"Add nullable\u003dFalse here like in the schema migration? Or is nullable\u003dFalse redundant when it\u0027s also a primary key?","commit_id":"5631856cf0f203d8cfada0a8c4bd2350942b2cd0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7c9b29cc7a06b4670f496dec01b702c8aeb8cd5a","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        schema.UniqueConstraint(\"name\", name\u003d\"uniq_resource_classes0name\"),"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":281,"context_line":"    name \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_13704ea3","line":280,"in_reply_to":"1a95cdbc_1f821ac8","updated":"2016-10-10 18:04:52.000000000","message":"Done","commit_id":"5631856cf0f203d8cfada0a8c4bd2350942b2cd0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"250b3e3c19742d3794a5b27e7b8e9be1b5910633","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        schema.UniqueConstraint(\"name\", name\u003d\"uniq_resource_classes0name\"),"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":281,"context_line":"    name \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_1f821ac8","line":280,"in_reply_to":"1a95cdbc_3f9b5667","updated":"2016-10-10 14:47:29.000000000","message":"Nope, nullable defaults to True, so you need to be explicit here:\n\nhttp://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight\u003dprimary_key#sqlalchemy.schema.Column.params.nullable","commit_id":"5631856cf0f203d8cfada0a8c4bd2350942b2cd0"}],"nova/tests/functional/db/api/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6f697bc4396eca99da59ce900d501c51d2e380e6","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _check_026(self, engine, data):"},{"line_number":466,"context_line":"        self.assertColumnExists(engine, \u0027resource_classes\u0027, \u0027id\u0027)"},{"line_number":467,"context_line":"        self.assertColumnExists(engine, \u0027resource_classes\u0027, \u0027name\u0027)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"class TestNovaAPIMigrationsWalkSQLite(NovaAPIMigrationsWalk,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_bfd5a6e5","line":467,"updated":"2016-10-10 14:45:38.000000000","message":"nit: you could also self.assertUniqueConstraintExists(engine, \u0027resource_classes\u0027, [\u0027name\u0027])","commit_id":"5631856cf0f203d8cfada0a8c4bd2350942b2cd0"}]}
