)]}'
{"designate/api/middleware.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"3f00dec255d9cf23a14b2327bf301dda1080389c","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        self.make_context("},{"line_number":143,"context_line":"            request,"},{"line_number":144,"context_line":"            is_admin\u003dself.determine_admin(headers),"},{"line_number":145,"context_line":"            auth_token\u003dheaders.get(\u0027X-Auth-Token\u0027, None),"},{"line_number":146,"context_line":"            user\u003dheaders.get(\u0027X-Auth-User-ID\u0027, \u0027noauth-user\u0027),"},{"line_number":147,"context_line":"            tenant\u003dheaders.get(\u0027X-Auth-Project-ID\u0027, \u0027noauth-project\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_c62701b4","line":144,"updated":"2014-06-25 19:58:34.000000000","message":"So - I\u0027m trying to see why this is necessary, It looks like we\u0027ve removed all instances of checks for is_admin\u003dTrue outside of the policy file, which will accept the admin role or is_admin\u003dTrue\n\nWhat error do you get without this?","commit_id":"b29536ba6f33aab0494ea5973e7ebcb3b9097317"}],"designate/api/v2/controllers/extensions/quotas.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _view \u003d quotas_view.QuotasView()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":28,"context_line":"    def get_one(self, tenant_id):"},{"line_number":29,"context_line":"        request \u003d pecan.request"},{"line_number":30,"context_line":"        context \u003d pecan.request.environ[\u0027context\u0027]"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4b9de3ba","line":28,"updated":"2014-06-17 16:29:58.000000000","message":"Not based on v1\u0027s usage but based on central\u0027s usage this should be get_all.\nget_one would be when you would be getting a quota for a single resource.\nEssentially the question would be is a resource or a tenant_id the smallest user addressable element?","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"54ec004acac58184d99ff7cc417327e67796b11a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _view \u003d quotas_view.QuotasView()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":28,"context_line":"    def get_one(self, tenant_id):"},{"line_number":29,"context_line":"        request \u003d pecan.request"},{"line_number":30,"context_line":"        context \u003d pecan.request.environ[\u0027context\u0027]"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_bd114055","line":28,"in_reply_to":"1ae5cdf2_4b9de3ba","updated":"2014-06-17 19:06:27.000000000","message":"A \u0027get_all\u0027 here would be essentially equal to the /limits call that end users can make, getting their regular limits. \n^^^ That\u0027s assuming you\u0027re talking about central\u0027s \u0027get_absolute_limits\u0027 function. \n\nIf you changed the way the quotas worked a little bit and made the different quota categories (resources) things that you could address I suppose then you would have to use a get_one to get at them. But it seems simpler and easier to me to just access a tenants limits all at once, and you can still change them one at a time with a patch, as opposed to having multiple api calls to change different limits.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return self._view.show(context, request, quotas)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":37,"context_line":"    def patch_one(self, tenant_id):"},{"line_number":38,"context_line":"        \"\"\" Modify a Quota \"\"\""},{"line_number":39,"context_line":"        request \u003d pecan.request"},{"line_number":40,"context_line":"        response \u003d pecan.response"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_2b0417c5","line":37,"updated":"2014-06-17 16:29:58.000000000","message":"Similar to above - this would be a patch_all. patch_one, I would think would be when you are changing one resource for a tenant_id, rather than all the resources.\nDo we need a patch_all or a similar method?  I am not sure.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"54ec004acac58184d99ff7cc417327e67796b11a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return self._view.show(context, request, quotas)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @pecan.expose(template\u003d\u0027json:\u0027, content_type\u003d\u0027application/json\u0027)"},{"line_number":37,"context_line":"    def patch_one(self, tenant_id):"},{"line_number":38,"context_line":"        \"\"\" Modify a Quota \"\"\""},{"line_number":39,"context_line":"        request \u003d pecan.request"},{"line_number":40,"context_line":"        response \u003d pecan.response"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_3d2530ae","line":37,"in_reply_to":"1ae5cdf2_2b0417c5","updated":"2014-06-17 19:06:27.000000000","message":"^Same as above from my point of view.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"34ddd08dabb59a7ede0de9a42999821361a07eac","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.central_api.reset_quotas(context, tenant_id)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        response.status_int \u003d 200"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_a9431412","line":70,"updated":"2014-06-23 13:08:34.000000000","message":"this should be a 204 No Content","commit_id":"2b2fff2f6cac11c324e22426a2cba2c8f14ea3d7"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"3f00dec255d9cf23a14b2327bf301dda1080389c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027zone_records\u0027: \u0027domain_records\u0027,"},{"line_number":79,"context_line":"            \"zone_recordsets\": \u0027domain_recordsets\u0027,"},{"line_number":80,"context_line":"            \"recordset_records\": \u0027recordset_records\u0027"},{"line_number":81,"context_line":"        }.get(resource, resource)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_4633f1f6","line":81,"updated":"2014-06-25 19:58:34.000000000","message":"This should be handled in the View\u0027s load method rather than here :)","commit_id":"b29536ba6f33aab0494ea5973e7ebcb3b9097317"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"0bd9c316f2edd321210294614ada2b15342fef47","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027zone_records\u0027: \u0027domain_records\u0027,"},{"line_number":79,"context_line":"            \"zone_recordsets\": \u0027domain_recordsets\u0027,"},{"line_number":80,"context_line":"            \"recordset_records\": \u0027recordset_records\u0027"},{"line_number":81,"context_line":"        }.get(resource, resource)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_81516332","line":81,"updated":"2014-06-25 20:47:03.000000000","message":"This should get moved to the View\u0027s load() method :)","commit_id":"382ed07d9a113b358704a446bceb0a0f5274a168"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"2f369d4dbd7d50f51fc112ae33cc61cfa5df4cae","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.central_api.set_quota(context, tenant_id, resource,"},{"line_number":53,"context_line":"                                       hard_limit)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        response.status_int \u003d 201"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        quotas \u003d self.central_api.get_quotas(context, tenant_id)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_986d2d06","line":55,"updated":"2014-06-26 17:59:57.000000000","message":"The return from other patch methods is a 200.","commit_id":"4d4061bae7c860502ed8ee633246807c3f436c90"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"2f369d4dbd7d50f51fc112ae33cc61cfa5df4cae","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        response.status_int \u003d 204"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_0318d274","line":72,"updated":"2014-06-26 17:59:57.000000000","message":"I did not observe any difference.  But other controllers return \u0027\u0027","commit_id":"4d4061bae7c860502ed8ee633246807c3f436c90"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"dde06d52873a9f76edf7693338177a2aa83b4874","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        values \u003d self._view.load(context, request, body)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Validate the request conforms to the schema"},{"line_number":54,"context_line":"        self._resource_schema.validate(values)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for resource, hard_limit in values.iteritems():"},{"line_number":57,"context_line":"            self.central_api.set_quota(context, tenant_id, resource,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_5b21da4d","line":54,"updated":"2014-06-26 20:13:53.000000000","message":"If we move this line above the self._view.load()\nand validate \u0027body\u0027 based on v2 naming - that should fix our issue","commit_id":"23d11805ecedb1aa7729d8bbf11f638d6b4e2853"}],"designate/api/v2/controllers/root.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"cfg.CONF.register_opts(["},{"line_number":29,"context_line":"    cfg.ListOpt(\u0027enabled-extensions-v2\u0027, default\u003d[],"},{"line_number":30,"context_line":"                help\u003d\u0027Enabled API Extensions\u0027),"},{"line_number":31,"context_line":"], group\u003d\u0027service:api\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_6bb3844d","line":30,"updated":"2014-06-17 16:29:58.000000000","message":"Could you add v2 to the help - i.e. change the help to \"Enabled v2 API Extensions\".","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"cfg.CONF.register_opts(["},{"line_number":29,"context_line":"    cfg.ListOpt(\u0027enabled-extensions-v2\u0027, default\u003d[],"},{"line_number":30,"context_line":"                help\u003d\u0027Enabled API Extensions\u0027),"},{"line_number":31,"context_line":"], group\u003d\u0027service:api\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class RootController(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_453954a2","line":31,"updated":"2014-06-17 16:29:58.000000000","message":"could you change the above to \n\nOPTS \u003d [cfg.ListOpt(..)]\n\ncfg.CONF.register_opts(OPTS, group\u003d\u0027service:api\u0027)\n\nsimilar to the change https://review.openstack.org/#/c/86709/.\nThis will be helpful later to convert all the options to generate a sample config file.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"54ec004acac58184d99ff7cc417327e67796b11a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"cfg.CONF.register_opts(["},{"line_number":29,"context_line":"    cfg.ListOpt(\u0027enabled-extensions-v2\u0027, default\u003d[],"},{"line_number":30,"context_line":"                help\u003d\u0027Enabled API Extensions\u0027),"},{"line_number":31,"context_line":"], group\u003d\u0027service:api\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class RootController(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_9da7240b","line":31,"in_reply_to":"1ae5cdf2_453954a2","updated":"2014-06-17 19:06:27.000000000","message":"Done","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"42b6d4cefad655b9e072c633b9408f359666de1a","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    enabled_ext \u003d cfg.CONF[\u0027service:api\u0027].enabled_extensions_v2"},{"line_number":49,"context_line":"    if len(enabled_ext) \u003e 0:"},{"line_number":50,"context_line":"        ext \u003d extension.ExtensionController(\u0027designate.api.v2.extensions\u0027,"},{"line_number":51,"context_line":"                                            enabled_ext)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_356a69ed","line":50,"updated":"2014-06-18 23:00:50.000000000","message":"If I\u0027m not mistaken, extensions will be forced into the \"/v2/ext\" namespace, which feels odd.\n\nI think we can load the extension, ask it (via a static method) what it\u0027s path will be (e.g. it could return zones.bla\") resulting in /v2/zones/\u003czone-id\u003e/bla or /v2/zones/bla, depending on the controller. We can walk that path, and attach the controller to the right place.\n\nThis can likely be done using a __new__ method (Kinda like a constructor, but the return value is the class to be instantiated), if Pecan won\u0027t accept us doing it in an __init__.","commit_id":"b2d62ed79b1b2bba0cce9baf755879984605f136"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"aaaadd282169f62f97e8b8b8f76a56b218c2bdf9","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    enabled_ext \u003d cfg.CONF[\u0027service:api\u0027].enabled_extensions_v2"},{"line_number":49,"context_line":"    if len(enabled_ext) \u003e 0:"},{"line_number":50,"context_line":"        ext \u003d extension.ExtensionController(\u0027designate.api.v2.extensions\u0027,"},{"line_number":51,"context_line":"                                            enabled_ext)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_70e79f12","line":50,"in_reply_to":"1ae5cdf2_356a69ed","updated":"2014-06-18 23:24:08.000000000","message":"You\u0027re correct.  I couldn\u0027t figure out any other way to do it. \n\nCould you perhaps point me toward an example of how what you\u0027re describing might look? \n\nI guess I couldn\u0027t figure out how to load only certain extensions in the root controller, for one. Also couldn\u0027t figure how to define a custom path in pecan. I\u0027m not sure what you mean by \"walk the path and attach the controller in the right place\"\n\nI suppose go through the extensions and and get the path from the static method, and then instantiate them as sub controllers of the one that matches the path somehow?","commit_id":"b2d62ed79b1b2bba0cce9baf755879984605f136"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"2d5392191dc21d26966f783f92b8e33f80e49016","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                    if p !\u003d \u0027\u0027:"},{"line_number":54,"context_line":"                        controller \u003d getattr(controller, p)"},{"line_number":55,"context_line":"                setattr(controller, path.split(\u0027.\u0027)[-1], ext.obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    limits \u003d limits.LimitsController()"},{"line_number":58,"context_line":"    schemas \u003d schemas.SchemasController()"},{"line_number":59,"context_line":"    reverse \u003d reverse.ReverseController()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_12563ace","line":56,"updated":"2014-06-19 20:23:59.000000000","message":"I know this code is ugly, if one of you smart folks can think of a nicer way to clean it up I\u0027d be very appreciative.","commit_id":"34b5b73c748abc21ac0ca0013dc67ed2af96f774"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"2f369d4dbd7d50f51fc112ae33cc61cfa5df4cae","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                path \u003d ext.obj.get_path()"},{"line_number":49,"context_line":"                for p in path.split(\u0027.\u0027)[:-1]:"},{"line_number":50,"context_line":"                    if p !\u003d \u0027\u0027:"},{"line_number":51,"context_line":"                        controller \u003d getattr(controller, p)"},{"line_number":52,"context_line":"                setattr(controller, path.split(\u0027.\u0027)[-1], ext.obj)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    limits \u003d limits.LimitsController()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_43bbba74","line":51,"updated":"2014-06-26 17:59:57.000000000","message":"Now it does not seem to matter - but here it appears that you are setting the controller on the last ext to either self (if there is only one .something) or to the last but one (.first.second.third.fourth - here third).  So in that case is it necessary to have the inner for loop?","commit_id":"4d4061bae7c860502ed8ee633246807c3f436c90"}],"designate/api/v2/views/extensions/quotas.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        return {"},{"line_number":32,"context_line":"            \"zones\": quota[\u0027domains\u0027],"},{"line_number":33,"context_line":"            \"zone_recordsets\": quota[\u0027domain_recordsets\u0027],"},{"line_number":34,"context_line":"            \"recordset_records\": quota[\u0027recordset_records\u0027]"},{"line_number":35,"context_line":"        }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def load(self, context, request, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_ae703574","line":34,"updated":"2014-06-17 16:29:58.000000000","message":"How about zone_records (for domain_records)?","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"54ec004acac58184d99ff7cc417327e67796b11a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        return {"},{"line_number":32,"context_line":"            \"zones\": quota[\u0027domains\u0027],"},{"line_number":33,"context_line":"            \"zone_recordsets\": quota[\u0027domain_recordsets\u0027],"},{"line_number":34,"context_line":"            \"recordset_records\": quota[\u0027recordset_records\u0027]"},{"line_number":35,"context_line":"        }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def load(self, context, request, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5debdc11","line":34,"in_reply_to":"1ae5cdf2_ae703574","updated":"2014-06-17 19:06:27.000000000","message":"Yeah that should probably be there.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"84d944390064af0a9b15db2ddc8a80ab9a5898dc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def load(self, context, request, body):"},{"line_number":38,"context_line":"        \"\"\" Extract a \"central\" compatible dict from an API call \"\"\""},{"line_number":39,"context_line":"        valid_keys \u003d (\u0027domain_records\u0027, \u0027domain_recordsets\u0027, \u0027domains\u0027,"},{"line_number":40,"context_line":"                      \u0027recordset_records\u0027)"},{"line_number":41,"context_line":"        return self._load(context, request, body, valid_keys)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_eee5dd38","line":40,"updated":"2014-06-17 16:29:58.000000000","message":"The load and show methods are not symmetrical.  If we display the resources as zone or zones..., then the valid keys too should be the same rather than domain.. or domains...","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"54ec004acac58184d99ff7cc417327e67796b11a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def load(self, context, request, body):"},{"line_number":38,"context_line":"        \"\"\" Extract a \"central\" compatible dict from an API call \"\"\""},{"line_number":39,"context_line":"        valid_keys \u003d (\u0027domain_records\u0027, \u0027domain_recordsets\u0027, \u0027domains\u0027,"},{"line_number":40,"context_line":"                      \u0027recordset_records\u0027)"},{"line_number":41,"context_line":"        return self._load(context, request, body, valid_keys)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_9d11e406","line":40,"in_reply_to":"1ae5cdf2_eee5dd38","updated":"2014-06-17 19:06:27.000000000","message":"In this next patchset I think I\u0027m just going to make them match the v1 things, and they we can discuss again what we want to actually call them. \n\nTo maintain compatibility with v1, changing the keys here would require changing them in the actual quotas module I believe. I\u0027ll have to check that.","commit_id":"fb9574fab943109496690931dce9e3a14effade6"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"34ddd08dabb59a7ede0de9a42999821361a07eac","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def show_basic(self, context, request, quota):"},{"line_number":30,"context_line":"        \"\"\" Basic view of a quota \"\"\""},{"line_number":31,"context_line":"        return {"},{"line_number":32,"context_line":"            \"domains\": quota[\u0027domains\u0027],"},{"line_number":33,"context_line":"            \"domain_records\": quota[\u0027domain_records\u0027],"},{"line_number":34,"context_line":"            \"domain_recordsets\": quota[\u0027domain_recordsets\u0027],"},{"line_number":35,"context_line":"            \"recordset_records\": quota[\u0027recordset_records\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_29b8e410","line":32,"updated":"2014-06-23 13:08:34.000000000","message":"Can we move this to zones? The entire V2 API refers to them as zones (or should at least) - We just have to make a transform between zones (what the user sees) and domains (what we still call everything internally)","commit_id":"2b2fff2f6cac11c324e22426a2cba2c8f14ea3d7"}],"designate/tests/test_api/test_v2/test_quotas.py":[{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"a183aa4470381ba0b37b64201b398cd90e91dc63","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class ApiV2QuotasTest(ApiV2TestCase):"},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(ApiV2QuotasTest, self).setUp()"},{"line_number":24,"context_line":"        self.config(enabled_extensions_v2\u003d\u0027quotas\u0027, group\u003d\u0027service:api\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_get_quotas(self):"},{"line_number":27,"context_line":"        context \u003d self.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_0f931ea5","line":24,"updated":"2014-06-23 18:06:52.000000000","message":"This doesn\u0027t work. \n\nself.config(enabled_extensions_v2\u003d[\u0027quotas\u0027], group\u003d\u0027service:api\u0027)\ndidn\u0027t work either.","commit_id":"8b773666cf5d1e631df3fd6d80be79a18dc5510a"}]}
