)]}'
{"keystone/common/extension.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c7c360a2e54da0a2b059e11dc4f0afab42986926","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"admin_extensions \u003d {}"},{"line_number":18,"context_line":"public_extensions \u003d {}"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2F2Io%3D","line":17,"updated":"2013-07-10 14:25:52.000000000","message":"UPPERCASE constants","commit_id":"eb5affff11047875d2d47eed20d690a59a406a08"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c7c360a2e54da0a2b059e11dc4f0afab42986926","unresolved":false,"context_lines":[{"line_number":18,"context_line":"public_extensions \u003d {}"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def register_admin_extension(suburl, extension_data):"},{"line_number":22,"context_line":"    admin_extensions[suburl] \u003d extension_data"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2F2IM%3D","line":21,"updated":"2013-07-10 14:25:52.000000000","message":"suburl -\u003e url_prefix?","commit_id":"eb5affff11047875d2d47eed20d690a59a406a08"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"PUBLIC_EXTENSIONS \u003d {}"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def register_admin_extension(url_prefix, extension_data):"},{"line_number":22,"context_line":"    ADMIN_EXTENSIONS[url_prefix] \u003d extension_data"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FxEo%3D","line":21,"updated":"2013-07-11 19:58:36.000000000","message":"might be useful to document here what goes in extension_data.","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def register_admin_extension(url_prefix, extension_data):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \"\"\"Register extension with collection of admin extensions."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    Extensions register the information here that will show"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2FszA%3D","line":23,"updated":"2013-07-12 19:44:21.000000000","message":"extra blank line here?","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Register extension with collection of admin extensions."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    Extensions register the information here that will show"},{"line_number":27,"context_line":"    up in the /extensions page as away to indicate that the extension is"},{"line_number":28,"context_line":"    active."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    url_prefix:  unique key for the extension that will appear in the"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2FszY%3D","line":27,"updated":"2013-07-12 19:44:21.000000000","message":"change \"away\" to \"a way\"","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def register_public_extension(url_prefix, extension_data):"},{"line_number":46,"context_line":"    \"\"\"Same as register_admin_extension but for public extensions.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    PUBLIC_EXTENSIONS[url_prefix] \u003d extension_data"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2Fsyw%3D","line":46,"updated":"2013-07-12 19:44:21.000000000","message":"What\u0027s the difference between an admin extension and public extension? I thought in v3 the admin and public are served through the same endpoint?\n\nAre deployers limited in what pipeline(s) they can put an extension into?","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"}],"keystone/contrib/admin_crud/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"extension.register_admin_extension("},{"line_number":23,"context_line":"    \u0027OS-KSADM\u0027, {"},{"line_number":24,"context_line":"        \u0027name\u0027: \u0027Openstack Keystone Admin\u0027,"},{"line_number":25,"context_line":"        \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":26,"context_line":"                     \u0027OS-KSADM/v1.0\u0027,"},{"line_number":27,"context_line":"        \u0027alias\u0027: \u0027OS-KSADM\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FxEM%3D","line":24,"updated":"2013-07-11 19:58:36.000000000","message":"(typo) \"Openstack\" -\u003e \"OpenStack\" (camel-case S)\n\nAlso, maybe change \"Admin\" to \"Administration\"","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                     \u0027OS-KSADM/v1.0\u0027,"},{"line_number":27,"context_line":"        \u0027alias\u0027: \u0027OS-KSADM\u0027,"},{"line_number":28,"context_line":"        \u0027updated\u0027: \u00272011-08-19T13:25:27-06:00\u0027,"},{"line_number":29,"context_line":"        \u0027description\u0027: \u0027Openstack extensions to Keystone v2.0 API \u0027"},{"line_number":30,"context_line":"                       \u0027enabling Admin Operations.\u0027,"},{"line_number":31,"context_line":"        \u0027links\u0027: ["},{"line_number":32,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FxEQ%3D","line":29,"updated":"2013-07-11 19:58:36.000000000","message":"(typo) \"Openstack\" -\u003e \"OpenStack\" (camel-case S)","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        \u0027alias\u0027: \u0027OS-KSADM\u0027,"},{"line_number":28,"context_line":"        \u0027updated\u0027: \u00272011-08-19T13:25:27-06:00\u0027,"},{"line_number":29,"context_line":"        \u0027description\u0027: \u0027Openstack extensions to Keystone v2.0 API \u0027"},{"line_number":30,"context_line":"                       \u0027enabling Admin Operations.\u0027,"},{"line_number":31,"context_line":"        \u0027links\u0027: ["},{"line_number":32,"context_line":"            {"},{"line_number":33,"context_line":"                \u0027rel\u0027: \u0027describedby\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fw2w%3D","line":30,"updated":"2013-07-11 19:58:36.000000000","message":"suggest change \"Admin Operations\" to \"administrative operations\"","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"}],"keystone/contrib/ec2/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c7c360a2e54da0a2b059e11dc4f0afab42986926","unresolved":false,"context_lines":[{"line_number":52,"context_line":"CONF \u003d config.CONF"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"extension_data \u003d {"},{"line_number":56,"context_line":"    \u0027name\u0027: \u0027Openstack EC2 API\u0027,"},{"line_number":57,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":58,"context_line":"                 \u0027OS-EC2/v1.0\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2F2H8%3D","line":55,"updated":"2013-07-10 14:25:52.000000000","message":"UPPERCASE","commit_id":"eb5affff11047875d2d47eed20d690a59a406a08"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"EXTENSION_DATA \u003d {"},{"line_number":56,"context_line":"    \u0027name\u0027: \u0027Openstack EC2 API\u0027,"},{"line_number":57,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":58,"context_line":"                 \u0027OS-EC2/v1.0\u0027,"},{"line_number":59,"context_line":"    \u0027alias\u0027: \u0027OS-EC2\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fw2E%3D","line":56,"updated":"2013-07-11 19:58:36.000000000","message":"change \"Openstack\" to \"OpenStack\"","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                 \u0027OS-EC2/v1.0\u0027,"},{"line_number":59,"context_line":"    \u0027alias\u0027: \u0027OS-EC2\u0027,"},{"line_number":60,"context_line":"    \u0027updated\u0027: \u00272013-07-07T12:00:0-00:00\u0027,"},{"line_number":61,"context_line":"    \u0027description\u0027: \u0027Openstack EC2 Credentials backend.\u0027,"},{"line_number":62,"context_line":"    \u0027links\u0027: ["},{"line_number":63,"context_line":"        {"},{"line_number":64,"context_line":"            \u0027rel\u0027: \u0027describedby\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fw1s%3D","line":61,"updated":"2013-07-11 19:58:36.000000000","message":"change \"Openstack\" to \"OpenStack\"\n\nlowercase \"credentials\"\n\nchange \"backend\" to \"operations\" ?","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"}],"keystone/contrib/s3/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d config.CONF"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"EXTENSION_DATA \u003d {"},{"line_number":40,"context_line":"    \u0027name\u0027: \u0027Openstack S3 API\u0027,"},{"line_number":41,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":42,"context_line":"                 \u0027s3tokens/v1.0\u0027,"},{"line_number":43,"context_line":"    \u0027alias\u0027: \u0027s3tokens\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fw1U%3D","line":40,"updated":"2013-07-11 19:58:36.000000000","message":"change \"Openstack\" to \"OpenStack\"","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b66482546d611915bd2edda6bda96571f7c3a2c3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                 \u0027s3tokens/v1.0\u0027,"},{"line_number":43,"context_line":"    \u0027alias\u0027: \u0027s3tokens\u0027,"},{"line_number":44,"context_line":"    \u0027updated\u0027: \u00272013-07-07T12:00:0-00:00\u0027,"},{"line_number":45,"context_line":"    \u0027description\u0027: \u0027Openstack S3 API.\u0027,"},{"line_number":46,"context_line":"    \u0027links\u0027: ["},{"line_number":47,"context_line":"        {"},{"line_number":48,"context_line":"            \u0027rel\u0027: \u0027describedby\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fw1M%3D","line":45,"updated":"2013-07-11 19:58:36.000000000","message":"change \"Openstack\" to \"OpenStack\"","commit_id":"a7ed73b113ccfc6be2be2cb58f7e4924d5666def"}],"keystone/controllers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class Extensions(wsgi.Application):"},{"line_number":34,"context_line":"    \"\"\"Base extensions controller to be extended by public and admin API\u0027s.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self, extensions\u003dNone):"},{"line_number":37,"context_line":"        super(Extensions, self).__init__()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def get_extensions_info(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2Fs0E%3D","line":36,"updated":"2013-07-12 19:44:21.000000000","message":"suggest remove the extensions argument since it\u0027s not used.\n\ncould just remove the __init__ function.","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            return {\u0027extension\u0027: self.extensions[extension_alias]}"},{"line_number":45,"context_line":"        except KeyError:"},{"line_number":46,"context_line":"            raise exception.NotFound(target\u003dextension_alias)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class AdminExtensions(Extensions):"},{"line_number":50,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2Fs0A%3D","line":47,"updated":"2013-07-12 19:44:21.000000000","message":"suggest add a @property extensions in this base class so that users of Extensions know that this property is available.","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class AdminExtensions(Extensions):"},{"line_number":50,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":51,"context_line":"        super(AdminExtensions, self).__init__(*args, **kwargs)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @property"},{"line_number":54,"context_line":"    def extensions(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2Fsz4%3D","line":51,"updated":"2013-07-12 19:44:21.000000000","message":"remove the __init__ function. PublicExtensions doesn\u0027t have one.","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"07cdc773e2c4e214131db8b6c3c1906b8da62283","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class PublicExtensions(Extensions):"},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def extensions(self):"},{"line_number":61,"context_line":"        return extension.PUBLIC_EXTENSIONS"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def register_version(version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2Fsz0%3D","line":61,"updated":"2013-07-12 19:44:21.000000000","message":"this is a bit more involved and a suggestion so take it or leave it if you don\u0027t think it\u0027s a good idea.\n\nI don\u0027t think we should have a new keystone.common.extensions module. Instead, have an EXTENSIONS in AdminExtensions and PublicExtensions and then when register, would do\n\nAdminExtensions.register_extension(url_prefix, extension_data)\n\nor\n\nPublicExtensions.register_extension(url_prefix, extension_data)\n\n(could just call the function register() since Extensions is already mentioned)\n\nThen you don\u0027t have 2 functions that differ in the admin/public part (which looks to me like a namespace problem).","commit_id":"d407b7e5e94eec1ea6d119702df578436c417556"}]}
