)]}'
{"trove/quota/quota.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"6f20e5ee170d63cb6c8bb23eeb89f9a1dec90016","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def get_all_quota_usages_by_tenant(self, tenant_id, resources):"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        Get the quota usagess for the given tenant."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        :param tenant_id: The ID of the tenant to return quotas for."},{"line_number":93,"context_line":"        :param resources: A list of the registered resources to get."}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_781f9809","line":90,"range":{"start_line":90,"start_character":22,"end_line":90,"end_character":29},"updated":"2017-02-16 17:59:55.000000000","message":"usages\n\nAnd you should also mention something here about how the default value is returned instead of creating a new one.","commit_id":"ac6cc67c45b9b6751f69684b86277185233953b5"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"6f20e5ee170d63cb6c8bb23eeb89f9a1dec90016","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def get_or_create_all_quota_usages_by_tenant(self, tenant_id, resources):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Retrieve the quota usagess for the given tenant."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param tenant_id: The ID of the tenant to return quotas for."},{"line_number":116,"context_line":"        :param resources: A list of the registered resources to get."}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_b8e67042","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":16},"updated":"2017-02-16 17:59:55.000000000","message":"Retrieve or create","commit_id":"ac6cc67c45b9b6751f69684b86277185233953b5"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"2114fbdbd46c9d9e88f720a682f17ff42f3357c7","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        Get the quota usages for the given tenant."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        For query operations, make sure do not add usage record in"},{"line_number":93,"context_line":"        the database."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        :param tenant_id: The ID of the tenant to return quotas for."},{"line_number":96,"context_line":"        :param resources: A list of the registered resources to get."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_d1f7618a","line":93,"range":{"start_line":92,"start_character":8,"end_line":93,"end_character":21},"updated":"2017-02-17 12:16:14.000000000","message":"grammar issue; also this sentence is redundant.","commit_id":"ad95a22eabcf9e24914bfe9a65018f1ee560ad6d"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"afd6fe9a3818c9828753b286223b549341e159c0","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        :param resources: A list of the registered resources to get."},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        all_usages \u003d QuotaUsage.find_all(tenant_id\u003dtenant_id).all()"},{"line_number":123,"context_line":"        result_usages \u003d {usage.resource: usage for usage in all_usages"},{"line_number":124,"context_line":"                         if usage.resource in resources}"},{"line_number":125,"context_line":"        if len(result_usages) !\u003d len(resources):"},{"line_number":126,"context_line":"            for resource in resources:"},{"line_number":127,"context_line":"                # Not in the DB, create and return default value"},{"line_number":128,"context_line":"                if resource not in result_usages:"},{"line_number":129,"context_line":"                    usage \u003d QuotaUsage.create(tenant_id\u003dtenant_id,"},{"line_number":130,"context_line":"                                              in_use\u003d0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_f1caa56d","line":127,"range":{"start_line":122,"start_character":0,"end_line":127,"end_character":64},"updated":"2017-02-17 12:10:53.000000000","message":"given that this is a repeated block of code, I\u0027d rather you refactored this as follows.\n\n_get_or_create_all_quota_usages_by_tenant(..., create\u003dFalse)\n\nThis does all the work.\n\n\nget_all_quota_usages_by_tenant()\nget_or_create_all_quota_usages_by_tenant()\n\nThese do nothing more than invoke the _get... function with create set appropriately.","commit_id":"ad95a22eabcf9e24914bfe9a65018f1ee560ad6d"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"eb9fb86b80ec0a01f1e74e3f05db32bd358167b8","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def get_all_quota_usages_by_tenant(self,"},{"line_number":89,"context_line":"                                       tenant_id,"},{"line_number":90,"context_line":"                                       resources,"},{"line_number":91,"context_line":"                                       create\u003dFalse):"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        Retrieve the quota usages for the given tenant."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_8bbebafc","line":91,"range":{"start_line":91,"start_character":46,"end_line":91,"end_character":51},"updated":"2017-06-16 13:51:57.000000000","message":"make this True, as it\u0027s the default behavior, from the unit tests","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"}],"trove/tests/unittests/quota/test_quota.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"eb9fb86b80ec0a01f1e74e3f05db32bd358167b8","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                                reserved\u003d0)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003d[])"},{"line_number":295,"context_line":"        QuotaUsage.create \u003d Mock(return_value\u003dFAKE_QUOTA)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        usage \u003d self.driver.get_quota_usage_by_tenant(FAKE_TENANT1,"},{"line_number":298,"context_line":"                                                      Resource.VOLUMES)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_cbc832a7","line":295,"range":{"start_line":295,"start_character":18,"end_line":295,"end_character":25},"updated":"2017-06-16 13:51:57.000000000","message":"looks like the default behavior is to create","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"eb9fb86b80ec0a01f1e74e3f05db32bd358167b8","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":319,"context_line":"                                                            resources.keys())"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)"},{"line_number":322,"context_line":"        self.assertEqual(Resource.INSTANCES,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_abf616d6","line":319,"updated":"2017-06-16 13:51:57.000000000","message":"Just modify this test to take create\u003dFalse.\n\nIf it passes, I think this test will be good enough.","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"aca82b633a0a7390e666971461a6f8619e821eb4","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":319,"context_line":"                                                            resources.keys())"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)"},{"line_number":322,"context_line":"        self.assertEqual(Resource.INSTANCES,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_d207b317","line":319,"in_reply_to":"7f231b9d_abf616d6","updated":"2017-06-17 11:28:54.000000000","message":"I don\u0027t think so ...","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"eb9fb86b80ec0a01f1e74e3f05db32bd358167b8","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                  in_use\u003d0,"},{"line_number":367,"context_line":"                                  reserved\u003d0)]"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":372,"context_line":"                                                            resources.keys(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_0b0e2ae4","line":369,"range":{"start_line":369,"start_character":13,"end_line":369,"end_character":30},"updated":"2017-06-16 13:51:57.000000000","message":"this should return [] if the tenant doesn\u0027t exist? see L294","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"aca82b633a0a7390e666971461a6f8619e821eb4","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                                  in_use\u003d0,"},{"line_number":367,"context_line":"                                  reserved\u003d0)]"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":372,"context_line":"                                                            resources.keys(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_b20af71c","line":369,"range":{"start_line":369,"start_character":13,"end_line":369,"end_character":30},"in_reply_to":"7f231b9d_0b0e2ae4","updated":"2017-06-17 11:28:54.000000000","message":"exactly ...","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"eb9fb86b80ec0a01f1e74e3f05db32bd358167b8","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        self.assertEqual(1, usages[Resource.VOLUMES].in_use)"},{"line_number":329,"context_line":"        self.assertEqual(1, usages[Resource.VOLUMES].reserved)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def test_get_all_quota_usages_by_exist_tenant(self):"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        FAKE_QUOTAS \u003d [QuotaUsage(tenant_id\u003dFAKE_TENANT1,"},{"line_number":334,"context_line":"                                  resource\u003dResource.INSTANCES,"},{"line_number":335,"context_line":"                                  in_use\u003d2,"},{"line_number":336,"context_line":"                                  reserved\u003d1),"},{"line_number":337,"context_line":"                       QuotaUsage(tenant_id\u003dFAKE_TENANT1,"},{"line_number":338,"context_line":"                                  resource\u003dResource.VOLUMES,"},{"line_number":339,"context_line":"                                  in_use\u003d1,"},{"line_number":340,"context_line":"                                  reserved\u003d1)]"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":345,"context_line":"                                                            resources.keys(),"},{"line_number":346,"context_line":"                                                            create\u003dTrue)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)"},{"line_number":349,"context_line":"        self.assertEqual(Resource.INSTANCES,"},{"line_number":350,"context_line":"                         usages[Resource.INSTANCES].resource)"},{"line_number":351,"context_line":"        self.assertEqual(2, usages[Resource.INSTANCES].in_use)"},{"line_number":352,"context_line":"        self.assertEqual(1, usages[Resource.INSTANCES].reserved)"},{"line_number":353,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.VOLUMES].tenant_id)"},{"line_number":354,"context_line":"        self.assertEqual(Resource.VOLUMES, usages[Resource.VOLUMES].resource)"},{"line_number":355,"context_line":"        self.assertEqual(1, usages[Resource.VOLUMES].in_use)"},{"line_number":356,"context_line":"        self.assertEqual(1, usages[Resource.VOLUMES].reserved)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def test_get_all_quota_usages_by_nonexist_tenant(self):"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        FAKE_QUOTAS \u003d [QuotaUsage(tenant_id\u003dFAKE_TENANT1,"},{"line_number":361,"context_line":"                                  resource\u003dResource.INSTANCES,"},{"line_number":362,"context_line":"                                  in_use\u003d0,"},{"line_number":363,"context_line":"                                  reserved\u003d0),"},{"line_number":364,"context_line":"                       QuotaUsage(tenant_id\u003dFAKE_TENANT1,"},{"line_number":365,"context_line":"                                  resource\u003dResource.VOLUMES,"},{"line_number":366,"context_line":"                                  in_use\u003d0,"},{"line_number":367,"context_line":"                                  reserved\u003d0)]"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        self.mock_usage_result.all \u003d Mock(return_value\u003dFAKE_QUOTAS)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        usages \u003d self.driver.get_all_quota_usages_by_tenant(FAKE_TENANT1,"},{"line_number":372,"context_line":"                                                            resources.keys(),"},{"line_number":373,"context_line":"                                                            create\u003dFalse)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)"},{"line_number":376,"context_line":"        self.assertEqual(Resource.INSTANCES,"},{"line_number":377,"context_line":"                         usages[Resource.INSTANCES].resource)"},{"line_number":378,"context_line":"        self.assertEqual(0, usages[Resource.INSTANCES].in_use)"},{"line_number":379,"context_line":"        self.assertEqual(0, usages[Resource.INSTANCES].reserved)"},{"line_number":380,"context_line":"        self.assertEqual(FAKE_TENANT1, usages[Resource.VOLUMES].tenant_id)"},{"line_number":381,"context_line":"        self.assertEqual(Resource.VOLUMES, usages[Resource.VOLUMES].resource)"},{"line_number":382,"context_line":"        self.assertEqual(0, usages[Resource.VOLUMES].in_use)"},{"line_number":383,"context_line":"        self.assertEqual(0, usages[Resource.VOLUMES].reserved)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def test_get_all_quota_usages_by_tenant_with_all_default(self):"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_cb24b260","line":383,"range":{"start_line":331,"start_character":4,"end_line":383,"end_character":62},"updated":"2017-06-16 13:51:57.000000000","message":"you can delete these after modifying the argument list in the existing test above.","commit_id":"f3097bad4c1ea595f6d1e20ade1b3bf14cb561b9"}]}
