)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bdff35d706c9deb2ad289427b6f2dc5a119dfda4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extend existing quota api to report a quota set. The quota set"},{"line_number":10,"context_line":"will contain a set of resources and its corresponding reservation,"},{"line_number":11,"context_line":"limits and in_use count for each tenant."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":14,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"},{"line_number":15,"context_line":"Change-Id: Ief2a6a4d2d7085e2a9dcd901123bc4fe6ac7ca22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9a30ddce_0649ef8b","line":12,"updated":"2017-03-07 03:40:07.000000000","message":"Could you add APIImpact tag and DocImpact tag?","commit_id":"f3d0475b458a45112098dbc1301bba4a1d70e093"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"14d9142a34e43609de8f17871eed1295762e2596","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extend existing quota api to report a quota set. The quota set"},{"line_number":10,"context_line":"will contain a set of resources and its corresponding reservation,"},{"line_number":11,"context_line":"limits and in_use count for each tenant."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":14,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"},{"line_number":15,"context_line":"Change-Id: Ief2a6a4d2d7085e2a9dcd901123bc4fe6ac7ca22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9a30ddce_49758ff7","line":12,"in_reply_to":"9a30ddce_0649ef8b","updated":"2017-03-07 19:15:40.000000000","message":"Done","commit_id":"f3d0475b458a45112098dbc1301bba4a1d70e093"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"54411315a4688806fcd78fada8511a9a10621b1c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"will contain a set of resources and its corresponding reservation,"},{"line_number":11,"context_line":"limits and in_use count for each tenant."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DocImpact"},{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"ffe62b97_506c8e35","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":9},"updated":"2017-03-24 06:02:17.000000000","message":"Could you add \"a comment about why the change impacts documentation\"[1]?\n\n[1]: https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a8d169406caa81cf05d4483300e5b1bbbc8220f5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"will contain a set of resources and its corresponding reservation,"},{"line_number":11,"context_line":"limits and in_use count for each tenant."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DocImpact"},{"line_number":14,"context_line":"APIImpact"},{"line_number":15,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"ffe62b97_255246df","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":9},"in_reply_to":"ffe62b97_506c8e35","updated":"2017-03-28 17:56:14.000000000","message":"Done","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"DocImpact:Documentation required to understand change due to new"},{"line_number":14,"context_line":"feature"},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":"Depends-On: I834e02b75c7c65eb265de03c446f8db5a9e31c1c"},{"line_number":17,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"},{"line_number":19,"context_line":"Change-Id: Ief2a6a4d2d7085e2a9dcd901123bc4fe6ac7ca22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"bff0334d_2069bfbd","line":16,"updated":"2017-04-05 20:56:17.000000000","message":"nit: It should be nice to add a space between Depends-On and APIImpact tags.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Aradhana Singh \u003caradhana1.singh@intel.com\u003e"},{"line_number":19,"context_line":"Change-Id: Ief2a6a4d2d7085e2a9dcd901123bc4fe6ac7ca22"},{"line_number":20,"context_line":"Related-bug: #1599488"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"dfeb2761_96621a16","line":20,"updated":"2017-03-30 21:00:05.000000000","message":"this needs a release note.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":10,"context_line":"will contain a set of resources and its corresponding reservation,"},{"line_number":11,"context_line":"limits and in_use count for each tenant."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DocImpact:Documentation required to understand change due to new"},{"line_number":14,"context_line":"feature"},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Prince Boateng\u003cprince.a.owusu.boateng@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"5ff73747_30008401","line":14,"range":{"start_line":13,"start_character":10,"end_line":14,"end_character":7},"updated":"2017-04-26 15:28:32.000000000","message":"that\u0027s not too informative.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"neutron/db/quota/api.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a987b8b50183c5ed643c8bcde58c58d6e0076505","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@db_api.retry_if_session_inactive()"},{"line_number":44,"context_line":"def get_quota_limit(context, tenant_id):"},{"line_number":45,"context_line":"    \"\"\"Return limit info for a given resource and tenant."},{"line_number":46,"context_line":"    :param context: Request context"},{"line_number":47,"context_line":"    :param resource: Name of the resource"},{"line_number":48,"context_line":"    :param tenant_id: Tenant identifier"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b4595337","line":45,"range":{"start_line":45,"start_character":7,"end_line":45,"end_character":57},"updated":"2017-01-06 18:26:34.000000000","message":"Return the limit number for every resource of a specific tenant.","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"be627d3ed54abd7bee20ba497de023d31b369cac","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@db_api.retry_if_session_inactive()"},{"line_number":44,"context_line":"def get_quota_limit(context, tenant_id):"},{"line_number":45,"context_line":"    \"\"\"Return limit info for a given resource and tenant."},{"line_number":46,"context_line":"    :param context: Request context"},{"line_number":47,"context_line":"    :param resource: Name of the resource"},{"line_number":48,"context_line":"    :param tenant_id: Tenant identifier"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_349ac36e","line":45,"range":{"start_line":45,"start_character":7,"end_line":45,"end_character":57},"in_reply_to":"ba5201f7_b4595337","updated":"2017-01-07 00:05:27.000000000","message":"Done","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a987b8b50183c5ed643c8bcde58c58d6e0076505","unresolved":false,"context_lines":[{"line_number":44,"context_line":"def get_quota_limit(context, tenant_id):"},{"line_number":45,"context_line":"    \"\"\"Return limit info for a given resource and tenant."},{"line_number":46,"context_line":"    :param context: Request context"},{"line_number":47,"context_line":"    :param resource: Name of the resource"},{"line_number":48,"context_line":"    :param tenant_id: Tenant identifier"},{"line_number":49,"context_line":"    :returns: Quota limit"},{"line_number":50,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b47073a5","line":47,"range":{"start_line":47,"start_character":4,"end_line":47,"end_character":41},"updated":"2017-01-06 18:26:34.000000000","message":"The resource param is not used","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"be627d3ed54abd7bee20ba497de023d31b369cac","unresolved":false,"context_lines":[{"line_number":44,"context_line":"def get_quota_limit(context, tenant_id):"},{"line_number":45,"context_line":"    \"\"\"Return limit info for a given resource and tenant."},{"line_number":46,"context_line":"    :param context: Request context"},{"line_number":47,"context_line":"    :param resource: Name of the resource"},{"line_number":48,"context_line":"    :param tenant_id: Tenant identifier"},{"line_number":49,"context_line":"    :returns: Quota limit"},{"line_number":50,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_748e0b2f","line":47,"range":{"start_line":47,"start_character":4,"end_line":47,"end_character":41},"in_reply_to":"ba5201f7_b47073a5","updated":"2017-01-07 00:05:27.000000000","message":"done","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a987b8b50183c5ed643c8bcde58c58d6e0076505","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    :returns: Quota limit"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    query \u003d common_db_api.model_query(context, quota_models.Quota)"},{"line_number":52,"context_line":"    query \u003d query.filter(tenant_id \u003d\u003d tenant_id)"},{"line_number":53,"context_line":"    if not query.first():"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    return dict((item.resource, item.limit) for item in query)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_f123edba","line":52,"range":{"start_line":52,"start_character":25,"end_line":52,"end_character":34},"updated":"2017-01-06 18:26:34.000000000","message":"s/tenant_id/project_id","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a987b8b50183c5ed643c8bcde58c58d6e0076505","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    query \u003d common_db_api.model_query(context, quota_models.Quota)"},{"line_number":52,"context_line":"    query \u003d query.filter(tenant_id \u003d\u003d tenant_id)"},{"line_number":53,"context_line":"    if not query.first():"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    return dict((item.resource, item.limit) for item in query)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_549e67b9","line":54,"range":{"start_line":53,"start_character":4,"end_line":54,"end_character":14},"updated":"2017-01-06 18:26:34.000000000","message":"I\u0027m not sure if this is needed","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"be627d3ed54abd7bee20ba497de023d31b369cac","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    query \u003d common_db_api.model_query(context, quota_models.Quota)"},{"line_number":52,"context_line":"    query \u003d query.filter(tenant_id \u003d\u003d tenant_id)"},{"line_number":53,"context_line":"    if not query.first():"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    return dict((item.resource, item.limit) for item in query)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_f47afb22","line":54,"range":{"start_line":53,"start_character":4,"end_line":54,"end_character":14},"in_reply_to":"ba5201f7_549e67b9","updated":"2017-01-07 00:05:27.000000000","message":"done","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"4724449f24a14a17d63a6fc1613bbb65efb0574c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if lock_for_update:"},{"line_number":59,"context_line":"        query \u003d query.with_lockmode(\u0027update\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    result \u003d query.first()"},{"line_number":62,"context_line":"    if not result:"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_7722ad53","side":"PARENT","line":60,"updated":"2017-01-17 17:55:40.000000000","message":"why are you removing this linespace ? i would say restore it back","commit_id":"62fb004af60ba2def7304463d16cf602b4a60911"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d29f469b03d359e931354dca8744e14bc3d8f1cc","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if lock_for_update:"},{"line_number":59,"context_line":"        query \u003d query.with_lockmode(\u0027update\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    result \u003d query.first()"},{"line_number":62,"context_line":"    if not result:"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_507f7765","side":"PARENT","line":60,"in_reply_to":"7a3c09a3_7722ad53","updated":"2017-01-17 18:17:24.000000000","message":"I did not remove this linespace but I will restore it in next patch. Thanks","commit_id":"62fb004af60ba2def7304463d16cf602b4a60911"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b579165b53d11c4f979b42a5429346d272e9ac84","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if lock_for_update:"},{"line_number":59,"context_line":"        query \u003d query.with_lockmode(\u0027update\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    result \u003d query.first()"},{"line_number":62,"context_line":"    if not result:"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_d26dab33","side":"PARENT","line":60,"updated":"2017-01-19 23:56:39.000000000","message":"nit: this change is not needed","commit_id":"62fb004af60ba2def7304463d16cf602b4a60911"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"105ce9d10f74d9e1926093d3db5174127fbb8983","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if lock_for_update:"},{"line_number":59,"context_line":"        query \u003d query.with_lockmode(\u0027update\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    result \u003d query.first()"},{"line_number":62,"context_line":"    if not result:"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_c07d9e1d","side":"PARENT","line":60,"in_reply_to":"5a3905b3_d26dab33","updated":"2017-01-20 19:45:59.000000000","message":"I made no changes here. I will look at the reason why this keeps on popping up and fix it.","commit_id":"62fb004af60ba2def7304463d16cf602b4a60911"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"bacfce6c8bf3b633b1f51600f7e46b922ed81afd","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if lock_for_update:"},{"line_number":59,"context_line":"        query \u003d query.with_lockmode(\u0027update\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    result \u003d query.first()"},{"line_number":62,"context_line":"    if not result:"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_e7e12b9c","side":"PARENT","line":60,"updated":"2017-01-25 05:53:04.000000000","message":"added this line back","commit_id":"62fb004af60ba2def7304463d16cf602b4a60911"}],"neutron/db/quota/driver.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"10e054d65580efea20ee053bfc2925edacd95059","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                    resync_usage\u003dFalse),"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        q_qry \u003d common_db.model_query(context, quota_models.Quota).filter_by("},{"line_number":90,"context_line":"            tenant_id\u003dtenant_id)"},{"line_number":91,"context_line":"        for item in q_qry:"},{"line_number":92,"context_line":"            tenant_quota_ext[item[\u0027resource\u0027]][\u0027limit\u0027] \u003d item[\u0027limit\u0027]"},{"line_number":93,"context_line":"        return tenant_quota_ext"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_6badfe30","line":90,"range":{"start_line":89,"start_character":8,"end_line":90,"end_character":32},"updated":"2016-10-11 04:07:26.000000000","message":"Shouldn\u0027t it be done using OVO?\n\nHmm... I don\u0027t see it\u0027s done already, so probably it\u0027s for further modification.","commit_id":"abc396e6305468495a37fb527a697aee851d84a6"},{"author":{"_account_id":14615,"name":"Sergey Belous","email":"belous.py@gmail.com","username":"sbelous"},"change_message_id":"775d01d05f53fe8709512abf12a8bc50c89c9ba5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                    resync_usage\u003dFalse),"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        q_qry \u003d common_db.model_query(context, quota_models.Quota).filter_by("},{"line_number":90,"context_line":"            tenant_id\u003dtenant_id)"},{"line_number":91,"context_line":"        for item in q_qry:"},{"line_number":92,"context_line":"            tenant_quota_ext[item[\u0027resource\u0027]][\u0027limit\u0027] \u003d item[\u0027limit\u0027]"},{"line_number":93,"context_line":"        return tenant_quota_ext"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_92951b42","line":90,"range":{"start_line":89,"start_character":8,"end_line":90,"end_character":32},"in_reply_to":"fa6399be_6badfe30","updated":"2016-10-12 14:26:50.000000000","message":"Yep, It looks like not done already. The method above is using the same method (with tenant_id param).\n(you mean, using OVO in context with tenant_id/project_id, right? Or I missed something? :(","commit_id":"abc396e6305468495a37fb527a697aee851d84a6"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"eb9f9ca7fff1011843d9f2846f98a24a7d689ff0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                                    resync_usage\u003dFalse),"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        q_qry \u003d common_db.model_query(context, quota_models.Quota).filter_by("},{"line_number":90,"context_line":"            tenant_id\u003dtenant_id)"},{"line_number":91,"context_line":"        for item in q_qry:"},{"line_number":92,"context_line":"            tenant_quota_ext[item[\u0027resource\u0027]][\u0027limit\u0027] \u003d item[\u0027limit\u0027]"},{"line_number":93,"context_line":"        return tenant_quota_ext"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_d3a02a46","line":90,"range":{"start_line":89,"start_character":8,"end_line":90,"end_character":32},"in_reply_to":"fa6399be_92951b42","updated":"2016-10-12 19:04:22.000000000","message":"@Sergey, I was thinking about OVO in context of [1] \nBut I\u0027ve checked that Quota OVO implementation is not ready yet [2]. So probably better idea is just to keep it in mind. When OVO will be finished, then all the necessary changes can be applied.\nMaybe just good idea would be to add TODO info.\n\n[1] https://review.openstack.org/#/q/topic:bp/adopt-oslo-versioned-objects-for-db\n[2] Ica85059b7ace0a4ec619cb0d4f712d55fd2c3af5","commit_id":"abc396e6305468495a37fb527a697aee851d84a6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a987b8b50183c5ed643c8bcde58c58d6e0076505","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @staticmethod"},{"line_number":77,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":78,"context_line":"    def get_detailed_tenant_quotas(context, resources, tenant_id):"},{"line_number":79,"context_line":"        tenant_quota_ext \u003d dict()"},{"line_number":80,"context_line":"        for key, resource in resources.items():"},{"line_number":81,"context_line":"            tenant_quota_ext[key] \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b4431312","line":78,"range":{"start_line":78,"start_character":4,"end_line":78,"end_character":66},"updated":"2017-01-06 18:26:34.000000000","message":"It seems like the documentation of this method is missing","commit_id":"9c984bef81816ef64f801de4c6f7779121f5e14c"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e0ef56163fc5f31974a401fbdf215dd2f5d05f71","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        #update with specific tenant limits"},{"line_number":98,"context_line":"        q_qry \u003d db_utils.model_quey(context, quota_models.Quota).filter_by("},{"line_number":99,"context_line":"                tenant_id\u003dtenant_id)"},{"line_number":100,"context_line":"        for item in q_qry:"},{"line_number":101,"context_line":"            tenant_quota_ext[item[\u0027resource\u0027]][\u0027limit\u0027] \u003d item[\u0027limit\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_defce640","line":98,"range":{"start_line":98,"start_character":25,"end_line":98,"end_character":35},"updated":"2017-01-13 17:54:37.000000000","message":"model_query","commit_id":"51dc9be4826340dadd3499ba18431ec114321be2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        ( limit, used, reserved) for the given tenant."},{"line_number":81,"context_line":"        :param context: The request context, for access checks."},{"line_number":82,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":83,"context_line":"        :param tenant_id: The ID of the tenant to return detailed  quotas for."},{"line_number":84,"context_line":"        :return dict: from resource name to dict of name,"},{"line_number":85,"context_line":"        limit, used and reserved"},{"line_number":86,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_5de22430","line":83,"range":{"start_line":83,"start_character":66,"end_line":83,"end_character":67},"updated":"2017-01-17 23:14:16.000000000","message":"nit: an extra space","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        limit, used and reserved"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        tenant_quota_ext \u003d dict()"},{"line_number":88,"context_line":"        for key, resource in resources.items():"},{"line_number":89,"context_line":"            tenant_quota_ext[key] \u003d {"},{"line_number":90,"context_line":"                \u0027limit\u0027: resource.default,"},{"line_number":91,"context_line":"                \u0027used\u0027: resource.count_used(context, None, tenant_id,"},{"line_number":92,"context_line":"                                           resync_usage\u003dFalse),"},{"line_number":93,"context_line":"                \u0027reserved\u0027: resource.count_reserved(context, None, tenant_id,"},{"line_number":94,"context_line":"                                            resync_usage\u003dFalse),"},{"line_number":95,"context_line":"            }"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        #update with specific tenant limits"},{"line_number":98,"context_line":"        q_qry \u003d db_utils.model_query(context, quota_models.Quota).filter_by("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_3d063820","line":95,"range":{"start_line":88,"start_character":0,"end_line":95,"end_character":13},"updated":"2017-01-17 23:14:16.000000000","message":"Even when the number of resources could be small, we\u0027ve to take care of this kind of functions.  This implementation will open two db connections to fetch information about the a specific resource, can you change this to get all required data from the db in two steps? something like:\n\n* Creating a new function similar than get_quota_usage_by_resource_and_tenant() but without filtering by resource.\n* Using get_reservations_for_resources() function without restricting the number of resources in the resource argument.","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"105ce9d10f74d9e1926093d3db5174127fbb8983","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        :return dict: from resource name to dict of name,"},{"line_number":85,"context_line":"        limit, used and reserved"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        tenant_usage_info \u003d quota_api.get_quota_usage_by_tenant_id("},{"line_number":88,"context_line":"                                                 context, tenant_id)"},{"line_number":89,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources(context,"},{"line_number":90,"context_line":"                                                 tenant_id, resources.keys())"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_e0f45a88","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":26},"updated":"2017-01-20 19:45:59.000000000","message":"place comment to show what is being done here","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"105ce9d10f74d9e1926093d3db5174127fbb8983","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        tenant_usage_info \u003d quota_api.get_quota_usage_by_tenant_id("},{"line_number":88,"context_line":"                                                 context, tenant_id)"},{"line_number":89,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources(context,"},{"line_number":90,"context_line":"                                                 tenant_id, resources.keys())"},{"line_number":91,"context_line":"        tenant_quota_ext \u003d dict()"},{"line_number":92,"context_line":"        for key, resource in resources.items():"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_20ef42b1","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":24},"updated":"2017-01-20 19:45:59.000000000","message":"ditto","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"c0ce0ff8a18a5995ee512a83a0b9d16dd38c0e7c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        limit, used and reserved"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        # get quota usage for a specific tenant"},{"line_number":88,"context_line":"        tenant_usage_info \u003d quota_api.get_quota_usage_by_tenant_id("},{"line_number":89,"context_line":"                                                 context, tenant_id)"},{"line_number":90,"context_line":"        # get total amount of reservations given a list of resources"},{"line_number":91,"context_line":"        # for a specific tenant"},{"line_number":92,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_4e9e1a64","line":89,"range":{"start_line":88,"start_character":8,"end_line":89,"end_character":68},"updated":"2017-01-30 05:11:17.000000000","message":"record in quotausages table is generally obsolete since db is not updated immediately a resource is created","commit_id":"8aed1a82a37373d967c5629cf633604cbecdf118"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    @staticmethod"},{"line_number":76,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":77,"context_line":"    def get_detailed_tenant_quotas(context, resources, tenant_id, plugin):"},{"line_number":78,"context_line":"        \"\"\"Given a list of resources, retrieve the detailed quotas"},{"line_number":79,"context_line":"        ( limit, used, reserved) for the given tenant."},{"line_number":80,"context_line":"        :param context: The request context, for access checks."},{"line_number":81,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":82,"context_line":"        :param tenant_id: The ID of the tenant/ tenant identifier."}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_405e03e7","line":79,"range":{"start_line":78,"start_character":11,"end_line":79,"end_character":54},"updated":"2017-04-05 20:56:17.000000000","message":"Given a list of resources and a specific tenant, retrieve the detailed quotas( limit, used, reserved).","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        ( limit, used, reserved) for the given tenant."},{"line_number":80,"context_line":"        :param context: The request context, for access checks."},{"line_number":81,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":82,"context_line":"        :param tenant_id: The ID of the tenant/ tenant identifier."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding"},{"line_number":84,"context_line":"        limit, used and reserved"},{"line_number":85,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_6d5c3e4b","line":82,"range":{"start_line":82,"start_character":15,"end_line":82,"end_character":24},"updated":"2017-04-06 11:41:48.000000000","message":"missing PLUGIN param","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        ( limit, used, reserved) for the given tenant."},{"line_number":80,"context_line":"        :param context: The request context, for access checks."},{"line_number":81,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":82,"context_line":"        :param tenant_id: The ID of the tenant/ tenant identifier."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding"},{"line_number":84,"context_line":"        limit, used and reserved"},{"line_number":85,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_2021bf4e","line":82,"range":{"start_line":82,"start_character":46,"end_line":82,"end_character":65},"updated":"2017-04-05 20:56:17.000000000","message":"this can be omitted","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding"},{"line_number":84,"context_line":"        limit, used and reserved"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        # get total amount of reservations given a list of resources"},{"line_number":87,"context_line":"        # for a specific tenant"},{"line_number":88,"context_line":"        # The current implementation of reservations returns the default"},{"line_number":89,"context_line":"        # value \"0\""},{"line_number":90,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources(context,"},{"line_number":91,"context_line":"                                                 tenant_id, resources.keys())"},{"line_number":92,"context_line":"        tenant_quota_ext \u003d dict()"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_20241fc6","line":89,"range":{"start_line":86,"start_character":8,"end_line":89,"end_character":19},"updated":"2017-04-05 20:56:17.000000000","message":"IMHO, these comments are not needed, maybe it can be specified in the previous line that zero will be the default value.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding"},{"line_number":84,"context_line":"        limit, used and reserved"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        # get total amount of reservations given a list of resources"},{"line_number":87,"context_line":"        # for a specific tenant"},{"line_number":88,"context_line":"        # The current implementation of reservations returns the default"},{"line_number":89,"context_line":"        # value \"0\""},{"line_number":90,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources(context,"},{"line_number":91,"context_line":"                                                 tenant_id, resources.keys())"},{"line_number":92,"context_line":"        tenant_quota_ext \u003d dict()"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_0d63721c","line":89,"range":{"start_line":86,"start_character":8,"end_line":89,"end_character":19},"in_reply_to":"bff0334d_20241fc6","updated":"2017-04-06 11:41:48.000000000","message":"+1 , can be updated in Line#83","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        for key, resource in resources.items():"},{"line_number":94,"context_line":"            tenant_quota_ext[key] \u003d {"},{"line_number":95,"context_line":"                \u0027limit\u0027: resource.default,"},{"line_number":96,"context_line":"                \u0027used\u0027: resource.count_used("},{"line_number":97,"context_line":"                        context, tenant_id, resync_usage\u003dFalse)"},{"line_number":98,"context_line":"                if isinstance(resource, res.TrackedResource) else"},{"line_number":99,"context_line":"                resource.count(context, plugin, tenant_id),"},{"line_number":100,"context_line":"                \u0027reserved\u0027: res_reserve_info.get(key, 0),"},{"line_number":101,"context_line":"            }"},{"line_number":102,"context_line":"        #update with specific tenant limits"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_80c2cbe8","line":99,"range":{"start_line":96,"start_character":24,"end_line":99,"end_character":58},"updated":"2017-04-05 20:56:17.000000000","message":"Shouldn\u0027t be better to have this in a previous line\n\nused \u003d resource.count_used(context, tenant_id, resync_usage\u003dFalse) if isinstance(resource, res.TrackedResource) else resource.count(context, plugin, tenant_id)","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        for key, resource in resources.items():"},{"line_number":94,"context_line":"            tenant_quota_ext[key] \u003d {"},{"line_number":95,"context_line":"                \u0027limit\u0027: resource.default,"},{"line_number":96,"context_line":"                \u0027used\u0027: resource.count_used("},{"line_number":97,"context_line":"                        context, tenant_id, resync_usage\u003dFalse)"},{"line_number":98,"context_line":"                if isinstance(resource, res.TrackedResource) else"},{"line_number":99,"context_line":"                resource.count(context, plugin, tenant_id),"},{"line_number":100,"context_line":"                \u0027reserved\u0027: res_reserve_info.get(key, 0),"},{"line_number":101,"context_line":"            }"},{"line_number":102,"context_line":"        #update with specific tenant limits"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_8869b0bf","line":99,"range":{"start_line":96,"start_character":24,"end_line":99,"end_character":58},"in_reply_to":"bff0334d_80c2cbe8","updated":"2017-04-06 11:41:48.000000000","message":"I am worried about the indentation here , a bit","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        #update with specific tenant limits"},{"line_number":103,"context_line":"        quota_objs \u003d quota_obj.Quota.get_objects(context, project_id\u003dtenant_id)"},{"line_number":104,"context_line":"        for item in quota_objs:"},{"line_number":105,"context_line":"            tenant_quota_ext[item[\u0027resource\u0027]][\u0027limit\u0027] \u003d item[\u0027limit\u0027]"},{"line_number":106,"context_line":"        return tenant_quota_ext"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_68478c1f","line":105,"range":{"start_line":105,"start_character":35,"end_line":105,"end_character":43},"updated":"2017-04-06 11:41:48.000000000","message":"Are we sure that \u0027resource\u0027 would be a Key ? \nI was of the idea that it would be type of a resource and not \u0027resource\u0027 per se","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e2fb9f1a4f7a468e1b446bdcdd9190c6abe498b5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                used \u003d resource.count_used(context, tenant_id,"},{"line_number":97,"context_line":"                                           resync_usage\u003dFalse)"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                plugins \u003d directory.get_plugins()"},{"line_number":100,"context_line":"                if key in plugins:"},{"line_number":101,"context_line":"                    plugin \u003d plugins[key]"},{"line_number":102,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7ffa3b31_958024c1","line":99,"updated":"2017-04-20 23:26:46.000000000","message":"plugin \u003d plugins.get(key, \u0027CORE\u0027)","commit_id":"8bfa7bd42cd6ef4e80453ac768c78877e987d983"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":78,"context_line":"    def get_detailed_tenant_quotas(context, resources, tenant_id):"},{"line_number":79,"context_line":"        \"\"\"Given a list of resources and a sepecific tenant, retrieve"},{"line_number":80,"context_line":"        the detailed quotas ( limit, used, reserved)."},{"line_number":81,"context_line":"        :param context: The request context, for access checks."},{"line_number":82,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding limit"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_d025e0ac","line":80,"range":{"start_line":80,"start_character":29,"end_line":80,"end_character":30},"updated":"2017-04-26 15:28:32.000000000","message":"remove","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":78,"context_line":"    def get_detailed_tenant_quotas(context, resources, tenant_id):"},{"line_number":79,"context_line":"        \"\"\"Given a list of resources and a sepecific tenant, retrieve"},{"line_number":80,"context_line":"        the detailed quotas ( limit, used, reserved)."},{"line_number":81,"context_line":"        :param context: The request context, for access checks."},{"line_number":82,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding limit"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_82ceaeb1","line":80,"range":{"start_line":80,"start_character":29,"end_line":80,"end_character":30},"in_reply_to":"5ff73747_d025e0ac","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        :param context: The request context, for access checks."},{"line_number":82,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding limit"},{"line_number":84,"context_line":"        used and reserved. Reserved currently returns default value of 0"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources("},{"line_number":87,"context_line":"            context, tenant_id, resources.keys())"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e4d6d527","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":12},"updated":"2017-04-26 18:33:46.000000000","message":"Needs more indent level as a correct docstring","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        :param context: The request context, for access checks."},{"line_number":82,"context_line":"        :param resources: A dictionary of the registered resource keys."},{"line_number":83,"context_line":"        :return dict: mapping resource name in dict to its correponding limit"},{"line_number":84,"context_line":"        used and reserved. Reserved currently returns default value of 0"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources("},{"line_number":87,"context_line":"            context, tenant_id, resources.keys())"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_22bd9a01","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":12},"in_reply_to":"5ff73747_e4d6d527","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources("},{"line_number":87,"context_line":"            context, tenant_id, resources.keys())"},{"line_number":88,"context_line":"        tenant_quota_ext \u003d dict()"},{"line_number":89,"context_line":"        for key, resource in resources.items():"},{"line_number":90,"context_line":"            if isinstance(resource, res.TrackedResource):"},{"line_number":91,"context_line":"                used \u003d resource.count_used(context, tenant_id,"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_64e2c503","line":88,"range":{"start_line":88,"start_character":27,"end_line":88,"end_character":33},"updated":"2017-04-26 18:33:46.000000000","message":"-\u003e {}","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        res_reserve_info \u003d quota_api.get_reservations_for_resources("},{"line_number":87,"context_line":"            context, tenant_id, resources.keys())"},{"line_number":88,"context_line":"        tenant_quota_ext \u003d dict()"},{"line_number":89,"context_line":"        for key, resource in resources.items():"},{"line_number":90,"context_line":"            if isinstance(resource, res.TrackedResource):"},{"line_number":91,"context_line":"                used \u003d resource.count_used(context, tenant_id,"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e238d2a0","line":88,"range":{"start_line":88,"start_character":27,"end_line":88,"end_character":33},"in_reply_to":"5ff73747_64e2c503","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                           resync_usage\u003dFalse)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                plugins \u003d directory.get_plugins()"},{"line_number":95,"context_line":"                plugin \u003d plugins.get(key, plugins[\u0027CORE\u0027])"},{"line_number":96,"context_line":"                used \u003d resource.count(context, plugin, tenant_id)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            tenant_quota_ext[key] \u003d {"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e4bb75c1","line":95,"range":{"start_line":95,"start_character":50,"end_line":95,"end_character":56},"updated":"2017-04-26 18:33:46.000000000","message":"We prefer to neutron_lib.plugins.constants.CORE rather than a literal string.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                           resync_usage\u003dFalse)"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                plugins \u003d directory.get_plugins()"},{"line_number":95,"context_line":"                plugin \u003d plugins.get(key, plugins[\u0027CORE\u0027])"},{"line_number":96,"context_line":"                used \u003d resource.count(context, plugin, tenant_id)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            tenant_quota_ext[key] \u003d {"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_c23dd68f","line":95,"range":{"start_line":95,"start_character":50,"end_line":95,"end_character":56},"in_reply_to":"5ff73747_e4bb75c1","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"neutron/extensions/quotasv2.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"4724449f24a14a17d63a6fc1613bbb65efb0574c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":116,"context_line":"        return {self._resource_name: self._get_quotas(request, id)}"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def detail(self, request, id):"},{"line_number":119,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":120,"context_line":"            self._check_admin(request.context,"},{"line_number":121,"context_line":"                              reason\u003d_(\"Only admin is authorized \""},{"line_number":122,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":123,"context_line":"        return {self._resource_name: self._get_detailed_quotas(request, id)}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _check_admin(self, context,"},{"line_number":126,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_7a56145d","line":123,"range":{"start_line":118,"start_character":4,"end_line":123,"end_character":76},"updated":"2017-01-17 17:55:40.000000000","message":"this is repetition of code L83-L88 is same, and can be used","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d29f469b03d359e931354dca8744e14bc3d8f1cc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":116,"context_line":"        return {self._resource_name: self._get_quotas(request, id)}"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def detail(self, request, id):"},{"line_number":119,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":120,"context_line":"            self._check_admin(request.context,"},{"line_number":121,"context_line":"                              reason\u003d_(\"Only admin is authorized \""},{"line_number":122,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":123,"context_line":"        return {self._resource_name: self._get_detailed_quotas(request, id)}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _check_admin(self, context,"},{"line_number":126,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_b0741b36","line":123,"range":{"start_line":118,"start_character":4,"end_line":123,"end_character":76},"in_reply_to":"7a3c09a3_7a56145d","updated":"2017-01-17 18:17:24.000000000","message":"I don\u0027t understand. Are you saying default should be reused instead of detail?","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b4bb18d90587d5c67a33f81a4d1f2354ec2ed41","unresolved":false,"context_lines":[{"line_number":128,"context_line":"class Quotasv2(api_extensions.ExtensionDescriptor):"},{"line_number":129,"context_line":"    \"\"\"Quotas management support.\"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    extensions.register_custom_supported_check("},{"line_number":132,"context_line":"        RESOURCE_COLLECTION, lambda: True, plugin_agnostic\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":53,"id":"3f1d235d_81252bae","line":131,"updated":"2017-07-09 05:07:42.000000000","message":"this looks like it is unrelated","commit_id":"6fa5ff68eb70f6869252b8f41aed67af65ae8e5f"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"319bbf7e2c1bd0dfb26aa4db38d08ec17d5ca711","unresolved":false,"context_lines":[{"line_number":128,"context_line":"class Quotasv2(api_extensions.ExtensionDescriptor):"},{"line_number":129,"context_line":"    \"\"\"Quotas management support.\"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    extensions.register_custom_supported_check("},{"line_number":132,"context_line":"        RESOURCE_COLLECTION, lambda: True, plugin_agnostic\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":53,"id":"1f1a1f67_d850840d","line":131,"in_reply_to":"3f1d235d_81252bae","updated":"2017-07-13 23:22:01.000000000","message":"this makes sure quotasv2 is always loaded is quotadetails depends on this and avoids raiseing ExtensionNotFound exceptions https://github.com/openstack/neutron/blob/master/neutron/api/extensions.py#L321-L389 for existing unit tests","commit_id":"6fa5ff68eb70f6869252b8f41aed67af65ae8e5f"}],"neutron/extensions/quotasv2_detail.py":[{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f8393dcb71a415df89c74a90c974b55f5591b907","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":27,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":28,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":29,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":30,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":31,"context_line":"    RESOURCE_COLLECTION: {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa31d9ce_09cc7388","line":28,"updated":"2017-02-10 21:29:06.000000000","message":"This new extension has the same alias as the existing quotasv2 extension. Don\u0027t we need to have a new alias for this new resource?","commit_id":"29757b085ba64af0646f3c06b6ff3ae18d37153b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"c22da6b92f12a36a4736157afa610ed005153ebc","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":27,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":28,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":29,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":30,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":31,"context_line":"    RESOURCE_COLLECTION: {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa31d9ce_b1b58dce","line":28,"in_reply_to":"fa31d9ce_09cc7388","updated":"2017-02-10 23:26:07.000000000","message":"Done","commit_id":"29757b085ba64af0646f3c06b6ff3ae18d37153b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"cdc10a5d0f81bf86263fc2a400cc2119e93214ee","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def get_updated(cls):"},{"line_number":55,"context_line":"        return \"2012-07-29T10:00:00-00:00\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @classmethod"},{"line_number":58,"context_line":"    def get_resources(cls):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa31d9ce_e440560a","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":41},"updated":"2017-02-09 23:54:22.000000000","message":"I think the time for this should changehttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/extensions.py#L46","commit_id":"29757b085ba64af0646f3c06b6ff3ae18d37153b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"c22da6b92f12a36a4736157afa610ed005153ebc","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def get_updated(cls):"},{"line_number":55,"context_line":"        return \"2012-07-29T10:00:00-00:00\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @classmethod"},{"line_number":58,"context_line":"    def get_resources(cls):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa31d9ce_d1ca014f","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":41},"in_reply_to":"fa31d9ce_e440560a","updated":"2017-02-10 23:26:07.000000000","message":"Done","commit_id":"29757b085ba64af0646f3c06b6ff3ae18d37153b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"3630289b7a6530896a0cfd4066ef457dc72191e7","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":36,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":37,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":38,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":39,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":40,"context_line":"    RESOURCE_COLLECTION: {}"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa31d9ce_ec955fe4","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":41},"updated":"2017-02-11 18:40:50.000000000","message":"The alias for the new extension should be different from the existing alias of quotasv2 extension.","commit_id":"5912f273cb0fcef8c286fc326ade3d1095c9bd8e"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"5afb03c5375a57308e71a97dc65d73efc30135df","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":36,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":37,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":38,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":39,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":40,"context_line":"    RESOURCE_COLLECTION: {}"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa31d9ce_16c96459","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":41},"in_reply_to":"fa31d9ce_ec955fe4","updated":"2017-02-15 04:02:45.000000000","message":"alias has been updated in get_alias method","commit_id":"5912f273cb0fcef8c286fc326ade3d1095c9bd8e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"29b72c589b246f72d40f64637f2d52a9efd892fb","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def get_resources(cls):"},{"line_number":134,"context_line":"        \"\"\"Returns Ext Resources.\"\"\""},{"line_number":135,"context_line":"        controller \u003d resource.Resource("},{"line_number":136,"context_line":"            quotasv2.QuotaSetsController(directory.get_plugin()),"},{"line_number":137,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":138,"context_line":"        return [extensions.ResourceExtension("},{"line_number":139,"context_line":"            Quotasv2_detail.get_alias(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa31d9ce_8abf52fa","line":136,"range":{"start_line":136,"start_character":12,"end_line":136,"end_character":64},"updated":"2017-02-13 06:09:05.000000000","message":"I don\u0027t think we still need to use this controller since this new extension now has a controller; DetailQuotaSetsController","commit_id":"5912f273cb0fcef8c286fc326ade3d1095c9bd8e"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"5afb03c5375a57308e71a97dc65d73efc30135df","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def get_resources(cls):"},{"line_number":134,"context_line":"        \"\"\"Returns Ext Resources.\"\"\""},{"line_number":135,"context_line":"        controller \u003d resource.Resource("},{"line_number":136,"context_line":"            quotasv2.QuotaSetsController(directory.get_plugin()),"},{"line_number":137,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":138,"context_line":"        return [extensions.ResourceExtension("},{"line_number":139,"context_line":"            Quotasv2_detail.get_alias(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa31d9ce_36c4a83e","line":136,"range":{"start_line":136,"start_character":12,"end_line":136,"end_character":64},"in_reply_to":"fa31d9ce_8abf52fa","updated":"2017-02-15 04:02:45.000000000","message":"Done","commit_id":"5912f273cb0fcef8c286fc326ade3d1095c9bd8e"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7dd7023145b7aa8dd281723b36a83b3d9ed19ff0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    @classmethod"},{"line_number":91,"context_line":"    def get_resources(cls):"},{"line_number":92,"context_line":"        \"\"\"Returns Ext Resources.\"\"\""},{"line_number":93,"context_line":"        parent \u003d {\u0027collection_name\u0027: \u0027quotas\u0027, \u0027member_name\u0027: \u0027quotas\u0027}"},{"line_number":94,"context_line":"        controller \u003d resource.Resource("},{"line_number":95,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":96,"context_line":"            faults\u003dbase.FAULT_MAP)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_19d97057","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":71},"updated":"2017-02-15 20:21:05.000000000","message":"not needed","commit_id":"21c971fe42cccd4b3c74dfa5e8d5989431d9c1ec"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7dd7023145b7aa8dd281723b36a83b3d9ed19ff0","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":96,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":97,"context_line":"        return [extensions.ResourceExtension("},{"line_number":98,"context_line":"            Quotasv2_detail.get_alias(),"},{"line_number":99,"context_line":"            controller,"},{"line_number":100,"context_line":"            parent\u003dparent,"},{"line_number":101,"context_line":"            member_actions\u003d{DETAIL_QUOTAS_ACTION: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_f9d57c1b","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":39},"updated":"2017-02-15 20:21:05.000000000","message":"since you want this to be under the \u0027quotas\u0027 resource, change this to just \u0027quotas\u0027.","commit_id":"21c971fe42cccd4b3c74dfa5e8d5989431d9c1ec"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7dd7023145b7aa8dd281723b36a83b3d9ed19ff0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return [extensions.ResourceExtension("},{"line_number":98,"context_line":"            Quotasv2_detail.get_alias(),"},{"line_number":99,"context_line":"            controller,"},{"line_number":100,"context_line":"            parent\u003dparent,"},{"line_number":101,"context_line":"            member_actions\u003d{DETAIL_QUOTAS_ACTION: \u0027GET\u0027},"},{"line_number":102,"context_line":"            collection_actions\u003d{\u0027tenant\u0027: \u0027GET\u0027})]"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_99e5600a","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":26},"updated":"2017-02-15 20:21:05.000000000","message":"not needed","commit_id":"21c971fe42cccd4b3c74dfa5e8d5989431d9c1ec"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7dd7023145b7aa8dd281723b36a83b3d9ed19ff0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            Quotasv2_detail.get_alias(),"},{"line_number":99,"context_line":"            controller,"},{"line_number":100,"context_line":"            parent\u003dparent,"},{"line_number":101,"context_line":"            member_actions\u003d{DETAIL_QUOTAS_ACTION: \u0027GET\u0027},"},{"line_number":102,"context_line":"            collection_actions\u003d{\u0027tenant\u0027: \u0027GET\u0027})]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def get_extended_resources(self, version):"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_d9eb58da","line":101,"range":{"start_line":101,"start_character":28,"end_line":101,"end_character":48},"updated":"2017-02-15 20:21:05.000000000","message":"change this to \u0027detail\u0027","commit_id":"21c971fe42cccd4b3c74dfa5e8d5989431d9c1ec"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7dd7023145b7aa8dd281723b36a83b3d9ed19ff0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            controller,"},{"line_number":100,"context_line":"            parent\u003dparent,"},{"line_number":101,"context_line":"            member_actions\u003d{DETAIL_QUOTAS_ACTION: \u0027GET\u0027},"},{"line_number":102,"context_line":"            collection_actions\u003d{\u0027tenant\u0027: \u0027GET\u0027})]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def get_extended_resources(self, version):"},{"line_number":105,"context_line":"        if version \u003d\u003d \"2.0\":"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_19c0904f","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":48},"updated":"2017-02-15 20:21:05.000000000","message":"not needed","commit_id":"21c971fe42cccd4b3c74dfa5e8d5989431d9c1ec"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"639390e5388d98ddfabdd645535c9d7105dc942e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"da36d5c6_bcc35d88","line":1,"updated":"2017-02-22 19:08:12.000000000","message":"Do we really need to have new extension for that? Cannot it be done in the same extension: quotas?","commit_id":"8eb64bd6dafc27601a2a5ac1fb0c7611a848b903"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"45674dd5c1344393553efbea9dde885a9b5eceb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"da36d5c6_950e1e8a","line":1,"in_reply_to":"da36d5c6_62569ccf","updated":"2017-02-24 17:29:38.000000000","message":"So since neutron API doesn\u0027t really have a version (well a minor version), an end user cannot discover whether the quota details attributes are available in arbitrary neutron endpoint.  The way an end user discovers the capabilities of the neutron API is via the extensions list.  So if this was done in the original quotasv2 extension then the end user would not know whether the details are available or not because they would only see that the quotasv2 extension is enabled.","commit_id":"8eb64bd6dafc27601a2a5ac1fb0c7611a848b903"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2dab8572a307f2fd453c2042aa92d0aa8ae2a9ed","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"da36d5c6_62569ccf","line":1,"in_reply_to":"da36d5c6_bcc35d88","updated":"2017-02-22 19:38:02.000000000","message":"thats what i thought of, isn\u0027t there a way to recognize from client input flag to decide whether to trigger default quotas api or detailed one. there will be a challenge writing api test for an api doing both cases.","commit_id":"8eb64bd6dafc27601a2a5ac1fb0c7611a848b903"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c78d8b18115682c14b09d90381da2c82395c3b3e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron_lib.api import extensions as api_extensions"},{"line_number":17,"context_line":"from neutron_lib import exceptions as n_exc"},{"line_number":18,"context_line":"from neutron_lib.plugins import directory"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_22392d42","line":15,"updated":"2017-03-02 05:46:07.000000000","message":"Could you consider to define some definitions of this extension in neutron-lib?","commit_id":"8adfe541f27d24a8f6ef92e40472e191575bc044"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a6f5756ab7559565ad13f2910d2a9b30ce85615c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron_lib.api import extensions as api_extensions"},{"line_number":17,"context_line":"from neutron_lib import exceptions as n_exc"},{"line_number":18,"context_line":"from neutron_lib.plugins import directory"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_322eb043","line":15,"in_reply_to":"ba2be162_22392d42","updated":"2017-03-02 18:09:42.000000000","message":"I will look into that. Thank you","commit_id":"8adfe541f27d24a8f6ef92e40472e191575bc044"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"8c4f05b4c82d2117c85996003baa89fc499b474a","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"},{"line_number":78,"context_line":"    def get_description(cls):"},{"line_number":79,"context_line":"        description \u003d \u0027Expose functions for quotas usage staistics\u0027"},{"line_number":80,"context_line":"        if cfg.CONF.QUOTAS.quota_driver \u003d\u003d DB_QUOTA_DRIVER:"},{"line_number":81,"context_line":"            description +\u003d \u0027 per tenant\u0027"},{"line_number":82,"context_line":"        return description"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a30ddce_add67c4c","line":79,"range":{"start_line":79,"start_character":57,"end_line":79,"end_character":67},"updated":"2017-03-10 22:43:36.000000000","message":"nit: staistics// statistics","commit_id":"020b6be334de58fbb0ba2fc828811af4ab88382c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"54411315a4688806fcd78fada8511a9a10621b1c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            resource_registry.get_all_resources(),"},{"line_number":51,"context_line":"            tenant_id, self._plugin)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def detail(self, request, id):"},{"line_number":54,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":55,"context_line":"            self._check_admin(request.context,"},{"line_number":56,"context_line":"                              reason\u003d_(\"Only admin is authorized \""}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_10f046c9","line":53,"range":{"start_line":53,"start_character":30,"end_line":53,"end_character":32},"updated":"2017-03-24 06:02:17.000000000","message":"The \"id\" is basically built-in function of python. We shouldn\u0027t use it as variable. Why not tenant_id?","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a8d169406caa81cf05d4483300e5b1bbbc8220f5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            resource_registry.get_all_resources(),"},{"line_number":51,"context_line":"            tenant_id, self._plugin)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def detail(self, request, id):"},{"line_number":54,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":55,"context_line":"            self._check_admin(request.context,"},{"line_number":56,"context_line":"                              reason\u003d_(\"Only admin is authorized \""}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_784ec26f","line":53,"range":{"start_line":53,"start_character":30,"end_line":53,"end_character":32},"in_reply_to":"ffe62b97_10f046c9","updated":"2017-03-28 17:56:14.000000000","message":"When this function is called its passed a keyword argument \"id\". changing it to tenant_id will catch the exception in\nhttps://github.com/openstack/neutron/blob/master/neutron/api/v2/resource.py#L80","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"54411315a4688806fcd78fada8511a9a10621b1c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":58,"context_line":"        return {self._resource_name: self._get_detailed_quotas(request, id)}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _check_admin(self, context,"},{"line_number":61,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"},{"line_number":62,"context_line":"        if not context.is_admin:"},{"line_number":63,"context_line":"            raise n_exc.AdminRequired(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_50d00ef8","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":20},"updated":"2017-03-24 06:02:17.000000000","message":"Will we reuse the method out of detail()? I think that the check code can be included detail().","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a8d169406caa81cf05d4483300e5b1bbbc8220f5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                                       \"to access quotas for another tenant\"))"},{"line_number":58,"context_line":"        return {self._resource_name: self._get_detailed_quotas(request, id)}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _check_admin(self, context,"},{"line_number":61,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"},{"line_number":62,"context_line":"        if not context.is_admin:"},{"line_number":63,"context_line":"            raise n_exc.AdminRequired(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_f8dd3270","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":20},"in_reply_to":"ffe62b97_50d00ef8","updated":"2017-03-28 17:56:14.000000000","message":"Currently its not reused but can and will be reused later since it\u0027s a validation/authentication method.","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.quota import resource_registry"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"dfeb2761_b6c51e5e","line":29,"updated":"2017-03-30 21:00:05.000000000","message":"nit: detail is singular, but in reality we\u0027re providing lots of detailS in the new extension, so we should probably say details here.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.quota import resource_registry"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_fb6ca89d","line":29,"in_reply_to":"dfeb2761_b6c51e5e","updated":"2017-04-05 20:56:17.000000000","message":"+1","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.quota import resource_registry"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027detail\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_086000a5","line":29,"in_reply_to":"dfeb2761_b6c51e5e","updated":"2017-04-06 11:41:48.000000000","message":":) +1","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class DetailQuotaSetsController(quotasv2.QuotaSetsController):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, plugin):"},{"line_number":41,"context_line":"        # NOTE(princenana) inherit from QuotaSetsController"}],"source_content_type":"text/x-python","patch_set":38,"id":"dfeb2761_96a0daa7","line":38,"updated":"2017-03-30 21:00:05.000000000","message":"I\u0027d rather avoid using a custom controller here if we can help it. I appreciate that spec [1] has already merged but I wonder if a /v2.0/quota_details/{tenant_id} would lead to a simpler implementation where quota_details is a top level resource, which can be implemented by a service plugin (thus decoupling the code proposed here from ML2).\n\n[1] http://specs.openstack.org/openstack/neutron-specs/specs/pike/extend-quota-api-to-send-usage-stats.html","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            resource_registry.get_all_resources(),"},{"line_number":51,"context_line":"            tenant_id, self._plugin)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def detail(self, request, id):"},{"line_number":54,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":55,"context_line":"            self._check_admin(request.context,"},{"line_number":56,"context_line":"                              reason\u003d_(\"Only admin is authorized \""}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_fbc82875","line":53,"range":{"start_line":53,"start_character":8,"end_line":53,"end_character":14},"updated":"2017-04-05 20:56:17.000000000","message":"Consider to change this if the suggestion in line 29 is taken","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        return {self._resource_name:"},{"line_number":59,"context_line":"                self._get_detailed_quotas(request, id)}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _check_admin(self, context,"},{"line_number":62,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"},{"line_number":63,"context_line":"        if not context.is_admin:"},{"line_number":64,"context_line":"            raise n_exc.AdminRequired(reason\u003dreason)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_bbdce018","line":64,"range":{"start_line":61,"start_character":4,"end_line":64,"end_character":52},"updated":"2017-04-05 20:56:17.000000000","message":"This method is only called from line 55, maybe it\u0027s not necessary to create a new private method at all.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        return {self._resource_name:"},{"line_number":59,"context_line":"                self._get_detailed_quotas(request, id)}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _check_admin(self, context,"},{"line_number":62,"context_line":"                     reason\u003d_(\"Only admin can view or configure quota\")):"},{"line_number":63,"context_line":"        if not context.is_admin:"},{"line_number":64,"context_line":"            raise n_exc.AdminRequired(reason\u003dreason)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_88941046","line":64,"range":{"start_line":61,"start_character":4,"end_line":64,"end_character":52},"in_reply_to":"bff0334d_bbdce018","updated":"2017-04-06 11:41:48.000000000","message":"simple and conditiom can work with line#55","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            raise n_exc.AdminRequired(reason\u003dreason)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"},{"line_number":68,"context_line":"    \"\"\"Quotas management support.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_1b218cb5","line":67,"range":{"start_line":67,"start_character":6,"end_line":67,"end_character":21},"updated":"2017-04-05 20:56:17.000000000","message":"Could you use another name for this class, maybe QuotasDetail","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"},{"line_number":68,"context_line":"    \"\"\"Quotas management support.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def get_name(cls):"}],"source_content_type":"text/x-python","patch_set":38,"id":"dfeb2761_7618b6d2","line":68,"updated":"2017-03-30 21:00:05.000000000","message":"A new API extension will have to be proposed alongside the other API definitions [1]. For suggestions look at how [2] was done.\n\n[1] https://github.com/openstack/neutron-lib/tree/master/neutron_lib/api/definitions\n[2] https://review.openstack.org/#/c/424868/","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"4a81340de89d0229a926b0cbf616c8677953162d","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"},{"line_number":68,"context_line":"    \"\"\"Quotas management support.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def get_name(cls):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_7b7c7f82","line":68,"in_reply_to":"dfeb2761_7618b6d2","updated":"2017-04-10 18:41:25.000000000","message":"Please look at https://review.openstack.org/#/c/444536/ referring to new API extension proposed alongside other API definitions","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @classmethod"},{"line_number":79,"context_line":"    def get_description(cls):"},{"line_number":80,"context_line":"        description \u003d \u0027Expose functions for quotas usage staistics\u0027"},{"line_number":81,"context_line":"        if cfg.CONF.QUOTAS.quota_driver \u003d\u003d DB_QUOTA_DRIVER:"},{"line_number":82,"context_line":"            description +\u003d \u0027 per tenant\u0027"},{"line_number":83,"context_line":"        return description"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_fb06e820","line":80,"range":{"start_line":80,"start_character":57,"end_line":80,"end_character":66},"updated":"2017-04-05 20:56:17.000000000","message":"s/staistics/statistics","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @classmethod"},{"line_number":90,"context_line":"    def get_resources(cls):"},{"line_number":91,"context_line":"        \"\"\"Returns Ext Resources.\"\"\""},{"line_number":92,"context_line":"        controller \u003d resource.Resource("},{"line_number":93,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":94,"context_line":"            faults\u003dbase.FAULT_MAP)"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_f61b9d70","line":91,"range":{"start_line":91,"start_character":19,"end_line":91,"end_character":22},"updated":"2017-04-05 20:56:17.000000000","message":"Extension","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def get_extended_resources(self, version):"},{"line_number":102,"context_line":"        if version \u003d\u003d \"2.0\":"},{"line_number":103,"context_line":"            return EXTENDED_ATTRIBUTES_2_0"},{"line_number":104,"context_line":"        else:"},{"line_number":105,"context_line":"            return {}"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def get_required_extensions(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_d6b41938","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":13},"updated":"2017-04-05 20:56:17.000000000","message":"nit: this return is not needed\n\n    return EXTENDED_ATTRIBUTES_2_0 if version \u003d\u003d \"2.0\" else {}","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"fa7bf50583eab4c572b9e0458f10d2c555941c6a","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class DetailQuotaSetsController(quotasv2.QuotaSetsController):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, plugin):"},{"line_number":41,"context_line":"        # NOTE(princenana) inherit from QuotaSetsController"},{"line_number":42,"context_line":"        # since we have two resources with different controllers"},{"line_number":43,"context_line":"        # which both use the same base endpoint but have"}],"source_content_type":"text/x-python","patch_set":43,"id":"5ff73747_f5903398","line":40,"updated":"2017-04-23 19:41:35.000000000","message":"Nothing is happening in this __init__ override, you can just remove the whole function.","commit_id":"ac92da19640748adc468a0babad7b246ca10aaf5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.quota import resource_registry"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027details\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_f0cc5cbd","line":29,"updated":"2017-04-26 15:28:32.000000000","message":"was it ever proposed for neutron-lib api definitions?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.quota import resource_registry"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027details\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_cebce607","line":29,"in_reply_to":"5ff73747_f0cc5cbd","updated":"2017-04-28 02:08:55.000000000","message":"Yes it was. Here\u0027s the patch for it: https://review.openstack.org/#/c/444536/","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027details\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_5b1d7164","line":32,"updated":"2017-04-26 15:28:32.000000000","message":"I don\u0027t think this extension will work for anything but this driver, so should we make its loading conditional to the db driver used? We can utilize extensions.register_custom_supported_check for that.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"DETAIL_QUOTAS_ACTION \u003d \u0027details\u0027"},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \u0027quota\u0027"},{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_4481098f","line":32,"in_reply_to":"5ff73747_5b1d7164","updated":"2017-04-26 18:33:46.000000000","message":"If the code becomes complicated, it might be good time to drop the quota config driver. The config driver was marked as deprecated two years ago in commit \n9e0993b6adbc23b31e0c88cdb7404416a144420d .\n\nIIRC, some of our unit tests depends the quota config driver and we need to tweak unit tests when dropping the config driver.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_f0e7bce3","line":34,"updated":"2017-04-26 15:28:32.000000000","message":"I am a bit concerned that we never describe the format of the payload anywhere in attribute maps (limit, used, reserved). I understand that\u0027s what we do for quotasv2 extension already, but maybe we could do better here, especially since the quotasv2 format is rather simplistic (it\u0027s a name to integer mapping)? Or do you think api-ref documentation describing the payload will be enough?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_693dcc8d","line":34,"in_reply_to":"5ff73747_c622c1a4","updated":"2017-04-28 02:08:55.000000000","message":"I can keep it this way and have it defined in api definitions.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_29434415","line":34,"in_reply_to":"5ff73747_f0e7bce3","updated":"2017-04-28 02:08:55.000000000","message":"I can keep it this way and have it defined in api definitions. How about that?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"RESOURCE_COLLECTION \u003d RESOURCE_NAME + \"s\""},{"line_number":32,"context_line":"DB_QUOTA_DRIVER \u003d \u0027neutron.db.quota.driver.DbQuotaDriver\u0027"},{"line_number":33,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":34,"context_line":"    RESOURCE_COLLECTION: {}"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_c622c1a4","line":34,"in_reply_to":"5ff73747_f0e7bce3","updated":"2017-04-26 18:33:46.000000000","message":"This reminds me some missing areas the current attrmap mechanism does not cover.\n\nThe current attribute_map (including validation) does not support dynamic fields. Quota fields are updated dynamically by other extensions. I think this is a main reason that quota extension is implemented in a different way.\n\nOn the other hand, we are now moving to neutron-lib so that we can define all available fields in our API definitions. we may be able to have a format definition of quota and this quota-detail API definitions in neutron-lib. One negative side is this approach prevents incubated stadium projects from using quotas due to API validations.\n\nI am okay with either way (explicit definition or the current loose definition) at the moment. IMHO we need to explore a good way to define quota extension and variants like this in neutron-lib, so it may take more time.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            resource_registry.get_all_resources(), tenant_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def details(self, request, id):"},{"line_number":46,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":47,"context_line":"            # Check if admin"},{"line_number":48,"context_line":"            if not request.context.is_admin:"},{"line_number":49,"context_line":"                reason \u003d _(\"Only admin is authorized to access quotas for \\"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_f05a1cf1","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":42},"updated":"2017-04-26 15:28:32.000000000","message":"nit: I think we already have project_id in neutron context, so maybe it would be better to use it here.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            resource_registry.get_all_resources(), tenant_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def details(self, request, id):"},{"line_number":46,"context_line":"        if id !\u003d request.context.tenant_id:"},{"line_number":47,"context_line":"            # Check if admin"},{"line_number":48,"context_line":"            if not request.context.is_admin:"},{"line_number":49,"context_line":"                reason \u003d _(\"Only admin is authorized to access quotas for \\"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e9c31c88","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":42},"in_reply_to":"5ff73747_f05a1cf1","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            # Check if admin"},{"line_number":48,"context_line":"            if not request.context.is_admin:"},{"line_number":49,"context_line":"                reason \u003d _(\"Only admin is authorized to access quotas for \\"},{"line_number":50,"context_line":"                          another tenant\")"},{"line_number":51,"context_line":"                raise n_exc.AdminRequired(reason\u003dreason)"},{"line_number":52,"context_line":"            return {self._resource_name:"},{"line_number":53,"context_line":"                    self._get_detailed_quotas(request, id)}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_302f6440","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":26},"updated":"2017-04-26 15:28:32.000000000","message":"so you enter all those spaces into the message? instead of using \\, please concatenate strings like:\n\nreason \u003d _(\"...\"\n           \"...\")","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            # Check if admin"},{"line_number":48,"context_line":"            if not request.context.is_admin:"},{"line_number":49,"context_line":"                reason \u003d _(\"Only admin is authorized to access quotas for \\"},{"line_number":50,"context_line":"                          another tenant\")"},{"line_number":51,"context_line":"                raise n_exc.AdminRequired(reason\u003dreason)"},{"line_number":52,"context_line":"            return {self._resource_name:"},{"line_number":53,"context_line":"                    self._get_detailed_quotas(request, id)}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e9dafc75","line":50,"range":{"start_line":50,"start_character":0,"end_line":50,"end_character":26},"in_reply_to":"5ff73747_302f6440","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_description(cls):"},{"line_number":69,"context_line":"        description \u003d \u0027Expose functions for quotas usage statistics\u0027"},{"line_number":70,"context_line":"        if cfg.CONF.QUOTAS.quota_driver \u003d\u003d DB_QUOTA_DRIVER:"},{"line_number":71,"context_line":"            description +\u003d \u0027 per tenant\u0027"},{"line_number":72,"context_line":"        return description"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_502af08f","line":71,"range":{"start_line":70,"start_character":8,"end_line":71,"end_character":40},"updated":"2017-04-26 15:28:32.000000000","message":"is it even a valid if check? because I don\u0027t see where you provide implementation for the conf based driver (and I don\u0027t think it\u0027s technically possible).","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_description(cls):"},{"line_number":69,"context_line":"        description \u003d \u0027Expose functions for quotas usage statistics\u0027"},{"line_number":70,"context_line":"        if cfg.CONF.QUOTAS.quota_driver \u003d\u003d DB_QUOTA_DRIVER:"},{"line_number":71,"context_line":"            description +\u003d \u0027 per tenant\u0027"},{"line_number":72,"context_line":"        return description"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_29f584ed","line":71,"range":{"start_line":70,"start_character":8,"end_line":71,"end_character":40},"in_reply_to":"5ff73747_502af08f","updated":"2017-04-28 02:08:55.000000000","message":"I believe we can do away with it.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        controller \u003d resource.Resource("},{"line_number":82,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":83,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":84,"context_line":"        return [extensions.ResourceExtension("},{"line_number":85,"context_line":"            RESOURCE_COLLECTION,"},{"line_number":86,"context_line":"            controller,"},{"line_number":87,"context_line":"            member_actions\u003d{\u0027details\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_5bc0d17b","line":84,"updated":"2017-04-26 15:28:32.000000000","message":"I admit I don\u0027t know how it works, but won\u0027t it override the controller that quotasv2 defines? Is it ok? Will e.g. default member_action declared by the old extension still work?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c79c283a674c163f4b4b8d0146805b37d5fde05f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        controller \u003d resource.Resource("},{"line_number":82,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":83,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":84,"context_line":"        return [extensions.ResourceExtension("},{"line_number":85,"context_line":"            RESOURCE_COLLECTION,"},{"line_number":86,"context_line":"            controller,"},{"line_number":87,"context_line":"            member_actions\u003d{\u0027details\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e39782eb","line":84,"in_reply_to":"5ff73747_0999a8c2","updated":"2017-05-01 14:49:42.000000000","message":"Do we have API tests that validate the \u0027default\u0027 action for the old extension?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        controller \u003d resource.Resource("},{"line_number":82,"context_line":"            DetailQuotaSetsController(directory.get_plugin()),"},{"line_number":83,"context_line":"            faults\u003dbase.FAULT_MAP)"},{"line_number":84,"context_line":"        return [extensions.ResourceExtension("},{"line_number":85,"context_line":"            RESOURCE_COLLECTION,"},{"line_number":86,"context_line":"            controller,"},{"line_number":87,"context_line":"            member_actions\u003d{\u0027details\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_0999a8c2","line":84,"in_reply_to":"5ff73747_5bc0d17b","updated":"2017-04-28 02:08:55.000000000","message":"It doesn\u0027t override it.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a3beeb0c741b1452cc245bdf0a311c09d12df2ae","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Ensure new extension is not loaded with old conf driver."},{"line_number":63,"context_line":"    extensions.register_custom_supported_check("},{"line_number":64,"context_line":"        ALIAS, lambda: True if QUOTA_DRIVER \u003d\u003d DB_QUOTA_DRIVER else False,"},{"line_number":65,"context_line":"        plugin_agnostic\u003dTrue)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_b4d727c0","line":64,"range":{"start_line":64,"start_character":23,"end_line":64,"end_character":73},"updated":"2017-06-30 14:50:10.000000000","message":"nit: could be just \u0027QUOTA_DRIVE \u003d\u003d DB_QUOTA_DRIVER\u0027","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a3beeb0c741b1452cc245bdf0a311c09d12df2ae","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get_description(cls):"},{"line_number":77,"context_line":"        return \u0027Expose functions for quotas usage statistics per tenant\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"},{"line_number":80,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_f4eebf86","line":77,"range":{"start_line":77,"start_character":65,"end_line":77,"end_character":71},"updated":"2017-06-30 14:50:10.000000000","message":"/me wonders if we should have used project term and not tenant for new things","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"e3161e56f440e1f83123fc105f1bdfd6ebf2835b","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get_description(cls):"},{"line_number":77,"context_line":"        return \u0027Expose functions for quotas usage statistics per tenant\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"},{"line_number":80,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_5be0c996","line":77,"range":{"start_line":77,"start_character":65,"end_line":77,"end_character":71},"in_reply_to":"3f1d235d_f4eebf86","updated":"2017-07-03 22:02:48.000000000","message":"Done","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b4bb18d90587d5c67a33f81a4d1f2354ec2ed41","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    self._get_detailed_quotas(request, id)}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"},{"line_number":60,"context_line":"    \"\"\"Quota details management support.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Ensure new extension is not loaded with old conf driver."}],"source_content_type":"text/x-python","patch_set":53,"id":"3f1d235d_213417de","line":59,"range":{"start_line":59,"start_character":6,"end_line":59,"end_character":21},"updated":"2017-07-09 05:07:42.000000000","message":"the name here is very confusing. Not exactly sure what detail mean","commit_id":"6fa5ff68eb70f6869252b8f41aed67af65ae8e5f"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"319bbf7e2c1bd0dfb26aa4db38d08ec17d5ca711","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    self._get_detailed_quotas(request, id)}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class Quotasv2_detail(api_extensions.ExtensionDescriptor):"},{"line_number":60,"context_line":"    \"\"\"Quota details management support.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Ensure new extension is not loaded with old conf driver."}],"source_content_type":"text/x-python","patch_set":53,"id":"1f1a1f67_b87028a7","line":59,"range":{"start_line":59,"start_character":6,"end_line":59,"end_character":21},"in_reply_to":"3f1d235d_213417de","updated":"2017-07-13 23:22:01.000000000","message":"Detail here refers to detail quotas information for resources. How about QuotasDetails as a name? Any better sugeestions?","commit_id":"6fa5ff68eb70f6869252b8f41aed67af65ae8e5f"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                    \"availability_zone\","},{"line_number":138,"context_line":"                                    \"network_availability_zone\","},{"line_number":139,"context_line":"                                    \"default-subnetpools\","},{"line_number":140,"context_line":"                                    \"subnet-service-types\", \"quota_detail\"]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @property"},{"line_number":143,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"dfeb2761_96efba86","line":140,"updated":"2017-03-30 21:00:05.000000000","message":"There\u0027s a couple of reasons why we should refrain from adding the quota extension here in ML2.\n\na) Quota is orthogonal to your plugin of choice. It makes more sense to develop this as a service plugin (like tag, auto_allocate, etc) and have it automatically loaded [1] \nb) If we did this, then this extension would be available only to ML2. While this may be fine for the majority of the Neutron permutations that are out there, that excluded plugins that are not ML2\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/common/constants.py#L43","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f98058e6a7748e6625acab02a7107125e4f7119","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                    \"availability_zone\","},{"line_number":138,"context_line":"                                    \"network_availability_zone\","},{"line_number":139,"context_line":"                                    \"default-subnetpools\","},{"line_number":140,"context_line":"                                    \"subnet-service-types\", \"quota_detail\"]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @property"},{"line_number":143,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_0376d0d9","line":140,"updated":"2017-04-05 13:33:34.000000000","message":"What do you think about a separate effort after this to move the entire quota engine into a service plugin? Doing just the details as a service plugin while leaving the old one as a controller seems a little inconsistent.","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"bfb9e3284e790ee3f69124c7d383f02b501b4b9a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                    \"availability_zone\","},{"line_number":138,"context_line":"                                    \"network_availability_zone\","},{"line_number":139,"context_line":"                                    \"default-subnetpools\","},{"line_number":140,"context_line":"                                    \"subnet-service-types\", \"quota_detail\"]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @property"},{"line_number":143,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7ffa3b31_110b9a8e","line":140,"updated":"2017-04-16 08:14:38.000000000","message":"You :)","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c59ac86d3688971f8f80222056d3a5a94e22ff7b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                    \"availability_zone\","},{"line_number":138,"context_line":"                                    \"network_availability_zone\","},{"line_number":139,"context_line":"                                    \"default-subnetpools\","},{"line_number":140,"context_line":"                                    \"subnet-service-types\", \"quota_detail\"]"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @property"},{"line_number":143,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_a49c1c0e","line":140,"in_reply_to":"bff0334d_0376d0d9","updated":"2017-04-11 05:10:37.000000000","message":"That makes a lot of sense to me, but who\u0027s signing up for it?","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a3beeb0c741b1452cc245bdf0a311c09d12df2ae","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                    \"availability_zone\","},{"line_number":150,"context_line":"                                    \"network_availability_zone\","},{"line_number":151,"context_line":"                                    \"default-subnetpools\","},{"line_number":152,"context_line":"                                    \"subnet-service-types\", \"quota_details\"]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @property"},{"line_number":155,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_f4bc7f6a","line":152,"range":{"start_line":152,"start_character":59,"end_line":152,"end_character":74},"updated":"2017-06-30 14:50:10.000000000","message":"I think that you should not put it here, otherwise it will be loaded even if conf driver is used which contradicts your preload check in the new api extension.","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"e3161e56f440e1f83123fc105f1bdfd6ebf2835b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                    \"availability_zone\","},{"line_number":150,"context_line":"                                    \"network_availability_zone\","},{"line_number":151,"context_line":"                                    \"default-subnetpools\","},{"line_number":152,"context_line":"                                    \"subnet-service-types\", \"quota_details\"]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @property"},{"line_number":155,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_fbd1d5ce","line":152,"range":{"start_line":152,"start_character":59,"end_line":152,"end_character":74},"in_reply_to":"3f1d235d_f4bc7f6a","updated":"2017-07-03 22:02:48.000000000","message":"Done","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"}],"neutron/quota/resource.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def count(self, context, plugin, tenant_id, **kwargs):"},{"line_number":133,"context_line":"        return self._count_func(context, plugin, self.plural_name, tenant_id)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def count_used(self, context, plugin, tenant_id, resynce_usage\u003dFalse):"},{"line_number":136,"context_line":"        usage_info \u003d quota_api.get_quota_usage_by_resource_and_tenant(context,"},{"line_number":137,"context_line":"         [self.name], tenant_id)"},{"line_number":138,"context_line":"        return usage_info.in_use"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_1d7b3c29","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":74},"updated":"2017-01-17 23:14:16.000000000","message":"plugin seems to don\u0027t be used inside the function, do you need to keep them?\n\n    def count_used(self, context, tenant_id, resync_usage\u003dFalse):","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"         [self.name], tenant_id)"},{"line_number":138,"context_line":"        return usage_info.in_use"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def count_reserved(self, context, plugin, tenant_id, resync_usage\u003dFalse):"},{"line_number":141,"context_line":"        reservations \u003d quota_api.get_reservations_for_resources("},{"line_number":142,"context_line":"                    context, tenant_id, [self.name])"},{"line_number":143,"context_line":"        reserved \u003d reservations.get(self.name, 0)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_9d956c34","line":140,"range":{"start_line":140,"start_character":4,"end_line":140,"end_character":77},"updated":"2017-01-17 23:14:16.000000000","message":"plugin and resync_usage seems to don\u0027t be used inside the function, do you need to keep them?\n\n    def count_reserved(self, context, tenant_id):","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        # Update quota usage"},{"line_number":246,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def count_used(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":249,"context_line":"        usage_info \u003d quota_api.get_quota_usage_by_resource_and_tenant("},{"line_number":250,"context_line":"            context, self.name, tenant_id, lock_for_update\u003dTrue)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_40907795","line":248,"range":{"start_line":248,"start_character":4,"end_line":248,"end_character":73},"updated":"2017-01-17 23:14:16.000000000","message":"Given that this method is public requires some documentation","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        # Update quota usage"},{"line_number":246,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def count_used(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":249,"context_line":"        usage_info \u003d quota_api.get_quota_usage_by_resource_and_tenant("},{"line_number":250,"context_line":"            context, self.name, tenant_id, lock_for_update\u003dTrue)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_80297f8c","line":248,"updated":"2017-01-17 23:14:16.000000000","message":"ditto: line 135","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                       \u0027used\u0027: usage_info.used})"},{"line_number":283,"context_line":"        return usage_info.used"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def count_reserved(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":286,"context_line":"        reservations \u003d quota_api.get_reservations_for_resources("},{"line_number":287,"context_line":"            context, tenant_id, [self.name])"},{"line_number":288,"context_line":"        reserved \u003d reservations.get(self.name, 0)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_608bb368","line":285,"range":{"start_line":285,"start_character":4,"end_line":285,"end_character":77},"updated":"2017-01-17 23:14:16.000000000","message":"Given that this method is public requires some documentation","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                       \u0027used\u0027: usage_info.used})"},{"line_number":283,"context_line":"        return usage_info.used"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def count_reserved(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":286,"context_line":"        reservations \u003d quota_api.get_reservations_for_resources("},{"line_number":287,"context_line":"            context, tenant_id, [self.name])"},{"line_number":288,"context_line":"        reserved \u003d reservations.get(self.name, 0)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_e0596336","line":285,"updated":"2017-01-17 23:14:16.000000000","message":"ditto: line 140","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9257d923e26a2d6d6a25be9b1d7c22164425a7c0","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        return reserved"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":293,"context_line":"        return (self.count_used(context, _plugin, tenant_id, resync_usage) +"},{"line_number":294,"context_line":"                self.count_reserved(context, _plugin, tenant_id, resync_usage))"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_c0f2a705","line":292,"range":{"start_line":292,"start_character":4,"end_line":292,"end_character":68},"updated":"2017-01-17 23:14:16.000000000","message":"Missing documention","commit_id":"f439813172a1b6b1d87d7d5d159f451cbeb5fe36"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b579165b53d11c4f979b42a5429346d272e9ac84","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        # Update quota usage"},{"line_number":235,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def count_used(self, context, tenant_id, res_usage_info\u003dNone,"},{"line_number":238,"context_line":"                   resync_usage\u003dTrue, flag\u003dTrue):"},{"line_number":239,"context_line":"        \"\"\"Returns the current usage count for the resource. \"\"\""},{"line_number":240,"context_line":"        # Load current usage data, setting a reow-level lock on DB"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_4d9bdac9","line":237,"range":{"start_line":237,"start_character":45,"end_line":237,"end_character":64},"updated":"2017-01-19 23:56:39.000000000","message":"why are you adding res_usage_info and flag\u003dTrue as an argument to this method? Following should suffice\nusage_info \u003d quota_api.get_quota_usage_by_resource_and_tenant(\n            context, self.name, tenant_id, lock_for_update\u003dTrue)","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"105ce9d10f74d9e1926093d3db5174127fbb8983","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        # Update quota usage"},{"line_number":235,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def count_used(self, context, tenant_id, res_usage_info\u003dNone,"},{"line_number":238,"context_line":"                   resync_usage\u003dTrue, flag\u003dTrue):"},{"line_number":239,"context_line":"        \"\"\"Returns the current usage count for the resource. \"\"\""},{"line_number":240,"context_line":"        # Load current usage data, setting a reow-level lock on DB"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_201d82bd","line":237,"range":{"start_line":237,"start_character":45,"end_line":237,"end_character":64},"in_reply_to":"5a3905b3_4d9bdac9","updated":"2017-01-20 19:45:59.000000000","message":"the flag parameter is added to prevent repeating the same DB query for  usage info. Also the res_usage_info is added so as to pass resource usage info from an earlier DB query. Both parameters help to execute resource.count_used(context, tenant_id, usage_info, resync_usage\u003dFalse, flag\u003dFalse) method. I will put in extra documentation in the next patch to explain the use of each parameter for this method.","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b579165b53d11c4f979b42a5429346d272e9ac84","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        return usage_info.used"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def count_reserved(self, context, tenant_id, resync_usage\u003dTrue):"},{"line_number":283,"context_line":"        \"\"\"Return the current reservation count for the resource.\"\"\""},{"line_number":284,"context_line":"        reservations \u003d quota_api.get_reservations_for_resources("},{"line_number":285,"context_line":"            context, tenant_id, [self.name])"},{"line_number":286,"context_line":"        reserved \u003d reservations.get(self.name, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_8dca22a0","line":283,"range":{"start_line":283,"start_character":11,"end_line":283,"end_character":17},"updated":"2017-01-19 23:56:39.000000000","message":"nit: s/Return/Returns","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b579165b53d11c4f979b42a5429346d272e9ac84","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        return reserved"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."},{"line_number":292,"context_line":"        The _plugin and _resource parameters are unused but kept for"},{"line_number":293,"context_line":"        compatibility with the signature of the count method for"},{"line_number":294,"context_line":"        CountableResource instances."}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_6dd5f641","line":291,"range":{"start_line":291,"start_character":11,"end_line":291,"end_character":17},"updated":"2017-01-19 23:56:39.000000000","message":"nit: s/Return/Returns","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b579165b53d11c4f979b42a5429346d272e9ac84","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."},{"line_number":292,"context_line":"        The _plugin and _resource parameters are unused but kept for"},{"line_number":293,"context_line":"        compatibility with the signature of the count method for"},{"line_number":294,"context_line":"        CountableResource instances."},{"line_number":295,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_8d09422f","line":292,"range":{"start_line":292,"start_character":23,"end_line":292,"end_character":33},"updated":"2017-01-19 23:56:39.000000000","message":"this method doesn\u0027t have _resource as an argument.\nIn addition, if you want to maintain compatibility with the signature of the count method, then afaik  _plugin should be included in count_reserved and count_method methods also ?","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"105ce9d10f74d9e1926093d3db5174127fbb8983","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."},{"line_number":292,"context_line":"        The _plugin and _resource parameters are unused but kept for"},{"line_number":293,"context_line":"        compatibility with the signature of the count method for"},{"line_number":294,"context_line":"        CountableResource instances."},{"line_number":295,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_6b6f6bc5","line":292,"range":{"start_line":292,"start_character":23,"end_line":292,"end_character":33},"in_reply_to":"5a3905b3_8d09422f","updated":"2017-01-20 19:45:59.000000000","message":"I will take of the resource parameter since it is not explicitly an argument for this method.\nI didn\u0027t include them in count_reserved and count_used methods because the CountableResource instances don\u0027t have those methods but only the count method.","commit_id":"64b45b6d455131c11a2b269384b4914dcbe914ac"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        compatibility with the signature of the count method for"},{"line_number":249,"context_line":"        CountableResource instances."},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        # Load current usage data, setting a row-level lock on the DB"},{"line_number":252,"context_line":"        usage_info \u003d quota_api.get_quota_usage_by_resource_and_tenant("},{"line_number":253,"context_line":"            context, self.name, tenant_id)"},{"line_number":254,"context_line":"        # Always fetch reservations, as they are not tracked by usage counters"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_81a4060a","side":"PARENT","line":251,"range":{"start_line":251,"start_character":63,"end_line":251,"end_character":66},"updated":"2017-04-05 20:56:17.000000000","message":"This change is not needed","commit_id":"3d5d9e895787f12a3717eddba3e3ce5f402dd129"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # is ephemeral and returns the default value"},{"line_number":285,"context_line":"        reservations \u003d quota_api.get_reservations_for_resources("},{"line_number":286,"context_line":"            context, tenant_id, [self.name])"},{"line_number":287,"context_line":"        reserved \u003d reservations.get(self.name, 0)"},{"line_number":288,"context_line":"        return reserved"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_c1e8ce17","line":288,"range":{"start_line":287,"start_character":8,"end_line":288,"end_character":23},"updated":"2017-04-05 20:56:17.000000000","message":"You can return the result without keeping in a variable\n\n    return reservations.get(self.name, 0)","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return obj_count_getter(context, filters\u003d{\u0027tenant_id\u0027: [tenant_id]})"},{"line_number":38,"context_line":"    except (NotImplementedError, AttributeError):"},{"line_number":39,"context_line":"        obj_getter \u003d getattr(plugin, \"get_%s\" % collection_name)"},{"line_number":40,"context_line":"        obj_list \u003d obj_getter(context, filters\u003d{\u0027project_id\u0027: [tenant_id]})"},{"line_number":41,"context_line":"        return len(obj_list) if obj_list else 0"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_1b2fe93f","line":40,"updated":"2017-04-26 15:28:32.000000000","message":"why is the change needed? shouldn\u0027t the code still work for plugins that don\u0027t support project_id extension?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c79c283a674c163f4b4b8d0146805b37d5fde05f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return obj_count_getter(context, filters\u003d{\u0027tenant_id\u0027: [tenant_id]})"},{"line_number":38,"context_line":"    except (NotImplementedError, AttributeError):"},{"line_number":39,"context_line":"        obj_getter \u003d getattr(plugin, \"get_%s\" % collection_name)"},{"line_number":40,"context_line":"        obj_list \u003d obj_getter(context, filters\u003d{\u0027project_id\u0027: [tenant_id]})"},{"line_number":41,"context_line":"        return len(obj_list) if obj_list else 0"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_83b9de79","line":40,"in_reply_to":"5ff73747_0923e857","updated":"2017-05-01 14:49:42.000000000","message":"It doesn\u0027t mean that you should change the logic here. Instead, we maybe need to make trunk plugin work with tenant_id passed, or pass project_id in addition to tenant_id.\n\nThe change as-is will break plugins that don\u0027t implement project_id extension.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return obj_count_getter(context, filters\u003d{\u0027tenant_id\u0027: [tenant_id]})"},{"line_number":38,"context_line":"    except (NotImplementedError, AttributeError):"},{"line_number":39,"context_line":"        obj_getter \u003d getattr(plugin, \"get_%s\" % collection_name)"},{"line_number":40,"context_line":"        obj_list \u003d obj_getter(context, filters\u003d{\u0027project_id\u0027: [tenant_id]})"},{"line_number":41,"context_line":"        return len(obj_list) if obj_list else 0"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_0923e857","line":40,"in_reply_to":"5ff73747_1b2fe93f","updated":"2017-04-28 02:08:55.000000000","message":"it wasn\u0027t working for trunk plugin thus the change","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def count_used(self, context, tenant_id, resync_usage\u003dTrue):"},{"line_number":238,"context_line":"        \"\"\"Returns the current usage count for the resource."},{"line_number":239,"context_line":"        :param context: The request context."},{"line_number":240,"context_line":"        :param tenant_id: The ID of the tenant"},{"line_number":241,"context_line":"        :param resync_usage: Default value is set to True. Syncs"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_843cb1c8","line":238,"updated":"2017-04-26 18:33:46.000000000","message":"According to the doc string convention, it is better to have a blank line here.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        return self._resync(context, tenant_id, in_use)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def count_used(self, context, tenant_id, resync_usage\u003dTrue):"},{"line_number":238,"context_line":"        \"\"\"Returns the current usage count for the resource."},{"line_number":239,"context_line":"        :param context: The request context."},{"line_number":240,"context_line":"        :param tenant_id: The ID of the tenant"},{"line_number":241,"context_line":"        :param resync_usage: Default value is set to True. Syncs"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e9cd5c85","line":238,"in_reply_to":"5ff73747_843cb1c8","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."},{"line_number":292,"context_line":"        The _plugin and _resource parameters are unused but kept for"},{"line_number":293,"context_line":"        compatibility with the signature of the count method for"},{"line_number":294,"context_line":"        CountableResource instances."},{"line_number":295,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_5b5571c5","line":292,"range":{"start_line":292,"start_character":24,"end_line":292,"end_character":33},"updated":"2017-04-26 15:28:32.000000000","message":"I don\u0027t see such a parameter","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def count(self, context, _plugin, tenant_id, resync_usage\u003dTrue):"},{"line_number":291,"context_line":"        \"\"\"Return the count of the resource."},{"line_number":292,"context_line":"        The _plugin and _resource parameters are unused but kept for"},{"line_number":293,"context_line":"        compatibility with the signature of the count method for"},{"line_number":294,"context_line":"        CountableResource instances."},{"line_number":295,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_c974e038","line":292,"range":{"start_line":292,"start_character":24,"end_line":292,"end_character":33},"in_reply_to":"5ff73747_5b5571c5","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"neutron/services/trunk/plugin.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7167d798b6a15fd9ad6269b0ffaa1062c0d3600c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        if \u0027project_id\u0027 not in filters:"},{"line_number":193,"context_line":"            filters[\u0027project_id\u0027] \u003d filters.pop(\u0027tenant_id\u0027)"},{"line_number":194,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":195,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":196,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":50,"id":"ff0f0b1f_da1f9ab5","line":193,"updated":"2017-05-25 21:29:51.000000000","message":"This is causing the failure. When no filters are passed in, the pop call will cause a KeyError.\n\nWhy did you make this change anyway? It doesn\u0027t seem related to the rest of the patch and it shouldn\u0027t be necessary. There is already other code that should take care of the tenant_id/project_id translation for us.","commit_id":"a4d66e0b1cf95896bc3a6d8182e55cd5a8a7d324"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"1e2cd9076ab5a9a551807829e42347619a1a240c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        if \u0027project_id\u0027 not in filters:"},{"line_number":193,"context_line":"            filters[\u0027project_id\u0027] \u003d filters.pop(\u0027tenant_id\u0027)"},{"line_number":194,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":195,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":196,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":50,"id":"df140735_db130766","line":193,"in_reply_to":"ff0f0b1f_da1f9ab5","updated":"2017-05-30 01:03:45.000000000","message":"Trunks uses [1] to get count used which passes the tenant_id. https://github.com/openstack/neutron/blob/master/neutron/quota/resource.py#L40\nAlso are you referring to [2] as the code that takes care of the translation?https://github.com/openstack/neutron/blob/master/neutron/objects/base.py#L341","commit_id":"a4d66e0b1cf95896bc3a6d8182e55cd5a8a7d324"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0a9fc80adf591f0df5f0a918f6a76e8e7c3efa76","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        if \u0027tenant_id\u0027 in filters:"},{"line_number":193,"context_line":"            filters[\u0027project_id\u0027] \u003d filters.pop(\u0027tenant_id\u0027)"},{"line_number":194,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":195,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":196,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5f201791_2b96a43f","line":193,"updated":"2017-06-26 21:45:40.000000000","message":"Why is this here?","commit_id":"19ba31caccce05b745ba6284444958184b7bbf1d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"9de096777b37d735cb69613e134b908700dbbd43","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        if \u0027tenant_id\u0027 in filters:"},{"line_number":193,"context_line":"            filters[\u0027project_id\u0027] \u003d filters.pop(\u0027tenant_id\u0027)"},{"line_number":194,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":195,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":196,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5f201791_2bafc47d","line":193,"in_reply_to":"5f201791_2b96a43f","updated":"2017-06-26 21:47:42.000000000","message":"Sorry, I mean there is nothing else in the code base that does this so why are trunks special? Are they the only thing that uses get_objects?","commit_id":"19ba31caccce05b745ba6284444958184b7bbf1d"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"7f89d35d0db009fbcbd4b764e99f4cb7af340e02","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        if \u0027tenant_id\u0027 in filters:"},{"line_number":193,"context_line":"            filters[\u0027project_id\u0027] \u003d filters.pop(\u0027tenant_id\u0027)"},{"line_number":194,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":195,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":196,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5f201791_fc3f5422","line":193,"in_reply_to":"5f201791_2bafc47d","updated":"2017-06-27 00:20:53.000000000","message":"All instances of countable resources use get_objects method. for trunks this method is called with tenant_id as a filter.","commit_id":"19ba31caccce05b745ba6284444958184b7bbf1d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"2ebc34ee46d084a7821a31c64ca4d5057cb3f9fb","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                   sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        filters \u003d trunk_objects.Trunk.modify_fields_to_db(filters)"},{"line_number":193,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":194,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":195,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_aae46dad","line":192,"updated":"2017-06-30 10:02:20.000000000","message":"Please add Ihar to the review to confirm this is the appropriate place to handle this translation.","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a3beeb0c741b1452cc245bdf0a311c09d12df2ae","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                   sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        filters \u003d trunk_objects.Trunk.modify_fields_to_db(filters)"},{"line_number":193,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":194,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":195,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_c7ae77e6","line":192,"in_reply_to":"3f1d235d_aae46dad","updated":"2017-06-30 14:50:10.000000000","message":"I understand why we may need to convert tenant_id into project_id before passing it into get_objects (we don\u0027t register tenant_id as an alternative filter for the trunk object). But I think converting all filters like that may mess other things. The stop-gap fix here should be just for the field. (And probably it justifies a TODO/NOTE explaining why trunk object is special).\n\nIdeally, we would have all objects that don\u0027t have tenant_id field but project_id to still register tenant_id as an additional filter supported by get_* methods. I am not asking for that here though. Just make the hack specific for the field, and document it properly.","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"e3161e56f440e1f83123fc105f1bdfd6ebf2835b","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                   sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":190,"context_line":"        \"\"\"Return information for available trunks.\"\"\""},{"line_number":191,"context_line":"        filters \u003d filters or {}"},{"line_number":192,"context_line":"        filters \u003d trunk_objects.Trunk.modify_fields_to_db(filters)"},{"line_number":193,"context_line":"        pager \u003d objects_base.Pager(sorts\u003dsorts, limit\u003dlimit,"},{"line_number":194,"context_line":"                                   page_reverse\u003dpage_reverse, marker\u003dmarker)"},{"line_number":195,"context_line":"        return trunk_objects.Trunk.get_objects(context, _pager\u003dpager,"}],"source_content_type":"text/x-python","patch_set":52,"id":"3f1d235d_9bd661c3","line":192,"in_reply_to":"3f1d235d_c7ae77e6","updated":"2017-07-03 22:02:48.000000000","message":"Done","commit_id":"4e05a45752f98a0825ec565d769d36268d68dce8"}],"neutron/tests/contrib/hooks/api_all_extensions":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d3a2e88e02a91932da62219476fdab3266f9ba7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"NETWORK_API_EXTENSIONS\u003d\"address-scope,agent,allowed-address-pairs,auto-allocated-topology,availability_zone,binding,default-subnetpools,dhcp_agent_scheduler,dns-integration,dvr,ext-gw-mode,external-net,extra_dhcp_opt,extraroute,flavors,l3-flavors,l3-ha,l3_agent_scheduler,metering,multi-provider,net-mtu,network-ip-availability,network_availability_zone,pagination,port-security,project-id,provider,qos,quotas,quota_detail,rbac-policies,router,router_availability_zone,security-group,service-type,sorting,standard-attr-description,standard-attr-revisions,standard-attr-timestamp,subnet_allocation,tag,tag-ext,trunk,trunk-details\""}],"source_content_type":"application/octet-stream","patch_set":38,"id":"dfeb2761_1603aa44","line":1,"updated":"2017-03-30 21:00:05.000000000","message":"\u003crant\u003eugh, do I hate this new formatting....\u003c/rant\u003e","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":1,"context_line":"NETWORK_API_EXTENSIONS\u003d\"address-scope,agent,allowed-address-pairs,auto-allocated-topology,availability_zone,binding,default-subnetpools,dhcp_agent_scheduler,dns-integration,dvr,ext-gw-mode,external-net,extra_dhcp_opt,extraroute,flavors,l3-flavors,l3-ha,l3_agent_scheduler,metering,multi-provider,net-mtu,network-ip-availability,network_availability_zone,pagination,port-security,project-id,provider,qos,quotas,quota_detail,rbac-policies,router,router_availability_zone,security-group,service-type,sorting,standard-attr-description,standard-attr-revisions,standard-attr-timestamp,subnet_allocation,tag,tag-ext,trunk,trunk-details\""}],"source_content_type":"application/octet-stream","patch_set":38,"id":"bff0334d_0862403f","line":1,"range":{"start_line":1,"start_character":410,"end_line":1,"end_character":422},"updated":"2017-04-06 11:41:48.000000000","message":"need it be singular?","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"}],"neutron/tests/tempest/api/admin/test_quotas.py":[{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"874b59791fc4a6ace6682f212efb9d190bd0f7e5","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_12ebedb1","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":61},"updated":"2017-02-27 16:52:24.000000000","message":"move decorator to test case test_quotas (LN79) and delete method (parent class will still be called due to hierarchy)","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d75f1025ab3042d3a993a8c8870ca6bdfee86b85","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_111f5e5c","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":61},"in_reply_to":"da36d5c6_12ebedb1","updated":"2017-02-27 22:16:15.000000000","message":"Done","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"874b59791fc4a6ace6682f212efb9d190bd0f7e5","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            self.assertNotEqual(tenant_id, q[\u0027tenant_id\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class DetailQuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":113,"context_line":"    def resource_setup(cls):"},{"line_number":114,"context_line":"        super(DetailQuotasTestBase, cls).resource_setup()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _create_tenant(self):"},{"line_number":117,"context_line":"        # Add a tenant to conduct the test"},{"line_number":118,"context_line":"        test_tenant \u003d data_utils.rand_name(\u0027test_tenant_\u0027)"},{"line_number":119,"context_line":"        test_description \u003d data_utils.rand_name(\u0027desc_\u0027)"},{"line_number":120,"context_line":"        tenant \u003d self.identity_admin_client.create_tenant("},{"line_number":121,"context_line":"            name\u003dtest_tenant,"},{"line_number":122,"context_line":"            description\u003dtest_description)[\u0027tenant\u0027]"},{"line_number":123,"context_line":"        self.addCleanup("},{"line_number":124,"context_line":"            self.identity_admin_client.delete_tenant, tenant[\u0027id\u0027])"},{"line_number":125,"context_line":"        return tenant"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _setup_quotas(self, project_id, **new_quotas):"},{"line_number":128,"context_line":"        # Change quotas for tenant"},{"line_number":129,"context_line":"        quota_set \u003d self.admin_client.update_quotas(project_id,"},{"line_number":130,"context_line":"                                                    **new_quotas)"},{"line_number":131,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":132,"context_line":"        return quota_set"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _create_network(self, **project_id):"},{"line_number":135,"context_line":"        network \u003d self.admin_client.create_network(**project_id)"},{"line_number":136,"context_line":"        return network"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _create_port(self, **kwargs):"},{"line_number":139,"context_line":"        port \u003d self.admin_client.create_port(**kwargs)"},{"line_number":140,"context_line":"        return port"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _cleanup_quotas(self, project_id):"},{"line_number":143,"context_line":"        # Try to clean up the resources. If it fails, then"},{"line_number":144,"context_line":"        # assume that everything was already deleted, so"},{"line_number":145,"context_line":"        # it is OK to continue."},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            self.admin_client.reset_quotas(project_id)"},{"line_number":148,"context_line":"        except lib_exc.NotFound:"},{"line_number":149,"context_line":"            pass"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class DetailQuotasTest(DetailQuotasTestBase):"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_92e19d9d","line":149,"range":{"start_line":109,"start_character":0,"end_line":149,"end_character":16},"updated":"2017-02-27 16:52:24.000000000","message":"delete this base class and re-use QuotasTestBase.","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d75f1025ab3042d3a993a8c8870ca6bdfee86b85","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            self.assertNotEqual(tenant_id, q[\u0027tenant_id\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class DetailQuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":113,"context_line":"    def resource_setup(cls):"},{"line_number":114,"context_line":"        super(DetailQuotasTestBase, cls).resource_setup()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _create_tenant(self):"},{"line_number":117,"context_line":"        # Add a tenant to conduct the test"},{"line_number":118,"context_line":"        test_tenant \u003d data_utils.rand_name(\u0027test_tenant_\u0027)"},{"line_number":119,"context_line":"        test_description \u003d data_utils.rand_name(\u0027desc_\u0027)"},{"line_number":120,"context_line":"        tenant \u003d self.identity_admin_client.create_tenant("},{"line_number":121,"context_line":"            name\u003dtest_tenant,"},{"line_number":122,"context_line":"            description\u003dtest_description)[\u0027tenant\u0027]"},{"line_number":123,"context_line":"        self.addCleanup("},{"line_number":124,"context_line":"            self.identity_admin_client.delete_tenant, tenant[\u0027id\u0027])"},{"line_number":125,"context_line":"        return tenant"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _setup_quotas(self, project_id, **new_quotas):"},{"line_number":128,"context_line":"        # Change quotas for tenant"},{"line_number":129,"context_line":"        quota_set \u003d self.admin_client.update_quotas(project_id,"},{"line_number":130,"context_line":"                                                    **new_quotas)"},{"line_number":131,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":132,"context_line":"        return quota_set"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _create_network(self, **project_id):"},{"line_number":135,"context_line":"        network \u003d self.admin_client.create_network(**project_id)"},{"line_number":136,"context_line":"        return network"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _create_port(self, **kwargs):"},{"line_number":139,"context_line":"        port \u003d self.admin_client.create_port(**kwargs)"},{"line_number":140,"context_line":"        return port"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _cleanup_quotas(self, project_id):"},{"line_number":143,"context_line":"        # Try to clean up the resources. If it fails, then"},{"line_number":144,"context_line":"        # assume that everything was already deleted, so"},{"line_number":145,"context_line":"        # it is OK to continue."},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            self.admin_client.reset_quotas(project_id)"},{"line_number":148,"context_line":"        except lib_exc.NotFound:"},{"line_number":149,"context_line":"            pass"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class DetailQuotasTest(DetailQuotasTestBase):"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_f129ea8a","line":149,"range":{"start_line":109,"start_character":0,"end_line":149,"end_character":16},"in_reply_to":"da36d5c6_92e19d9d","updated":"2017-02-27 22:16:15.000000000","message":"Done","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"874b59791fc4a6ace6682f212efb9d190bd0f7e5","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            pass"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class DetailQuotasTest(DetailQuotasTestBase):"},{"line_number":153,"context_line":"    \"\"\"Test the Neutron API of Quotas."},{"line_number":154,"context_line":"    Tests the following operations in the Neutron API using the REST client for"},{"line_number":155,"context_line":"    Neutron:"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_3567fbeb","line":152,"range":{"start_line":152,"start_character":23,"end_line":152,"end_character":44},"updated":"2017-02-27 16:52:24.000000000","message":"Re-Use QuotasTestBase as the base class\n\nAlso is this test class really needed?\nConsider just adding \"test_detail_quotas\" test case within QuotasTest class - just different decorator to skip TC if needed","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d75f1025ab3042d3a993a8c8870ca6bdfee86b85","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            pass"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class DetailQuotasTest(DetailQuotasTestBase):"},{"line_number":153,"context_line":"    \"\"\"Test the Neutron API of Quotas."},{"line_number":154,"context_line":"    Tests the following operations in the Neutron API using the REST client for"},{"line_number":155,"context_line":"    Neutron:"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_d124e6b3","line":152,"range":{"start_line":152,"start_character":23,"end_line":152,"end_character":44},"in_reply_to":"da36d5c6_3567fbeb","updated":"2017-02-27 22:16:15.000000000","message":"Done","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4261f5175a9716936536dee4453c69c891a693e9","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":166,"context_line":"    @test.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":167,"context_line":"    def test_detail_quotas(self):"},{"line_number":168,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":169,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_e6292e8b","line":166,"range":{"start_line":166,"start_character":4,"end_line":166,"end_character":23},"updated":"2017-02-27 21:48:20.000000000","message":"This decorator has been deprecated: https://github.com/openstack/tempest/blob/master/tempest/test.py#L44. Please use this one instead: https://github.com/openstack/tempest/blob/master/tempest/lib/decorators.py#L47","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d75f1025ab3042d3a993a8c8870ca6bdfee86b85","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":166,"context_line":"    @test.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":167,"context_line":"    def test_detail_quotas(self):"},{"line_number":168,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":169,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_911c2e6c","line":166,"range":{"start_line":166,"start_character":4,"end_line":166,"end_character":23},"in_reply_to":"da36d5c6_e6292e8b","updated":"2017-02-27 22:16:15.000000000","message":"Done","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"874b59791fc4a6ace6682f212efb9d190bd0f7e5","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":166,"context_line":"    @test.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":167,"context_line":"    def test_detail_quotas(self):"},{"line_number":168,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":169,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"},{"line_number":170,"context_line":"                      \u0027port\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0}}"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_3201d13a","line":167,"range":{"start_line":167,"start_character":4,"end_line":167,"end_character":33},"updated":"2017-02-27 16:52:24.000000000","message":"Add decorator to test case\n@test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"d75f1025ab3042d3a993a8c8870ca6bdfee86b85","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":166,"context_line":"    @test.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":167,"context_line":"    def test_detail_quotas(self):"},{"line_number":168,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":169,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"},{"line_number":170,"context_line":"                      \u0027port\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0}}"}],"source_content_type":"text/x-python","patch_set":27,"id":"da36d5c6_b119327c","line":167,"range":{"start_line":167,"start_character":4,"end_line":167,"end_character":33},"in_reply_to":"da36d5c6_3201d13a","updated":"2017-02-27 22:16:15.000000000","message":"Done","commit_id":"7425f22f8510170e2df915231ae401746cf44282"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c78d8b18115682c14b09d90381da2c82395c3b3e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":29,"context_line":"    def resource_setup(cls):"},{"line_number":30,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_1f71e2e0","side":"PARENT","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":61},"updated":"2017-03-02 05:46:07.000000000","message":"Why did you move it?","commit_id":"edeb1f0bcc1f1f6fc3af5ff43fd8e0d94dd9cb8a"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a6f5756ab7559565ad13f2910d2a9b30ce85615c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":29,"context_line":"    def resource_setup(cls):"},{"line_number":30,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_12ee0cb4","side":"PARENT","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":61},"in_reply_to":"ba2be162_1f71e2e0","updated":"2017-03-02 18:09:42.000000000","message":"To prevent having two test setup classes in this file (i.e. QuotasTestBase and DetailQuotasTestBase). This was moved to L#88 so it verifies extension enabled for each testcase being run.","commit_id":"edeb1f0bcc1f1f6fc3af5ff43fd8e0d94dd9cb8a"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c78d8b18115682c14b09d90381da2c82395c3b3e","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":119,"context_line":"    @decorators.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":120,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":121,"context_line":"    def test_detail_quotas(self):"},{"line_number":122,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":123,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_c22691b9","line":120,"updated":"2017-03-02 05:46:07.000000000","message":"This method needs \"quotas\" extension too.","commit_id":"8adfe541f27d24a8f6ef92e40472e191575bc044"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"d9fd39d63c1a09f852bf4187533cad48ad11a0a3","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":119,"context_line":"    @decorators.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":120,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":121,"context_line":"    def test_detail_quotas(self):"},{"line_number":122,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":123,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a30ddce_a6b583d1","line":120,"in_reply_to":"ba2be162_5267a44c","updated":"2017-03-07 03:21:59.000000000","message":"Actually \"quota_detail\" depends on \"quota\" so I thought it\u0027s needed but now I\u0027m OK because \"quota_detail\" extension doesn\u0027t work without \"quota\" anyway.","commit_id":"8adfe541f27d24a8f6ef92e40472e191575bc044"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a6f5756ab7559565ad13f2910d2a9b30ce85615c","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":119,"context_line":"    @decorators.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":120,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":121,"context_line":"    def test_detail_quotas(self):"},{"line_number":122,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":123,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba2be162_5267a44c","line":120,"in_reply_to":"ba2be162_c22691b9","updated":"2017-03-02 18:09:42.000000000","message":"Afaik it doesn\u0027t because the GET request is made to the new api/endpoint(quota_detail)","commit_id":"8adfe541f27d24a8f6ef92e40472e191575bc044"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"54411315a4688806fcd78fada8511a9a10621b1c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":123,"context_line":"    @decorators.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"},{"line_number":128,"context_line":"                      \u0027port\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0}}"}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_d02adee5","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":26},"updated":"2017-03-24 06:02:17.000000000","message":"It seems that API test doesn\u0027t run this test.","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"a8d169406caa81cf05d4483300e5b1bbbc8220f5","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":123,"context_line":"    @decorators.idempotent_id(\u00278d21aabc-4364-4eb9-8b79-44b4fff6373b\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_detail\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"},{"line_number":128,"context_line":"                      \u0027port\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0}}"}],"source_content_type":"text/x-python","patch_set":35,"id":"ffe62b97_c566fac1","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":26},"in_reply_to":"ffe62b97_d02adee5","updated":"2017-03-28 17:56:14.000000000","message":"Done","commit_id":"65d31300732ea2980fb7d53717439c38e9526e6b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        list quotas for tenants who have non-default quota values"},{"line_number":78,"context_line":"        show quotas for a specified tenant"},{"line_number":79,"context_line":"        show detail  quotas for a specified tenant"},{"line_number":80,"context_line":"        update quotas for a specified tenant"},{"line_number":81,"context_line":"        reset quotas to default values for a specified tenant"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_41c5de8d","line":79,"range":{"start_line":79,"start_character":19,"end_line":79,"end_character":21},"updated":"2017-04-05 20:56:17.000000000","message":"nit: double space?","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_fb7c3dec","side":"PARENT","line":27,"updated":"2017-04-26 15:28:32.000000000","message":"so why do you remove it? don\u0027t all tests still require the presence of the extension? Why going through setting up resources only to later realize no test cases can be executed?","commit_id":"008bc01ddf0bda712fe8021140d1fe0539507008"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    @test.requires_ext(extension\u003d\"quotas\", service\u003d\"network\")"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_09d2c800","side":"PARENT","line":27,"in_reply_to":"5ff73747_fb7c3dec","updated":"2017-04-28 02:08:55.000000000","message":"I took it out so that I could have both tests under one class QuotasTest.","commit_id":"008bc01ddf0bda712fe8021140d1fe0539507008"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class QuotasTestBase(base.BaseAdminNetworkTest):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(QuotasTestBase, cls).resource_setup()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _create_tenant(self):"},{"line_number":32,"context_line":"        # Add a tenant to conduct the test"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_3bef45b1","line":29,"range":{"start_line":27,"start_character":4,"end_line":29,"end_character":51},"updated":"2017-04-26 15:28:32.000000000","message":"do we need that now?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":47,"context_line":"        return quota_set"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_network(self, **project_id):"},{"line_number":50,"context_line":"        network \u003d self.admin_client.create_network(**project_id)[\u0027network\u0027]"},{"line_number":51,"context_line":"        self.addCleanup(self.admin_client.delete_network,"},{"line_number":52,"context_line":"                        network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_9bd09921","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":42},"updated":"2017-04-26 15:28:32.000000000","message":"if it\u0027s a single id, why do we pass it as a dict?..","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":47,"context_line":"        return quota_set"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_network(self, **project_id):"},{"line_number":50,"context_line":"        network \u003d self.admin_client.create_network(**project_id)[\u0027network\u0027]"},{"line_number":51,"context_line":"        self.addCleanup(self.admin_client.delete_network,"},{"line_number":52,"context_line":"                        network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_dbb86177","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":6},"updated":"2017-04-26 15:28:32.000000000","message":"seems like the only reason why you have it here is because create_network in base class always uses non-admin client? then maybe you could extend it to accept client object, like we do in e.g. create_network_keystone_v3.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":47,"context_line":"        return quota_set"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_network(self, **project_id):"},{"line_number":50,"context_line":"        network \u003d self.admin_client.create_network(**project_id)[\u0027network\u0027]"},{"line_number":51,"context_line":"        self.addCleanup(self.admin_client.delete_network,"},{"line_number":52,"context_line":"                        network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_1ff1d995","line":49,"range":{"start_line":49,"start_character":30,"end_line":49,"end_character":42},"in_reply_to":"5ff73747_9bd09921","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.addCleanup(self._cleanup_quotas, project_id)"},{"line_number":47,"context_line":"        return quota_set"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_network(self, **project_id):"},{"line_number":50,"context_line":"        network \u003d self.admin_client.create_network(**project_id)[\u0027network\u0027]"},{"line_number":51,"context_line":"        self.addCleanup(self.admin_client.delete_network,"},{"line_number":52,"context_line":"                        network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_3ff81579","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":6},"in_reply_to":"5ff73747_dbb86177","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                        port[\u0027id\u0027])"},{"line_number":59,"context_line":"        return port"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _cleanup_quotas(self, project_id):"},{"line_number":62,"context_line":"        # Try to clean up the resources. If it fails, then"},{"line_number":63,"context_line":"        # assume that everything was already deleted, so"},{"line_number":64,"context_line":"        # it is OK to continue."}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_bbd475be","line":61,"updated":"2017-04-26 15:28:32.000000000","message":"nit: aesthetically, I think having it closer to _setup_quotas makes a tad more sense.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                        port[\u0027id\u0027])"},{"line_number":59,"context_line":"        return port"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _cleanup_quotas(self, project_id):"},{"line_number":62,"context_line":"        # Try to clean up the resources. If it fails, then"},{"line_number":63,"context_line":"        # assume that everything was already deleted, so"},{"line_number":64,"context_line":"        # it is OK to continue."}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_3f25b65c","line":61,"in_reply_to":"5ff73747_bbd475be","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            self.assertNotEqual(tenant_id, q[\u0027tenant_id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_db350148","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":27},"updated":"2017-04-26 15:28:32.000000000","message":"what does it mean?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5fbfa436c3efd1c924fde031436eab75cfdeb531","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            self.assertNotEqual(tenant_id, q[\u0027tenant_id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f013ff3_ef5bc951","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":27},"in_reply_to":"5ff73747_42f786d4","updated":"2017-05-12 18:09:45.000000000","message":"OK that\u0027s fine, I was just wondering. We can decide to clean that up later.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            self.assertNotEqual(tenant_id, q[\u0027tenant_id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_42f786d4","line":123,"range":{"start_line":123,"start_character":4,"end_line":123,"end_character":27},"in_reply_to":"5ff73747_db350148","updated":"2017-04-28 02:08:55.000000000","message":"I must admit I don\u0027t know. was added since test_quotas had it also","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_db5ce17f","line":124,"updated":"2017-04-26 15:28:32.000000000","message":"I guess this requires both extensions being present no? For one, _setup_quotas uses base quotas api.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5fbfa436c3efd1c924fde031436eab75cfdeb531","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f013ff3_8f4b2586","line":124,"in_reply_to":"3f044301_4e325812","updated":"2017-05-12 18:09:45.000000000","message":"Yes, that\u0027s the idea. You use both APIs, so you should require both here.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"3f33a39eb090c12cd0f90e9aff5efdd2dabc6cbc","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":45,"id":"3f044301_4e325812","line":124,"in_reply_to":"5ff73747_4374f6ce","updated":"2017-05-09 19:18:35.000000000","message":"If I get you right, the test needs to check if parent extension (i.e. quotas) is enabled then it checks if  quota_details is enabled before running test. right?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e20692ce","line":124,"in_reply_to":"5ff73747_db5ce17f","updated":"2017-04-28 02:08:55.000000000","message":"AFAIK it checks if one extension is present.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c79c283a674c163f4b4b8d0146805b37d5fde05f","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":124,"context_line":"    @test.requires_ext(extension\u003d\"quota_details\", service\u003d\"network\")"},{"line_number":125,"context_line":"    def test_detail_quotas(self):"},{"line_number":126,"context_line":"        tenant_id \u003d self._create_tenant()[\u0027id\u0027]"},{"line_number":127,"context_line":"        new_quotas \u003d {\u0027network\u0027: {\u0027used\u0027: 1, \u0027limit\u0027: 2, \u0027reserved\u0027: 0},"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_4374f6ce","line":124,"in_reply_to":"5ff73747_e20692ce","updated":"2017-05-01 14:49:42.000000000","message":"Yes, but you also need to check for another extension here, so two decorators are needed.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        quota_set \u003d self._setup_quotas(tenant_id, **new_quota)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # create test resources"},{"line_number":136,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":137,"context_line":"        network \u003d self._create_network(project_id\u003dtenant_id)"},{"line_number":138,"context_line":"        post_body \u003d {\"network_id\": network[\u0027id\u0027],"},{"line_number":139,"context_line":"                     \"tenant_id\": tenant_id}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_9b3f7924","line":136,"updated":"2017-04-26 15:28:32.000000000","message":"leftover?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        quota_set \u003d self._setup_quotas(tenant_id, **new_quota)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # create test resources"},{"line_number":136,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":137,"context_line":"        network \u003d self._create_network(project_id\u003dtenant_id)"},{"line_number":138,"context_line":"        post_body \u003d {\"network_id\": network[\u0027id\u0027],"},{"line_number":139,"context_line":"                     \"tenant_id\": tenant_id}"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_df1ff205","line":136,"in_reply_to":"5ff73747_9b3f7924","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # create test resources"},{"line_number":136,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":137,"context_line":"        network \u003d self._create_network(project_id\u003dtenant_id)"},{"line_number":138,"context_line":"        post_body \u003d {\"network_id\": network[\u0027id\u0027],"},{"line_number":139,"context_line":"                     \"tenant_id\": tenant_id}"},{"line_number":140,"context_line":"        self._create_port(**post_body)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_3b55051e","line":137,"updated":"2017-04-26 15:28:32.000000000","message":"so this test now also requires project_id extension being present? prefer using tenant_id and in that way remove the dependency.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # create test resources"},{"line_number":136,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":137,"context_line":"        network \u003d self._create_network(project_id\u003dtenant_id)"},{"line_number":138,"context_line":"        post_body \u003d {\"network_id\": network[\u0027id\u0027],"},{"line_number":139,"context_line":"                     \"tenant_id\": tenant_id}"},{"line_number":140,"context_line":"        self._create_port(**post_body)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_7fd45e20","line":137,"in_reply_to":"5ff73747_3b55051e","updated":"2017-04-28 02:08:55.000000000","message":"please I don\u0027t get you.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5fbfa436c3efd1c924fde031436eab75cfdeb531","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # create test resources"},{"line_number":136,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":137,"context_line":"        network \u003d self._create_network(project_id\u003dtenant_id)"},{"line_number":138,"context_line":"        post_body \u003d {\"network_id\": network[\u0027id\u0027],"},{"line_number":139,"context_line":"                     \"tenant_id\": tenant_id}"},{"line_number":140,"context_line":"        self._create_port(**post_body)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f013ff3_6f3579f7","line":137,"in_reply_to":"5ff73747_7fd45e20","updated":"2017-05-12 18:09:45.000000000","message":"I mean that you use project_id attribute which is part of \u0027project_id\u0027 API extension. You either make the test case require this extension too (in addition to quotas and quota_details) or (better) switch to tenant_id that is present for all plugins.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"45eaa1398c1389f82274d4d0bbce73d9a2febd66","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_network(self, project_id):"},{"line_number":59,"context_line":"        network \u003d self.create_network(client\u003dself.admin_client,"},{"line_number":60,"context_line":"                                      project_id\u003dproject_id)"},{"line_number":61,"context_line":"        self.addCleanup(self.admin_client.delete_network,"},{"line_number":62,"context_line":"                        network[\u0027id\u0027])"},{"line_number":63,"context_line":"        return network"}],"source_content_type":"text/x-python","patch_set":47,"id":"5ff73747_6362520c","line":60,"range":{"start_line":60,"start_character":38,"end_line":60,"end_character":49},"updated":"2017-05-01 14:49:33.000000000","message":"Here, you pass project_id\u003d attribute, which is not supported by all plugins (only by those that support project_id extension). Please switch to tenant_id that is supported by all installations.","commit_id":"87624770e6618b671e1346f11f37cb801a9a04d4"}],"neutron/tests/tempest/services/network/json/network_client.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            # list of field\u0027s name. An example:"},{"line_number":125,"context_line":"            # {\u0027fields\u0027: [\u0027id\u0027, \u0027name\u0027]}"},{"line_number":126,"context_line":"            plural \u003d self.pluralize(resource_name)"},{"line_number":127,"context_line":"            if \u0027details\u0027 in plural:"},{"line_number":128,"context_line":"                details, plural \u003d plural.split(\u0027_\u0027)"},{"line_number":129,"context_line":"                uri \u003d \u0027%s/%s/%s\u0027 % (self.get_uri(plural),"},{"line_number":130,"context_line":"                                    resource_id, details)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_7665e4e0","line":127,"updated":"2017-04-26 15:28:32.000000000","message":"I am not sure that logic is supposed to be that generic (other _details attributes may need different handling), so shouldn\u0027t we keep it just for quota_details?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            # list of field\u0027s name. An example:"},{"line_number":125,"context_line":"            # {\u0027fields\u0027: [\u0027id\u0027, \u0027name\u0027]}"},{"line_number":126,"context_line":"            plural \u003d self.pluralize(resource_name)"},{"line_number":127,"context_line":"            if \u0027details\u0027 in plural:"},{"line_number":128,"context_line":"                details, plural \u003d plural.split(\u0027_\u0027)"},{"line_number":129,"context_line":"                uri \u003d \u0027%s/%s/%s\u0027 % (self.get_uri(plural),"},{"line_number":130,"context_line":"                                    resource_id, details)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_9f3849ee","line":127,"in_reply_to":"5ff73747_7665e4e0","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            # list of field\u0027s name. An example:"},{"line_number":125,"context_line":"            # {\u0027fields\u0027: [\u0027id\u0027, \u0027name\u0027]}"},{"line_number":126,"context_line":"            plural \u003d self.pluralize(resource_name)"},{"line_number":127,"context_line":"            if \u0027details\u0027 in plural:"},{"line_number":128,"context_line":"                details, plural \u003d plural.split(\u0027_\u0027)"},{"line_number":129,"context_line":"                uri \u003d \u0027%s/%s/%s\u0027 % (self.get_uri(plural),"},{"line_number":130,"context_line":"                                    resource_id, details)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_89772ad5","line":127,"in_reply_to":"5ff73747_7665e4e0","updated":"2017-04-26 18:33:46.000000000","message":"Totally agree with Ihar.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            # list of field\u0027s name. An example:"},{"line_number":125,"context_line":"            # {\u0027fields\u0027: [\u0027id\u0027, \u0027name\u0027]}"},{"line_number":126,"context_line":"            plural \u003d self.pluralize(resource_name)"},{"line_number":127,"context_line":"            if \u0027details\u0027 in plural:"},{"line_number":128,"context_line":"                details, plural \u003d plural.split(\u0027_\u0027)"},{"line_number":129,"context_line":"                uri \u003d \u0027%s/%s/%s\u0027 % (self.get_uri(plural),"},{"line_number":130,"context_line":"                                    resource_id, details)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_3f2375bf","line":127,"in_reply_to":"5ff73747_89772ad5","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"neutron/tests/unit/db/quota/test_driver.py":[{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"bacfce6c8bf3b633b1f51600f7e46b922ed81afd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"meh_quota_flag \u003d \u0027quota_meh\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FakePlugin(base_plugin.NeutronDbPluginV2, driver.DbQuotaDriver):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_8701473c","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":28},"updated":"2017-01-25 05:53:04.000000000","message":"removed, was not being used","commit_id":"fc0d7d7ec5ca042beb3e24b93b101a0a9b8f185c"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"bacfce6c8bf3b633b1f51600f7e46b922ed81afd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return self.fake_count"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class Test_Resource(resource.TrackedResource):"},{"line_number":52,"context_line":"    \"\"\"Describes a test tracked resource for detailed quota checking\"\"\""},{"line_number":53,"context_line":"    def __init__(self, name, model_class, default, plural_name\u003dNone):"},{"line_number":54,"context_line":"        super(Test_Resource, self).__init__(name, model_class,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_e7f84b4c","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":19},"updated":"2017-01-25 05:53:04.000000000","message":"renamed it to TestTrackedResource","commit_id":"fc0d7d7ec5ca042beb3e24b93b101a0a9b8f185c"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"bacfce6c8bf3b633b1f51600f7e46b922ed81afd","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class Test_Resource(resource.TrackedResource):"},{"line_number":52,"context_line":"    \"\"\"Describes a test tracked resource for detailed quota checking\"\"\""},{"line_number":53,"context_line":"    def __init__(self, name, model_class, default, plural_name\u003dNone):"},{"line_number":54,"context_line":"        super(Test_Resource, self).__init__(name, model_class,"},{"line_number":55,"context_line":"                                    flag\u003dNone, plural_name\u003dNone)"},{"line_number":56,"context_line":"        self.quota \u003d default"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_875dc74a","line":53,"range":{"start_line":53,"start_character":41,"end_line":53,"end_character":49},"updated":"2017-01-25 05:53:04.000000000","message":"added flag instead because of [1]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/quota/resource.py#L153-#L155","commit_id":"fc0d7d7ec5ca042beb3e24b93b101a0a9b8f185c"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"b9102eff20b79a0821b61d2608667549b3cddaea","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.common import exceptions"},{"line_number":19,"context_line":"from neutron import context"},{"line_number":20,"context_line":"from neutron.db import _utils as db_utils"},{"line_number":21,"context_line":"from neutron.db import db_base_plugin_v2 as base_plugin"},{"line_number":22,"context_line":"from neutron.db.quota import api as quota_api"},{"line_number":23,"context_line":"from neutron.db.quota import driver"},{"line_number":24,"context_line":"from neutron.db.quota import models as quota_models"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a30ddce_49182f1e","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":55},"updated":"2017-03-07 19:10:46.000000000","message":"this import is being used in L41. Following is the pep8 error \nhttp://logs.openstack.org/73/383673/30/check/gate-neutron-pep8-ubuntu-xenial/6f9f98d/console.html#_2017-03-07_02_21_23_247868","commit_id":"e7cf0edf37b161b2ffdcebd29eee47829b41c146"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        resource \u003d resource[:-1]"},{"line_number":36,"context_line":"    result \u003d quota_obj.QuotaUsage.get_object_dirty_protected("},{"line_number":37,"context_line":"        context, resource\u003dresource)"},{"line_number":38,"context_line":"    if not result:"},{"line_number":39,"context_line":"        return 0"},{"line_number":40,"context_line":"    return result.in_use"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class FakePlugin(base_plugin.NeutronDbPluginV2, driver.DbQuotaDriver):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_21f53acc","line":40,"range":{"start_line":38,"start_character":4,"end_line":40,"end_character":24},"updated":"2017-04-05 20:56:17.000000000","message":"nit:\n\n    return result.in_use if not result else 0","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        resource \u003d resource[:-1]"},{"line_number":36,"context_line":"    result \u003d quota_obj.QuotaUsage.get_object_dirty_protected("},{"line_number":37,"context_line":"        context, resource\u003dresource)"},{"line_number":38,"context_line":"    if not result:"},{"line_number":39,"context_line":"        return 0"},{"line_number":40,"context_line":"    return result.in_use"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class FakePlugin(base_plugin.NeutronDbPluginV2, driver.DbQuotaDriver):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_88dad0e6","line":40,"range":{"start_line":38,"start_character":4,"end_line":40,"end_character":24},"in_reply_to":"bff0334d_21f53acc","updated":"2017-04-06 11:41:48.000000000","message":"+1","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\"Describes a test tracked resource for detailed quota checking\"\"\""},{"line_number":65,"context_line":"    def __init__(self, name, model_class, flag\u003dNone,"},{"line_number":66,"context_line":"                 plural_name\u003dNone):"},{"line_number":67,"context_line":"        super(TestTrackedResource, self).__init__(name, model_class,"},{"line_number":68,"context_line":"                                    flag\u003dflag, plural_name\u003dNone)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @property"},{"line_number":71,"context_line":"    def default(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_41215e4d","line":68,"range":{"start_line":67,"start_character":50,"end_line":68,"end_character":63},"updated":"2017-04-05 20:56:17.000000000","message":"nit: this indentation seems fine but it could be improved","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"class TestCountableResource(resource.CountableResource):"},{"line_number":76,"context_line":"    \"\"\"Describes a test countable resource for detailed quota checking\"\"\""},{"line_number":77,"context_line":"    def __init__(self, name, count, flag\u003d-1, plural_name\u003dNone):"},{"line_number":78,"context_line":"        super(TestCountableResource, self).__init__(name, count,"},{"line_number":79,"context_line":"                                flag\u003dflag, plural_name\u003dNone)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @property"},{"line_number":82,"context_line":"    def default(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_c1d20e35","line":79,"range":{"start_line":78,"start_character":52,"end_line":79,"end_character":59},"updated":"2017-04-05 20:56:17.000000000","message":"ditto: line 68","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"eb04a7cde64a44d6fff73493241a52e35e80b1f3","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        self.plugin.update_quota_limit(self.context, PROJECT, RESOURCE, 6)"},{"line_number":272,"context_line":"        quota_driver \u003d driver.DbQuotaDriver()"},{"line_number":273,"context_line":"        quota_driver.make_reservation(self.context, PROJECT, res,"},{"line_number":274,"context_line":"                                      {RESOURCE: 1}, self.plugin)"},{"line_number":275,"context_line":"        quota_api.set_quota_usage(self.context, RESOURCE, PROJECT, 2)"},{"line_number":276,"context_line":"        detailed_quota \u003d self.plugin.get_detailed_tenant_quotas(self.context,"},{"line_number":277,"context_line":"            res, PROJECT, self.plugin)"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_81aac682","line":274,"range":{"start_line":273,"start_character":38,"end_line":274,"end_character":64},"updated":"2017-04-05 20:56:17.000000000","message":"ditto: line 68","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        resource_1 \u003d \u0027res_test_1\u0027"},{"line_number":285,"context_line":"        resource_2 \u003d \u0027res_test_2\u0027"},{"line_number":286,"context_line":"        resources \u003d {resource_1: TestTrackedResource(resource_1,"},{"line_number":287,"context_line":"                                               test_quota.MehModel),"},{"line_number":288,"context_line":"                     resource_2: TestCountableResource(resource_2,"},{"line_number":289,"context_line":"                                           _count_resource)}"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_e8995c1f","line":287,"range":{"start_line":287,"start_character":47,"end_line":287,"end_character":57},"updated":"2017-04-06 11:41:48.000000000","message":"What victor said ... line #68","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        resource_2 \u003d \u0027res_test_2\u0027"},{"line_number":286,"context_line":"        resources \u003d {resource_1: TestTrackedResource(resource_1,"},{"line_number":287,"context_line":"                                               test_quota.MehModel),"},{"line_number":288,"context_line":"                     resource_2: TestCountableResource(resource_2,"},{"line_number":289,"context_line":"                                           _count_resource)}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        self.plugin.update_quota_limit(self.context, project_1, resource_1, 6)"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_a8a3544f","line":288,"range":{"start_line":288,"start_character":55,"end_line":288,"end_character":65},"updated":"2017-04-06 11:41:48.000000000","message":"ditto","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        quota_api.set_quota_usage(self.context, resource_1, project_1, 2)"},{"line_number":298,"context_line":"        quota_api.set_quota_usage(self.context, resource_2, project_1, 3)"},{"line_number":299,"context_line":"        detailed_quota \u003d self.plugin.get_detailed_tenant_quotas(self.context,"},{"line_number":300,"context_line":"            resources, project_1, self.plugin)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        self.assertEqual(6, detailed_quota[resource_1][\u0027limit\u0027])"},{"line_number":303,"context_line":"        self.assertEqual(1, detailed_quota[resource_1][\u0027reserved\u0027])"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_888890c6","line":300,"range":{"start_line":299,"start_character":64,"end_line":300,"end_character":46},"updated":"2017-04-06 11:41:48.000000000","message":"ditto","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"}],"neutron/tests/unit/extensions/test_quotasv2_detail.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_parse()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Update the plugin and extensions path"},{"line_number":51,"context_line":"        self.setup_coreplugin(\u0027ml2\u0027)"},{"line_number":52,"context_line":"        quota.QUOTAS \u003d quota.QuotaEngine()"},{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_d6ccb8bd","line":51,"updated":"2017-04-26 15:28:32.000000000","message":"is it really ml2 specific? maybe you can target the unit test against a generic fake plugin instead?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_parse()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Update the plugin and extensions path"},{"line_number":51,"context_line":"        self.setup_coreplugin(\u0027ml2\u0027)"},{"line_number":52,"context_line":"        quota.QUOTAS \u003d quota.QuotaEngine()"},{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_e277b29f","line":51,"in_reply_to":"5ff73747_d6ccb8bd","updated":"2017-04-28 02:08:55.000000000","message":"I think it is ml2 specific currently","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c79c283a674c163f4b4b8d0146805b37d5fde05f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_parse()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Update the plugin and extensions path"},{"line_number":51,"context_line":"        self.setup_coreplugin(\u0027ml2\u0027)"},{"line_number":52,"context_line":"        quota.QUOTAS \u003d quota.QuotaEngine()"},{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_83155e4b","line":51,"in_reply_to":"5ff73747_e277b29f","updated":"2017-05-01 14:49:42.000000000","message":"I don\u0027t think so, your extension should be implementable for other plugins. Quota drivers are not bound to plugins.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"},{"line_number":55,"context_line":"        self.plugin.return_value.supported_extension_aliases \u003d \\"},{"line_number":56,"context_line":"            [\u0027quota_details\u0027]"},{"line_number":57,"context_line":"        # QUOTAS will register the items in conf when starting"},{"line_number":58,"context_line":"        ext_mgr \u003d extensions.PluginAwareExtensionManager.get_instance()"},{"line_number":59,"context_line":"        app \u003d config.load_paste_app(\u0027extensions_test_app\u0027)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_f63a1496","line":56,"updated":"2017-04-26 15:28:32.000000000","message":"but not claiming quotas extension is supported?","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c79c283a674c163f4b4b8d0146805b37d5fde05f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"},{"line_number":55,"context_line":"        self.plugin.return_value.supported_extension_aliases \u003d \\"},{"line_number":56,"context_line":"            [\u0027quota_details\u0027]"},{"line_number":57,"context_line":"        # QUOTAS will register the items in conf when starting"},{"line_number":58,"context_line":"        ext_mgr \u003d extensions.PluginAwareExtensionManager.get_instance()"},{"line_number":59,"context_line":"        app \u003d config.load_paste_app(\u0027extensions_test_app\u0027)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_de2a1d7d","line":56,"in_reply_to":"5ff73747_82a7ce0b","updated":"2017-05-01 14:49:42.000000000","message":"Since your new extension requires base quotas extension, I think you should claim both supported here. Otherwise you test against an impossible combination.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self._plugin_patcher \u003d mock.patch(TARGET_PLUGIN, autospec\u003dTrue)"},{"line_number":54,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"},{"line_number":55,"context_line":"        self.plugin.return_value.supported_extension_aliases \u003d \\"},{"line_number":56,"context_line":"            [\u0027quota_details\u0027]"},{"line_number":57,"context_line":"        # QUOTAS will register the items in conf when starting"},{"line_number":58,"context_line":"        ext_mgr \u003d extensions.PluginAwareExtensionManager.get_instance()"},{"line_number":59,"context_line":"        app \u003d config.load_paste_app(\u0027extensions_test_app\u0027)"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_82a7ce0b","line":56,"in_reply_to":"5ff73747_f63a1496","updated":"2017-04-28 02:08:55.000000000","message":"what am I required to do here please. can\u0027t seem to get your comment","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    fmt \u003d \u0027json\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def setUp(self):"},{"line_number":71,"context_line":"        cfg.CONF.set_override("},{"line_number":72,"context_line":"            \u0027quota_driver\u0027,"},{"line_number":73,"context_line":"            \u0027neutron.db.quota.driver.DbQuotaDriver\u0027,"},{"line_number":74,"context_line":"            group\u003d\u0027QUOTAS\u0027)"},{"line_number":75,"context_line":"        super(DetailQuotaExtensionDbTestCase, self).setUp()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_detail_quotas(self):"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_36fe3cae","line":74,"range":{"start_line":71,"start_character":8,"end_line":74,"end_character":27},"updated":"2017-04-26 15:28:32.000000000","message":"nit: it\u0027s default, so not sure why we need that.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    fmt \u003d \u0027json\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def setUp(self):"},{"line_number":71,"context_line":"        cfg.CONF.set_override("},{"line_number":72,"context_line":"            \u0027quota_driver\u0027,"},{"line_number":73,"context_line":"            \u0027neutron.db.quota.driver.DbQuotaDriver\u0027,"},{"line_number":74,"context_line":"            group\u003d\u0027QUOTAS\u0027)"},{"line_number":75,"context_line":"        super(DetailQuotaExtensionDbTestCase, self).setUp()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_detail_quotas(self):"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_a26d2acd","line":74,"range":{"start_line":71,"start_character":8,"end_line":74,"end_character":27},"in_reply_to":"5ff73747_36fe3cae","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"neutron/tests/unit/quota/test_resource.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6fbc8b70a1e8a06f103ac0693e9b26ca24647567","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        set_quota_usage \u003d \u0027neutron.db.quota.api.set_quota_usage\u0027"},{"line_number":263,"context_line":"        with mock.patch(set_quota_usage) as mock_set_quota_usage:"},{"line_number":264,"context_line":"            quota_api.set_quota_usage_dirty(self.context,"},{"line_number":265,"context_line":"                                        self.resource,"},{"line_number":266,"context_line":"                                        self.tenant_id)"},{"line_number":267,"context_line":"            res.count_used(self.context, self.tenant_id, resync_usage\u003dTrue)"},{"line_number":268,"context_line":"            mock_set_quota_usage.assert_called_once_with("},{"line_number":269,"context_line":"                self.context, self.resource, self.tenant_id, in_use\u003d2)"}],"source_content_type":"text/x-python","patch_set":38,"id":"bff0334d_a87114e3","line":266,"range":{"start_line":265,"start_character":39,"end_line":266,"end_character":55},"updated":"2017-04-06 11:41:48.000000000","message":"identation seems a bit weird here","commit_id":"91045baaf8303543c61b7205ff4bbe485a5b6432"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        quota_api.create_reservation(self.context, self.tenant_id,"},{"line_number":135,"context_line":"                                     {res.name: 1})"},{"line_number":136,"context_line":"        self.assertEqual(1, res.count_reserved(self.context,"},{"line_number":137,"context_line":"                                              self.tenant_id))"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_count_used_first_call_with_dirty_false(self):"},{"line_number":140,"context_line":"        quota_api.set_quota_usage("}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_84f951c9","line":137,"range":{"start_line":137,"start_character":46,"end_line":137,"end_character":61},"updated":"2017-04-26 18:33:46.000000000","message":"The indent looks wrong","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        quota_api.create_reservation(self.context, self.tenant_id,"},{"line_number":135,"context_line":"                                     {res.name: 1})"},{"line_number":136,"context_line":"        self.assertEqual(1, res.count_reserved(self.context,"},{"line_number":137,"context_line":"                                              self.tenant_id))"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_count_used_first_call_with_dirty_false(self):"},{"line_number":140,"context_line":"        quota_api.set_quota_usage("}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_22b6ba3f","line":137,"range":{"start_line":137,"start_character":46,"end_line":137,"end_character":61},"in_reply_to":"5ff73747_84f951c9","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a129d4f7070092aed447292472bf74c6f2840a7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        # Expect correct count_used to be returned"},{"line_number":148,"context_line":"        # anyway since the first call to"},{"line_number":149,"context_line":"        # count_used() always resyncs with the db"},{"line_number":150,"context_line":"        self.assertEqual(2, res.count_used(self.context,"},{"line_number":151,"context_line":"                                           self.tenant_id))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _test_count(self):"},{"line_number":154,"context_line":"        res \u003d self._create_resource()"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_24fefdad","line":151,"range":{"start_line":150,"start_character":43,"end_line":151,"end_character":58},"updated":"2017-04-26 18:33:46.000000000","message":"This fits one line.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        # Expect correct count_used to be returned"},{"line_number":148,"context_line":"        # anyway since the first call to"},{"line_number":149,"context_line":"        # count_used() always resyncs with the db"},{"line_number":150,"context_line":"        self.assertEqual(2, res.count_used(self.context,"},{"line_number":151,"context_line":"                                           self.tenant_id))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _test_count(self):"},{"line_number":154,"context_line":"        res \u003d self._create_resource()"}],"source_content_type":"text/x-python","patch_set":45,"id":"5ff73747_c2ef161c","line":151,"range":{"start_line":150,"start_character":43,"end_line":151,"end_character":58},"in_reply_to":"5ff73747_24fefdad","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"}],"releasenotes/notes/extend-quota-api-2df3b84309664234.yaml":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implements a new extension, quota_details which extends existing quota API"},{"line_number":5,"context_line":"    to show detailed information for a specified tenant."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"5ff73747_f6a454bb","line":4,"range":{"start_line":4,"start_character":32,"end_line":4,"end_character":45},"updated":"2017-04-26 15:28:32.000000000","message":"``quota_details``","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eab296f1b15270d0c7c53f92e3bfd94c5b916554","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implements a new extension, quota_details which extends existing quota API"},{"line_number":5,"context_line":"    to show detailed information for a specified tenant."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"5ff73747_f68d7431","line":5,"updated":"2017-04-26 15:28:32.000000000","message":"I think you should describe some more which new information can be fetched using the new API comparing to the old extension.","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":23821,"name":"Prince Nana Owusu Boateng","email":"prince.a.owusu.boateng@intel.com","username":"nanaboat"},"change_message_id":"912ef579682e21d5a33c0926b81f9bc8eac51aa7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implements a new extension, quota_details which extends existing quota API"},{"line_number":5,"context_line":"    to show detailed information for a specified tenant."}],"source_content_type":"text/x-yaml","patch_set":45,"id":"5ff73747_a2c9aaac","line":5,"in_reply_to":"5ff73747_f68d7431","updated":"2017-04-28 02:08:55.000000000","message":"Done","commit_id":"cca8e7b3b8693d681dc900558f57b30d9438336e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"45eaa1398c1389f82274d4d0bbce73d9a2febd66","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implements a new extension, \"quota_details\" which extends existing quota API"},{"line_number":5,"context_line":"    to show detailed information for a specified tenant. The new API shows"},{"line_number":6,"context_line":"    details such as \"limits\", \"used\", \"reserved\"."}],"source_content_type":"text/x-yaml","patch_set":47,"id":"5ff73747_1e3405dd","line":4,"updated":"2017-05-01 14:49:33.000000000","message":"replace \" with `` so that those names are properly marked in output HTML as special names.","commit_id":"87624770e6618b671e1346f11f37cb801a9a04d4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"45eaa1398c1389f82274d4d0bbce73d9a2febd66","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implements a new extension, \"quota_details\" which extends existing quota API"},{"line_number":5,"context_line":"    to show detailed information for a specified tenant. The new API shows"},{"line_number":6,"context_line":"    details such as \"limits\", \"used\", \"reserved\"."}],"source_content_type":"text/x-yaml","patch_set":47,"id":"5ff73747_9e55b5fc","line":6,"updated":"2017-05-01 14:49:33.000000000","message":"ditto","commit_id":"87624770e6618b671e1346f11f37cb801a9a04d4"}]}
