)]}'
{"ironic/db/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        \"\"\""},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    @abc.abstractmethod"},{"line_number":1170,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1171,"context_line":"        \"\"\"Create a deployment template."},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"        :param values: A dict describing the deployment template. For example:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_473bbbe8","line":1170,"updated":"2019-02-18 11:45:22.000000000","message":"nit: why not embed version inside values as we do for other objects?","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2df25d853df6e2edbb042f1b0f8dbdb30b5d70fe","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        \"\"\""},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    @abc.abstractmethod"},{"line_number":1170,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1171,"context_line":"        \"\"\"Create a deployment template."},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"        :param values: A dict describing the deployment template. For example:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_dbed36b8","line":1170,"in_reply_to":"9fdfeff1_473bbbe8","updated":"2019-02-18 23:07:28.000000000","message":"It just repeats the pattern that went in with traits, and I think it is needed because the version can be changed mid-flight with a hup and object creator needs to explicitly create at particular versions AIUI.","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        \"\"\""},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    @abc.abstractmethod"},{"line_number":1170,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1171,"context_line":"        \"\"\"Create a deployment template."},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"        :param values: A dict describing the deployment template. For example:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7033c963","line":1170,"in_reply_to":"9fdfeff1_dbed36b8","updated":"2019-02-21 12:24:17.000000000","message":"You\u0027re quite right - it\u0027s redundant. We don\u0027t even use it in the implementation...","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":1770,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1771,"context_line":"        steps \u003d values.get(\u0027steps\u0027, [])"},{"line_number":1772,"context_line":"        values[\u0027steps\u0027] \u003d self._get_deploy_template_steps(steps)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"        template \u003d models.DeployTemplate()"},{"line_number":1775,"context_line":"        template.update(values)"},{"line_number":1776,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_67327f12","line":1773,"updated":"2019-02-18 11:45:22.000000000","message":"should we generate uuid here if not present? I see we do it for some other tables.","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2df25d853df6e2edbb042f1b0f8dbdb30b5d70fe","unresolved":false,"context_lines":[{"line_number":1770,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1771,"context_line":"        steps \u003d values.get(\u0027steps\u0027, [])"},{"line_number":1772,"context_line":"        values[\u0027steps\u0027] \u003d self._get_deploy_template_steps(steps)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"        template \u003d models.DeployTemplate()"},{"line_number":1775,"context_line":"        template.update(values)"},{"line_number":1776,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_9b16cea7","line":1773,"in_reply_to":"9fdfeff1_67327f12","updated":"2019-02-18 23:07:28.000000000","message":"Maybe. I seem to remember we do creations in the API in some places if not supplied with.","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":1770,"context_line":"    def create_deploy_template(self, values, version):"},{"line_number":1771,"context_line":"        steps \u003d values.get(\u0027steps\u0027, [])"},{"line_number":1772,"context_line":"        values[\u0027steps\u0027] \u003d self._get_deploy_template_steps(steps)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"        template \u003d models.DeployTemplate()"},{"line_number":1775,"context_line":"        template.update(values)"},{"line_number":1776,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_3026a118","line":1773,"in_reply_to":"9fdfeff1_9b16cea7","updated":"2019-02-21 12:24:17.000000000","message":"Yeah, UUID gets generated in the API if absent. Didn\u0027t see a need to repeat the logic here.","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":1800,"context_line":"        # List all existing steps for the template."},{"line_number":1801,"context_line":"        query \u003d (model_query(models.DeployTemplateStep)"},{"line_number":1802,"context_line":"                 .filter_by(deploy_template_id\u003dtemplate_id))"},{"line_number":1803,"context_line":"        current_steps \u003d query.all()"},{"line_number":1804,"context_line":""},{"line_number":1805,"context_line":"        # List the new steps for the template."},{"line_number":1806,"context_line":"        new_steps \u003d self._get_deploy_template_steps(steps, template_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_873523f9","line":1803,"updated":"2019-02-18 11:45:22.000000000","message":"nit: this is not needed, a query is an iterator","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":1800,"context_line":"        # List all existing steps for the template."},{"line_number":1801,"context_line":"        query \u003d (model_query(models.DeployTemplateStep)"},{"line_number":1802,"context_line":"                 .filter_by(deploy_template_id\u003dtemplate_id))"},{"line_number":1803,"context_line":"        current_steps \u003d query.all()"},{"line_number":1804,"context_line":""},{"line_number":1805,"context_line":"        # List the new steps for the template."},{"line_number":1806,"context_line":"        new_steps \u003d self._get_deploy_template_steps(steps, template_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_b077f108","line":1803,"in_reply_to":"9fdfeff1_873523f9","updated":"2019-02-21 12:24:17.000000000","message":"Done","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0329e068c0cfc9072f38df2c251821a339b5d85f","unresolved":false,"context_lines":[{"line_number":1838,"context_line":"        try:"},{"line_number":1839,"context_line":"            with _session_for_write() as session:"},{"line_number":1840,"context_line":"                # NOTE(mgoddard): Don\u0027t issue a joined query for the update as"},{"line_number":1841,"context_line":"                # this does not work with PostgreSQL."},{"line_number":1842,"context_line":"                query \u003d model_query(models.DeployTemplate)"},{"line_number":1843,"context_line":"                query \u003d add_identity_filter(query, template_id)"},{"line_number":1844,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_e8509334","line":1841,"updated":"2019-02-15 23:06:18.000000000","message":"I thought this was also a constraint for mysql. If not... interesting.","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"                # First, update non-step columns."},{"line_number":1851,"context_line":"                steps \u003d None"},{"line_number":1852,"context_line":"                if \u0027steps\u0027 in values:"},{"line_number":1853,"context_line":"                    steps \u003d values.pop(\u0027steps\u0027)"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"                ref.update(values)"},{"line_number":1856,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_2738f7eb","line":1853,"updated":"2019-02-18 11:45:22.000000000","message":"nit: all 3 lines are\n\n steps \u003d values.pop(\u0027steps\u0027, None)","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"                # First, update non-step columns."},{"line_number":1851,"context_line":"                steps \u003d None"},{"line_number":1852,"context_line":"                if \u0027steps\u0027 in values:"},{"line_number":1853,"context_line":"                    steps \u003d values.pop(\u0027steps\u0027)"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"                ref.update(values)"},{"line_number":1856,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_306b0120","line":1853,"in_reply_to":"9fdfeff1_2738f7eb","updated":"2019-02-21 12:24:17.000000000","message":"Done","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0329e068c0cfc9072f38df2c251821a339b5d85f","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        Index(\u0027deploy_template_id\u0027, \u0027deploy_template_id\u0027),"},{"line_number":372,"context_line":"        Index(\u0027deploy_template_steps_interface_idx\u0027, \u0027interface\u0027),"},{"line_number":373,"context_line":"        Index(\u0027deploy_template_steps_step_idx\u0027, \u0027step\u0027),"},{"line_number":374,"context_line":"        table_args())"},{"line_number":375,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":376,"context_line":"    deploy_template_id \u003d Column(Integer, ForeignKey(\u0027deploy_templates.id\u0027),"},{"line_number":377,"context_line":"                                nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_48b3df98","line":374,"updated":"2019-02-15 23:06:18.000000000","message":"\\o/ indexes","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"}],"ironic/tests/unit/db/sqlalchemy/test_migrations.py":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"1369fcd80239fe713de1b6cd0ca9702306d0b415","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        self.assertEqual(name, result[\u0027name\u0027])"},{"line_number":875,"context_line":"        # Query by name."},{"line_number":876,"context_line":"        result \u003d deploy_templates.select("},{"line_number":877,"context_line":"            deploy_templates.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":878,"context_line":"        self.assertEqual(template_id, result[\u0027id\u0027])"},{"line_number":879,"context_line":"        # Query by ID."},{"line_number":880,"context_line":"        result \u003d deploy_templates.select("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_94b3784d","line":877,"range":{"start_line":877,"start_character":12,"end_line":877,"end_character":62},"updated":"2019-01-28 14:23:03.000000000","message":"This should probably read:\ndeploy_templates.c.name \u003d\u003d name).execute().first()","commit_id":"684fa05d0502a8742be649db6ab52b0e4af8872c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        self.assertEqual(name, result[\u0027name\u0027])"},{"line_number":875,"context_line":"        # Query by name."},{"line_number":876,"context_line":"        result \u003d deploy_templates.select("},{"line_number":877,"context_line":"            deploy_templates.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":878,"context_line":"        self.assertEqual(template_id, result[\u0027id\u0027])"},{"line_number":879,"context_line":"        # Query by ID."},{"line_number":880,"context_line":"        result \u003d deploy_templates.select("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_aaeed588","line":877,"range":{"start_line":877,"start_character":12,"end_line":877,"end_character":62},"in_reply_to":"9fdfeff1_94b3784d","updated":"2019-02-21 12:24:17.000000000","message":"+1","commit_id":"684fa05d0502a8742be649db6ab52b0e4af8872c"}],"ironic/tests/unit/db/test_deploy_templates.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        res \u003d self.dbapi.get_deploy_template_by_uuid(self.template.uuid)"},{"line_number":149,"context_line":"        self.assertEqual(self.template.id, res.id)"},{"line_number":150,"context_line":"        self.assertRaises(exception.DeployTemplateNotFound,"},{"line_number":151,"context_line":"                          self.dbapi.get_deploy_template_by_uuid, -1)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_get_deploy_template_by_name(self):"},{"line_number":154,"context_line":"        res \u003d self.dbapi.get_deploy_template_by_name(self.template.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_a7562729","line":151,"updated":"2019-02-18 11:45:22.000000000","message":"nit: use a generated UUID value instead of obviously invalid -1","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"dc19a3695e7f3b5fd64b2d8d748f1078c2497071","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        res \u003d self.dbapi.get_deploy_template_by_uuid(self.template.uuid)"},{"line_number":149,"context_line":"        self.assertEqual(self.template.id, res.id)"},{"line_number":150,"context_line":"        self.assertRaises(exception.DeployTemplateNotFound,"},{"line_number":151,"context_line":"                          self.dbapi.get_deploy_template_by_uuid, -1)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_get_deploy_template_by_name(self):"},{"line_number":154,"context_line":"        res \u003d self.dbapi.get_deploy_template_by_name(self.template.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_905d0d7b","line":151,"in_reply_to":"9fdfeff1_a7562729","updated":"2019-02-21 12:24:17.000000000","message":"Done","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"}],"ironic/tests/unit/db/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6093206f020127567c1c78ff1326bff93c913b46","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        \u0027updated_at\u0027: kw.get(\u0027updated_at\u0027),"},{"line_number":631,"context_line":"        \u0027id\u0027: kw.get(\u0027id\u0027, 234),"},{"line_number":632,"context_line":"        \u0027name\u0027: kw.get(\u0027name\u0027, u\u0027CUSTOM_DT1\u0027),"},{"line_number":633,"context_line":"        \u0027uuid\u0027: kw.get(\u0027uuid\u0027, \u0027aa75a317-2929-47d4-b676-fd9bff578bf1\u0027),"},{"line_number":634,"context_line":"        \u0027steps\u0027: kw.get(\u0027steps\u0027, [get_test_deploy_template_step("},{"line_number":635,"context_line":"            deploy_template_id\u003dkw.get(\u0027id\u0027, 234))]),"},{"line_number":636,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_c751eb31","line":633,"updated":"2019-02-18 11:45:22.000000000","message":"nit: generate a UUID instead of using a constant","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2df25d853df6e2edbb042f1b0f8dbdb30b5d70fe","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        \u0027updated_at\u0027: kw.get(\u0027updated_at\u0027),"},{"line_number":631,"context_line":"        \u0027id\u0027: kw.get(\u0027id\u0027, 234),"},{"line_number":632,"context_line":"        \u0027name\u0027: kw.get(\u0027name\u0027, u\u0027CUSTOM_DT1\u0027),"},{"line_number":633,"context_line":"        \u0027uuid\u0027: kw.get(\u0027uuid\u0027, \u0027aa75a317-2929-47d4-b676-fd9bff578bf1\u0027),"},{"line_number":634,"context_line":"        \u0027steps\u0027: kw.get(\u0027steps\u0027, [get_test_deploy_template_step("},{"line_number":635,"context_line":"            deploy_template_id\u003dkw.get(\u0027id\u0027, 234))]),"},{"line_number":636,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_5b1066a9","line":633,"in_reply_to":"9fdfeff1_c751eb31","updated":"2019-02-18 23:07:28.000000000","message":"++","commit_id":"b137af30b9ab6523e779ef3e63d0c569b92fb04b"}]}
