)]}'
{"blazar/db/migration/alembic_migrations/versions/cffa05fd6878_add_soft_delete_to_most_blazar_models.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d85fcfc378f5934a9ff1d9497ca030191b7554d4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def upgrade():"},{"line_number":33,"context_line":"    op.add_column(\u0027computehost_allocations\u0027,"},{"line_number":34,"context_line":"                  sa.Column(\u0027deleted\u0027, sa.String(length\u003d36), nullable\u003dTrue))"},{"line_number":35,"context_line":"    op.add_column(\u0027computehost_allocations\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_974e226c","line":32,"updated":"2018-10-12 08:51:52.000000000","message":"The instance_reservations table is missed in the migration script.","commit_id":"c91381f48a24af5648e1f41490e97ea326d87fe9"}],"blazar/db/sqlalchemy/api.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d85fcfc378f5934a9ff1d9497ca030191b7554d4","unresolved":false,"context_lines":[{"line_number":223,"context_line":"def lease_get(lease_id):"},{"line_number":224,"context_line":"    return _lease_get(get_session(), lease_id)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def lease_get_all():"},{"line_number":228,"context_line":"    query \u003d model_query(models.Lease, get_session())"},{"line_number":229,"context_line":"    return query.all()"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"def lease_get_all_by_project(project_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b719ded2","line":229,"range":{"start_line":226,"start_character":0,"end_line":229,"end_character":22},"updated":"2018-10-12 08:51:52.000000000","message":"These get and list apis should care of the deleted flag. I didn\u0027t check all the blazar codes, but the some of codes assumes DB rows are hard-deleted.","commit_id":"c91381f48a24af5648e1f41490e97ea326d87fe9"}],"blazar/db/sqlalchemy/model_base.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d85fcfc378f5934a9ff1d9497ca030191b7554d4","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class SoftDeleteMixinWithUuid(object):"},{"line_number":26,"context_line":"    \"\"\"Mixin to provide soft delete capabilities."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    We cannot use oslo.db\u0027s SoftDeleteMixin as it assumes the `id` column is an"},{"line_number":29,"context_line":"    integer, while we use a UUID string."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    deleted_at \u003d Column(DateTime)"},{"line_number":32,"context_line":"    deleted \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def soft_delete(self, session):"},{"line_number":35,"context_line":"        \"\"\"Mark this object as deleted.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f76f5690","line":32,"range":{"start_line":26,"start_character":0,"end_line":32,"end_character":47},"updated":"2018-10-12 08:51:52.000000000","message":"IIUC, we can use oslo.db\u0027s SoftDeleteMixin unless this class overrides the deleted column with \u0027Column(String(36), nullable\u003dTrue)\u0027","commit_id":"c91381f48a24af5648e1f41490e97ea326d87fe9"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d85fcfc378f5934a9ff1d9497ca030191b7554d4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        datetime_to_str(d, \u0027created_at\u0027)"},{"line_number":62,"context_line":"        datetime_to_str(d, \u0027updated_at\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Don\u0027t show fields created by SoftDeleteMixinWithUuid"},{"line_number":65,"context_line":"        if \u0027deleted\u0027 in d:"},{"line_number":66,"context_line":"            del d[\u0027deleted\u0027]"},{"line_number":67,"context_line":"        if \u0027deleted_at\u0027 in d:"},{"line_number":68,"context_line":"            del d[\u0027deleted_at\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return d"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_57964a3f","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":31},"updated":"2018-10-12 08:51:52.000000000","message":"Handling non _BlazarBase class\u0027s attributes here looks bit strange to me.  The to_dict method has include argument, so how about passing shown attributes at models.py side?","commit_id":"c91381f48a24af5648e1f41490e97ea326d87fe9"}],"blazar/tests/db/sqlalchemy/test_utils.py":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d85fcfc378f5934a9ff1d9497ca030191b7554d4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            start_date\u003d_get_datetime(\u00272030-01-01 13:00\u0027),"},{"line_number":120,"context_line":"            end_date\u003d_get_datetime(\u00272030-01-01 14:00\u0027),"},{"line_number":121,"context_line":"            resource_id\u003d\u0027r1\u0027)"},{"line_number":122,"context_line":"        r_del \u003d _get_fake_phys_lease_values("},{"line_number":123,"context_line":"            id\u003d\u0027lease_del\u0027,"},{"line_number":124,"context_line":"            name\u003d\u0027fake_phys_lease_r_del\u0027,"},{"line_number":125,"context_line":"            start_date\u003d_get_datetime(\u00272030-01-01 14:30\u0027),"},{"line_number":126,"context_line":"            end_date\u003d_get_datetime(\u00272030-01-01 15:00\u0027),"},{"line_number":127,"context_line":"            resource_id\u003d\u0027r1\u0027)"},{"line_number":128,"context_line":"        _create_physical_lease(values\u003dr1)"},{"line_number":129,"context_line":"        _create_physical_lease(values\u003dr2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b78a3eba","line":126,"range":{"start_line":122,"start_character":0,"end_line":126,"end_character":55},"updated":"2018-10-12 08:51:52.000000000","message":"I prefer a test environment where the deleted lease starts and ends before the lease1 starts and another deleted lease starts and ends with an overlap with lease1 or lease3. Because most of the test cases tests between lease1 and lease3.","commit_id":"c91381f48a24af5648e1f41490e97ea326d87fe9"}]}
