)]}'
{"cue/api/controllers/base.py":[{"author":{"_account_id":10584,"name":"Min Pae","username":"sputnik13","inactive":true},"change_message_id":"b25a0dd0726639b36b0ad5461445b23b9e37574d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def unset_empty_fields(self):"},{"line_number":54,"context_line":"        \"\"\"Unset empty fields so they don\u0027t appear in message body.\"\"\""},{"line_number":55,"context_line":"        for k in self.fields:"},{"line_number":56,"context_line":"            if hasattr(self, k) and getattr(self, k) is None:"},{"line_number":57,"context_line":"                setattr(self, k, wsme.Unset)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_eb2a0f2c","line":56,"updated":"2015-04-06 22:46:53.000000000","message":"why are some attributes None to start with?  Can we not initialize any empty fields to wsme.Unset instead?","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"fbe7cf9cebb1feb5e91739ec48e0f1550afac295","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def unset_empty_fields(self):"},{"line_number":54,"context_line":"        \"\"\"Unset empty fields so they don\u0027t appear in message body.\"\"\""},{"line_number":55,"context_line":"        for k in self.fields:"},{"line_number":56,"context_line":"            if hasattr(self, k) and getattr(self, k) is None:"},{"line_number":57,"context_line":"                setattr(self, k, wsme.Unset)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_f013175b","line":56,"in_reply_to":"9aa53dc9_06b08adc","updated":"2015-04-07 01:04:40.000000000","message":"making change in constructor of Cluster object for API that will not require this dedicated function","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"6a1e5553468234dcc63b11612f7f8a8c9b7a779a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def unset_empty_fields(self):"},{"line_number":54,"context_line":"        \"\"\"Unset empty fields so they don\u0027t appear in message body.\"\"\""},{"line_number":55,"context_line":"        for k in self.fields:"},{"line_number":56,"context_line":"            if hasattr(self, k) and getattr(self, k) is None:"},{"line_number":57,"context_line":"                setattr(self, k, wsme.Unset)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_06b08adc","line":56,"in_reply_to":"9aa53dc9_eb2a0f2c","updated":"2015-04-06 23:16:12.000000000","message":"When we retrieve entire cue objects, there can be parameters that map to the REST Api Objects that are not set in certain cases.  These fields will show up on the user end (or Client) as empty fields.  This base method sets these empty fields to wsme Unset so they are not captured in the HTTP communication.","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"}],"cue/api/controllers/v1/cluster.py":[{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"47cd147c44d38f68dd7270cf70416eadf3242a54","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"URL to endpoint\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Cluster(base.APIBase):"},{"line_number":63,"context_line":"    \"\"\"Representation of a cluster\u0027s details.\"\"\""},{"line_number":64,"context_line":"    # todo(dagnello): WSME attribute verification sometimes triggers 500 server"},{"line_number":65,"context_line":"    # error when user input was actually invalid (400).  Example: if \u0027size\u0027 was"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_ac3e61b6","line":62,"updated":"2015-04-01 22:49:59.000000000","message":"Unrelated change?","commit_id":"bbf7ffbca8edbe6c2ede674fa293d8f2cda0a4a0"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"4fcdfbf83d234d201facbac21ec83163121c689b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"URL to endpoint\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Cluster(base.APIBase):"},{"line_number":63,"context_line":"    \"\"\"Representation of a cluster\u0027s details.\"\"\""},{"line_number":64,"context_line":"    # todo(dagnello): WSME attribute verification sometimes triggers 500 server"},{"line_number":65,"context_line":"    # error when user input was actually invalid (400).  Example: if \u0027size\u0027 was"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_38114853","line":62,"in_reply_to":"baa041b7_03d97a21","updated":"2015-04-02 17:46:31.000000000","message":"This change goes beyond that.  We are unwrapping all request and response bodies in this change, not just dealing with timestamps.","commit_id":"bbf7ffbca8edbe6c2ede674fa293d8f2cda0a4a0"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"bb9c378d31ef8e74aa58825b747aa04567577630","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"URL to endpoint\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Cluster(base.APIBase):"},{"line_number":63,"context_line":"    \"\"\"Representation of a cluster\u0027s details.\"\"\""},{"line_number":64,"context_line":"    # todo(dagnello): WSME attribute verification sometimes triggers 500 server"},{"line_number":65,"context_line":"    # error when user input was actually invalid (400).  Example: if \u0027size\u0027 was"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_0e94fedf","line":62,"in_reply_to":"baa041b7_38114853","updated":"2015-04-02 19:07:47.000000000","message":"ok, I will extract it out.  It will be a required dependency for this patch though.","commit_id":"bbf7ffbca8edbe6c2ede674fa293d8f2cda0a4a0"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"00e485fa59b5bfb3ef7048fffbc70eedc91f64e7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"URL to endpoint\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Cluster(base.APIBase):"},{"line_number":63,"context_line":"    \"\"\"Representation of a cluster\u0027s details.\"\"\""},{"line_number":64,"context_line":"    # todo(dagnello): WSME attribute verification sometimes triggers 500 server"},{"line_number":65,"context_line":"    # error when user input was actually invalid (400).  Example: if \u0027size\u0027 was"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_03d97a21","line":62,"in_reply_to":"baa041b7_ac3e61b6","updated":"2015-04-02 17:21:06.000000000","message":"It was required in order to no show updated_at field when it is not set using the new method I added in the subclass.  Would you like me to separate it out anyways?","commit_id":"bbf7ffbca8edbe6c2ede674fa293d8f2cda0a4a0"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"5531c6350fea13cd5611e0a3ce51f9fe0a197cd0","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        cluster_list \u003d [get_complete_cluster(context, obj_cluster.id)"},{"line_number":182,"context_line":"                        for obj_cluster in clusters]"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        [obj_cluster.unset_empty_fields() for obj_cluster in cluster_list]"},{"line_number":185,"context_line":"        return cluster_list"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @wsme_pecan.wsexpose(Cluster, body\u003dCluster,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa041b7_43cbd472","line":184,"updated":"2015-04-03 21:57:50.000000000","message":"Using list comprehension will create and return a list. Since we dont need this list and just want to traverse it, it would be better to do:\n\nfor obj_cluster in cluster_list:\n    obj_cluster.unset_empty_fields()","commit_id":"62602128cc2256ad47a2c59f04b3be8f8ea07b50"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"ddd3c752ba54deb367c249f5e2f4cda501f47802","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        cluster_list \u003d [get_complete_cluster(context, obj_cluster.id)"},{"line_number":182,"context_line":"                        for obj_cluster in clusters]"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        [obj_cluster.unset_empty_fields() for obj_cluster in cluster_list]"},{"line_number":185,"context_line":"        return cluster_list"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @wsme_pecan.wsexpose(Cluster, body\u003dCluster,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa041b7_cebeebd3","line":184,"in_reply_to":"baa041b7_43cbd472","updated":"2015-04-06 17:06:02.000000000","message":"Done","commit_id":"62602128cc2256ad47a2c59f04b3be8f8ea07b50"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"a0de9e6ef1e6ea163e91a4e890aa47b209eeeec5","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # only add fields we expose in the api"},{"line_number":75,"context_line":"            if hasattr(self, k):"},{"line_number":76,"context_line":"                self.fields.append(k)"},{"line_number":77,"context_line":"                if kwargs.get(k) is None:"},{"line_number":78,"context_line":"                    setattr(self, k, wtypes.Unset)"},{"line_number":79,"context_line":"                else:"},{"line_number":80,"context_line":"                    setattr(self, k, kwargs.get(k))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_31d69cf1","line":77,"updated":"2015-04-09 18:22:11.000000000","message":"Isn\u0027t this the same thing as kwargs.get(k, wtypes.Unset)","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"aec1d5b2332df329058c3749b35e686972f7a8dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            # only add fields we expose in the api"},{"line_number":75,"context_line":"            if hasattr(self, k):"},{"line_number":76,"context_line":"                self.fields.append(k)"},{"line_number":77,"context_line":"                if kwargs.get(k) is None:"},{"line_number":78,"context_line":"                    setattr(self, k, wtypes.Unset)"},{"line_number":79,"context_line":"                else:"},{"line_number":80,"context_line":"                    setattr(self, k, kwargs.get(k))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_43e38da4","line":77,"in_reply_to":"9aa53dc9_31d69cf1","updated":"2015-04-10 01:30:54.000000000","message":"no it is not because kwargs.get(k, wtypes.Unset) will return unset only if the key does not exist.  If the key exists and it is set to None, it will return None, which is what we also don\u0027t want.","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"a0de9e6ef1e6ea163e91a4e890aa47b209eeeec5","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        context \u003d pecan.request.context"},{"line_number":139,"context_line":"        cluster \u003d get_complete_cluster(context, cluster_id)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        cluster.unset_empty_fields()"},{"line_number":142,"context_line":"        return cluster"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @wsme_pecan.wsexpose(None, wtypes.text, status_code\u003d202)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_7153046c","line":141,"updated":"2015-04-09 18:22:11.000000000","message":"Still don\u0027t understand why this needs to be called, if the constructor already sets things to wstypes.Unset in the constructor.","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"aec1d5b2332df329058c3749b35e686972f7a8dd","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        context \u003d pecan.request.context"},{"line_number":139,"context_line":"        cluster \u003d get_complete_cluster(context, cluster_id)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        cluster.unset_empty_fields()"},{"line_number":142,"context_line":"        return cluster"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @wsme_pecan.wsexpose(None, wtypes.text, status_code\u003d202)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_e3f4e15b","line":141,"in_reply_to":"9aa53dc9_7153046c","updated":"2015-04-10 01:30:54.000000000","message":"you are right, I thought I had them removed.","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"}],"cue/db/sqlalchemy/alembic/versions/236f63c96b6a_.py":[{"author":{"_account_id":10584,"name":"Min Pae","username":"sputnik13","inactive":true},"change_message_id":"b25a0dd0726639b36b0ad5461445b23b9e37574d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    sa.Column(\u0027volume_size\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":46,"context_line":"    sa.Column(\u0027deleted\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":47,"context_line":"    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dFalse),"},{"line_number":48,"context_line":"    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":49,"context_line":"    sa.Column(\u0027deleted_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":50,"context_line":"    sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":51,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_4bba1be3","line":48,"updated":"2015-04-06 22:46:53.000000000","message":"Does this actually update a database to make updated_at optional?  Or is it required that a database be dropped and recreated for this to work?","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"6a1e5553468234dcc63b11612f7f8a8c9b7a779a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    sa.Column(\u0027volume_size\u0027, sa.Integer(), nullable\u003dTrue),"},{"line_number":46,"context_line":"    sa.Column(\u0027deleted\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":47,"context_line":"    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dFalse),"},{"line_number":48,"context_line":"    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":49,"context_line":"    sa.Column(\u0027deleted_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":50,"context_line":"    sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":51,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_a6c79e44","line":48,"in_reply_to":"9aa53dc9_4bba1be3","updated":"2015-04-06 23:16:12.000000000","message":"this requires a drop.  I had the other solution that does update/upgrade with alembic versions.  After discussing with Vipul it didn\u0027t justify the upgrade work because of another change (deleted field boolean to int).  Since that is not being done anymore I can do the upgrade work again for this change.  Does this change justify the time?  if it is, I can do the upgrade again.","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"}],"cue/db/sqlalchemy/api.py":[{"author":{"_account_id":10584,"name":"Min Pae","username":"sputnik13","inactive":true},"change_message_id":"b25a0dd0726639b36b0ad5461445b23b9e37574d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # if status is set to deleted, soft delete this cluster record"},{"line_number":139,"context_line":"        if (\u0027status\u0027 in cluster_values) and ("},{"line_number":140,"context_line":"                    cluster_values[\u0027status\u0027] \u003d\u003d models.Status.DELETED):"},{"line_number":141,"context_line":"            soft_delete(cluster_values)"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            cluster_values[\u0027updated_at\u0027] \u003d timeutils.utcnow()"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_cbdbcbec","line":141,"updated":"2015-04-06 22:46:53.000000000","message":"what\u0027s the purpose of adding soft delete to this patch?  soft delete is not mentioned in the commit message","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"21575e52b65a4f2c42434799f32ab13abb78efce","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # if status is set to deleted, soft delete this cluster record"},{"line_number":139,"context_line":"        if (\u0027status\u0027 in cluster_values) and ("},{"line_number":140,"context_line":"                    cluster_values[\u0027status\u0027] \u003d\u003d models.Status.DELETED):"},{"line_number":141,"context_line":"            soft_delete(cluster_values)"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            cluster_values[\u0027updated_at\u0027] \u003d timeutils.utcnow()"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_6603d610","line":141,"in_reply_to":"9aa53dc9_a6231e05","updated":"2015-04-06 23:45:34.000000000","message":"we were already making use of soft delete","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"6a1e5553468234dcc63b11612f7f8a8c9b7a779a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # if status is set to deleted, soft delete this cluster record"},{"line_number":139,"context_line":"        if (\u0027status\u0027 in cluster_values) and ("},{"line_number":140,"context_line":"                    cluster_values[\u0027status\u0027] \u003d\u003d models.Status.DELETED):"},{"line_number":141,"context_line":"            soft_delete(cluster_values)"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            cluster_values[\u0027updated_at\u0027] \u003d timeutils.utcnow()"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_a6231e05","line":141,"in_reply_to":"9aa53dc9_cbdbcbec","updated":"2015-04-06 23:16:12.000000000","message":"it is directly related to changing time stamp to OSLO\u0027s implementation which divides it into timestamp mixing for created_at and updated_at and deleted_at is grouped with soft delete mixin.  The change makes sense to be inclusive in one patch.","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"a0de9e6ef1e6ea163e91a4e890aa47b209eeeec5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            .filter_by(id\u003dcluster_id))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # if status is set to deleted, soft delete this cluster record"},{"line_number":139,"context_line":"        if (\u0027status\u0027 in cluster_values) and ("},{"line_number":140,"context_line":"                    cluster_values[\u0027status\u0027] \u003d\u003d models.Status.DELETED):"},{"line_number":141,"context_line":"            soft_delete(cluster_values)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_b1a18c48","line":139,"updated":"2015-04-09 18:22:11.000000000","message":"Can we introduce a delete_cluster() to make this a lot more explicit.  Client code should instead call delete_cluster.","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"aec1d5b2332df329058c3749b35e686972f7a8dd","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            .filter_by(id\u003dcluster_id))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # if status is set to deleted, soft delete this cluster record"},{"line_number":139,"context_line":"        if (\u0027status\u0027 in cluster_values) and ("},{"line_number":140,"context_line":"                    cluster_values[\u0027status\u0027] \u003d\u003d models.Status.DELETED):"},{"line_number":141,"context_line":"            soft_delete(cluster_values)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_6388d1c5","line":139,"in_reply_to":"9aa53dc9_b1a18c48","updated":"2015-04-10 01:30:54.000000000","message":"Can I make this change as a separate patch since I just moved this code here from above?  Also, I would think an explicit delete should actually delete the record?","commit_id":"ce95fe9398efb323dccc3d060d3a8bd664416c2c"}],"cue/tests/api/v1/test_clusters.py":[{"author":{"_account_id":10584,"name":"Min Pae","username":"sputnik13","inactive":true},"change_message_id":"b25a0dd0726639b36b0ad5461445b23b9e37574d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                      data.namespace[\"faultstring\"],"},{"line_number":195,"context_line":"                      \u0027Invalid faultstring received.\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_create_two_clusters_verify_created_time(self):"},{"line_number":198,"context_line":"        \"\"\"test creation time of second cluster happens after first.\"\"\""},{"line_number":199,"context_line":"        api_cluster_1 \u003d test_utils.create_api_test_cluster()"},{"line_number":200,"context_line":"        api_cluster_2 \u003d test_utils.create_api_test_cluster()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_864b7a59","line":197,"updated":"2015-04-06 22:46:53.000000000","message":"can you add a unit test to verify updated_at?","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"6a1e5553468234dcc63b11612f7f8a8c9b7a779a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                      data.namespace[\"faultstring\"],"},{"line_number":195,"context_line":"                      \u0027Invalid faultstring received.\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_create_two_clusters_verify_created_time(self):"},{"line_number":198,"context_line":"        \"\"\"test creation time of second cluster happens after first.\"\"\""},{"line_number":199,"context_line":"        api_cluster_1 \u003d test_utils.create_api_test_cluster()"},{"line_number":200,"context_line":"        api_cluster_2 \u003d test_utils.create_api_test_cluster()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_661d16bd","line":197,"in_reply_to":"9aa53dc9_864b7a59","updated":"2015-04-06 23:16:12.000000000","message":"ok, will also add one for deleted_at timestamp as well.","commit_id":"c540e5dfb652b52f77c3e0e83b94733b42da260c"}]}
