)]}'
{"doc/source/client.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"Continuing from the example above, in order to get the memberships for the"},{"line_number":336,"context_line":"first public image, we can use the following code"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":".. code-block:: python"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"  from glance.client import Client"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9Y%3D","line":337,"updated":"2011-08-15 19:14:20.000000000","message":"s/first public image/image with ID 1/","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"We want to authorize a tenant to access a private image."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Continuing from the example above, in order to share the first public image"},{"line_number":383,"context_line":"with \u0027tenant1\u0027, and to allow \u0027tenant2\u0027 to not only access the image but to also"},{"line_number":384,"context_line":"share it with other tenants, we can use the following code"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9U%3D","line":382,"updated":"2011-08-15 19:14:20.000000000","message":"s/first public image/image with ID 1/","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":408,"context_line":"We want to revoke a tenant\u0027s authorization to access a private image."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"Continuing from the example above, in order to revoke the access of \u0027tenant1\u0027"},{"line_number":411,"context_line":"to the first public image, we can use the following code"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":".. code-block:: python"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9Q%3D","line":411,"updated":"2011-08-15 19:14:20.000000000","message":"s/first public image/image with ID 1/","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":429,"context_line":"operation."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Continuing from the example above, in order to replace the membership list"},{"line_number":432,"context_line":"of the first public image with two entries--the first allowing \u0027tenant1\u0027 to"},{"line_number":433,"context_line":"access the image, and the second allowing \u0027tenant2\u0027 to access and further"},{"line_number":434,"context_line":"share the image, we can use the following code"},{"line_number":435,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9M%3D","line":432,"updated":"2011-08-15 19:14:20.000000000","message":"s/first public image/image with ID 1/","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"}],"doc/source/glanceapi.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":443,"context_line":"on the resulting URL."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"Continuing from the example above, in order to get the memberships for the"},{"line_number":446,"context_line":"first public image returned, we can issue a ``GET`` request to the Glance"},{"line_number":447,"context_line":"server for ``http://glance.example.com/images/1/members``.  What we will"},{"line_number":448,"context_line":"get back is JSON data such as the following::"},{"line_number":449,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2Bo%3D","line":446,"updated":"2011-08-12 20:49:04.000000000","message":"s/first public image/image with ID #1/s","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":455,"context_line":"The `member_id` field identifies a tenant with which the image is shared.  If"},{"line_number":456,"context_line":"that tenant is authorized to further share the image, the `can_share` field is"},{"line_number":457,"context_line":"`true`."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Requesting Shared Images"},{"line_number":461,"context_line":"------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2Bk%3D","line":458,"updated":"2011-08-12 20:49:04.000000000","message":"Does the owner of the image show up in the members collection? I would think it would be useful to make a note of this here...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":455,"context_line":"The `member_id` field identifies a tenant with which the image is shared.  If"},{"line_number":456,"context_line":"that tenant is authorized to further share the image, the `can_share` field is"},{"line_number":457,"context_line":"`true`."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"Requesting Shared Images"},{"line_number":461,"context_line":"------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F7E%3D","line":458,"in_reply_to":"AAAABH%2F%2F%2F%2Bk%3D","updated":"2011-08-12 21:19:14.000000000","message":"The owner shows up in the detail of the image only; I updated the docs to mention that.  There is no guarantee or requirement that the owner show up as a membership association, and the implementing code handles this naively.","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Adding a Member to an Image"},{"line_number":479,"context_line":"---------------------------"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"We want to authorize a tenant to access a private image.  We issue a ``PUT``"},{"line_number":482,"context_line":"request to ``http://glance.example.com/images/1/members/tenant1``.  With no"},{"line_number":483,"context_line":"body, this will add the membership to the image, leaving existing memberships"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2Bc%3D","line":480,"updated":"2011-08-12 20:49:04.000000000","message":"I would change this title to \"Sharing an Image with a User\"","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"Adding a Member to an Image"},{"line_number":479,"context_line":"---------------------------"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"We want to authorize a tenant to access a private image.  We issue a ``PUT``"},{"line_number":482,"context_line":"request to ``http://glance.example.com/images/1/members/tenant1``.  With no"},{"line_number":483,"context_line":"body, this will add the membership to the image, leaving existing memberships"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F7A%3D","line":480,"in_reply_to":"AAAABH%2F%2F%2F%2Bc%3D","updated":"2011-08-12 21:19:14.000000000","message":"Except it\u0027s not sharing the image with a user; it\u0027s sharing the image with a tenant.","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"We want to authorize a tenant to access a private image.  We issue a ``PUT``"},{"line_number":482,"context_line":"request to ``http://glance.example.com/images/1/members/tenant1``.  With no"},{"line_number":483,"context_line":"body, this will add the membership to the image, leaving existing memberships"},{"line_number":484,"context_line":"unmodified and defaulting new memberships to have `can_share` set to `false`."},{"line_number":485,"context_line":"We may also optionally attach a body of the following form::"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2Bg%3D","line":483,"updated":"2011-08-12 20:49:04.000000000","message":"s/add the membership to the image/share the image with id 1 with a user with id user1","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":491,"context_line":"If such a body is provided, both existing and new memberships will have"},{"line_number":492,"context_line":"`can_share` set to the provided value (either `true` or `false`).  This query"},{"line_number":493,"context_line":"will return a 204 (\"No Content\") status code."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"Removing a Member from an Image"},{"line_number":497,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2BY%3D","line":494,"updated":"2011-08-12 20:49:04.000000000","message":"Should a 204 be returned here when a new membership is created? Technically, we\u0027re adding a subresource, so I think a 201 Created would be more appropriate in that case and a 204 returned in the case of an update? Would make it easier for a client to tell if a membership was created or updated...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":491,"context_line":"If such a body is provided, both existing and new memberships will have"},{"line_number":492,"context_line":"`can_share` set to the provided value (either `true` or `false`).  This query"},{"line_number":493,"context_line":"will return a 204 (\"No Content\") status code."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"Removing a Member from an Image"},{"line_number":497,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F64%3D","line":494,"in_reply_to":"AAAABH%2F%2F%2F%2BY%3D","updated":"2011-08-12 21:19:14.000000000","message":"That\u0027s a good point.  It should be possible to return a 201/204 from the registry code, but it\u0027s harder to do from the API endpoint--and really, does it buy you any critical information to know whether the membership was created or simply modified?","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":517,"context_line":"removed, and those which are named have their `can_share` settings changed as"},{"line_number":518,"context_line":"specified.  (The `can_share` setting may be omitted, which will cause that"},{"line_number":519,"context_line":"setting to remain unchanged in the existing memberships.)  All new memberships"},{"line_number":520,"context_line":"will be created, with `can_share` defaulting to `false` if it is not specified."}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAABH%2F%2F%2F%2BU%3D","line":520,"updated":"2011-08-12 20:49:04.000000000","message":"Mention that a 204 is returned here","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  publically available"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"  The `owner` field is a string which may either be null or which will"},{"line_number":100,"context_line":"  indicate the owner (tenant) of the image"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Filtering Images Returned via ``GET /images`` and ``GET /images/detail``"},{"line_number":103,"context_line":"------------------------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9I%3D","line":100,"updated":"2011-08-15 19:14:20.000000000","message":"s/(tenant)//","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":206,"context_line":"  whether the image is publically available"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"  The response\u0027s `x-image-meta-owner` value is a string which may either"},{"line_number":209,"context_line":"  be null or which will indicate the owner (tenant) of the image"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Retrieving a Virtual Machine Image"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9E%3D","line":209,"updated":"2011-08-15 19:14:20.000000000","message":"s/(tenant)//","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"  whether the image is publically available"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"  The response\u0027s `x-image-meta-owner` value is a string which may either"},{"line_number":273,"context_line":"  be null or which will indicate the owner (tenant) of the image"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  The image data itself will be the body of the HTTP response returned"},{"line_number":276,"context_line":"  from the request, which will have content-type of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F9A%3D","line":273,"updated":"2011-08-15 19:14:20.000000000","message":"s/(tenant)//","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":393,"context_line":"  Glance normally sets the owner of an image to be the tenant of the"},{"line_number":394,"context_line":"  authenticated user issuing the request.  However, if the authenticated user"},{"line_number":395,"context_line":"  has the Admin role, this default may be overridden by setting this header to"},{"line_number":396,"context_line":"  null or to a string identifying the owner of the image."},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"* ``x-image-meta-property-*``"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F88%3D","line":396,"updated":"2011-08-15 19:14:20.000000000","message":"Make a mental note that the above needs to change when you add the ability to have the owner be the user...","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":437,"context_line":"Requesting Image Memberships"},{"line_number":438,"context_line":"----------------------------"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"We want to see a list of the other system tenants that may access a given"},{"line_number":441,"context_line":"virtual machine image that the Glance server knows about.  We take the `uri`"},{"line_number":442,"context_line":"field of the image data, append ``/members`` to it, and issue a ``GET`` request"},{"line_number":443,"context_line":"on the resulting URL."}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAB3%2F%2F%2F84%3D","line":440,"updated":"2011-08-15 19:14:20.000000000","message":"Mental note that everywhere you say tenants or system tenants in this doc page will eventually need to change to \"tenant or user\"...","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"}],"glance/api/v1/__init__.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        mapper.connect(\"/images/{id}\", controller\u003dresource,"},{"line_number":40,"context_line":"                       action\u003d\"meta\", conditions\u003ddict(method\u003d[\"HEAD\"]))"},{"line_number":41,"context_line":"        mapper.connect(\"/members/{member}/shared-images\","},{"line_number":42,"context_line":"                       controller\u003dresource, action\u003d\"images\")"},{"line_number":43,"context_line":"        mapper.connect(\"/images/{id}/members\","},{"line_number":44,"context_line":"                       controller\u003dresource, action\u003d\"members\","},{"line_number":45,"context_line":"                       conditions\u003ddict(method\u003d[\"GET\"]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F8E%3D","line":42,"updated":"2011-08-12 20:49:04.000000000","message":"please make the action shared_images and not just images to avoid confusion","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        mapper.connect(\"/images/{id}/members/{member}\","},{"line_number":53,"context_line":"                       controller\u003dresource, action\u003d\"delete_member\","},{"line_number":54,"context_line":"                       conditions\u003ddict(method\u003d[\"DELETE\"]))"},{"line_number":55,"context_line":"        super(API, self).__init__(mapper)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def app_factory(global_conf, **local_conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F8M%3D","line":55,"updated":"2011-08-12 20:49:04.000000000","message":"These new changes should be put into a 1.1 API. Doesn\u0027t mean that you need to go the route of Nova and have separate v1 and v1_1 views. Just make the versions controller return multiple version entities to notify the client that support for new 1.1 API functionality is supported on this server...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"30b66bd9a74468b929825923cdd117f310cc39d1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        mapper.connect(\"/images/{id}/members/{member}\","},{"line_number":53,"context_line":"                       controller\u003dresource, action\u003d\"delete_member\","},{"line_number":54,"context_line":"                       conditions\u003ddict(method\u003d[\"DELETE\"]))"},{"line_number":55,"context_line":"        super(API, self).__init__(mapper)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def app_factory(global_conf, **local_conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F6c%3D","line":55,"in_reply_to":"AAAABH%2F%2F%2F60%3D","updated":"2011-08-12 21:38:18.000000000","message":"I\u0027ll take over for Jay here: \n\nWe have chosen to only reveal major versions through the url (notice v1, not v1.0), but at the same time we need to communicate the supported minor versions. If we have two clients, one that supports only v1.0, and one that supports v1.1 (and implicitly v1.0), each needs to know what functionality it can present to the end-user. To communicate that information, we use the \u0027versions\u0027 response at the root resource (/). With this functionality you are adding, you need to add an entry to the response that details a v1.1 minor version.\n\nWe can discuss on skype if I haven\u0027t explained myself clearly enough here :)","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        mapper.connect(\"/images/{id}/members/{member}\","},{"line_number":53,"context_line":"                       controller\u003dresource, action\u003d\"delete_member\","},{"line_number":54,"context_line":"                       conditions\u003ddict(method\u003d[\"DELETE\"]))"},{"line_number":55,"context_line":"        super(API, self).__init__(mapper)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def app_factory(global_conf, **local_conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F60%3D","line":55,"in_reply_to":"AAAABH%2F%2F%2F8M%3D","updated":"2011-08-12 21:19:14.000000000","message":"I\u0027m not certain I understand what you\u0027re saying, here; sorry if I\u0027m being a little dense.  Could you go into a little more explanation of what you\u0027d like here?","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"}],"glance/api/v1/images.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                                         req.context, id)"},{"line_number":574,"context_line":"        registry.delete_image_metadata(self.options, req.context, id)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def members(self, req, id):"},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        Return a list of dictionaries indicating the members of the"},{"line_number":579,"context_line":"        image, i.e., those tenants the image is shared with."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F8I%3D","line":576,"updated":"2011-08-12 20:49:04.000000000","message":"please use image_id instead of id here. And yes, I know there are places where id is used elsewhere :) That\u0027s being cleaned up, though.","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                                         req.context, id)"},{"line_number":574,"context_line":"        registry.delete_image_metadata(self.options, req.context, id)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def members(self, req, id):"},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        Return a list of dictionaries indicating the members of the"},{"line_number":579,"context_line":"        image, i.e., those tenants the image is shared with."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F6w%3D","line":576,"in_reply_to":"AAAABH%2F%2F%2F8I%3D","updated":"2011-08-12 21:19:14.000000000","message":"OK :)","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":599,"context_line":"            raise HTTPForbidden(msg, request\u003dreq, content_type\u003d\u0027text/plain\u0027)"},{"line_number":600,"context_line":"        return dict(members\u003dmembers)"},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"    def images(self, req, member):"},{"line_number":603,"context_line":"        \"\"\""},{"line_number":604,"context_line":"        Retrieves list of image memberships for the given member."},{"line_number":605,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F8A%3D","line":602,"updated":"2011-08-12 20:49:04.000000000","message":"please make the action shared_images and not just images to avoid confusion","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"}],"glance/common/context.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            try:"},{"line_number":60,"context_line":"                # This means the is_image_visible() method may not be"},{"line_number":61,"context_line":"                # called from anything except the registry..."},{"line_number":62,"context_line":"                db_api.image_member_find(self, image.id, self.owner)"},{"line_number":63,"context_line":"                return True"},{"line_number":64,"context_line":"            except exception.NotFound:"},{"line_number":65,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F78%3D","line":62,"updated":"2011-08-12 20:49:04.000000000","message":"I think it may be better to create a RequestContext subclass just for the registry instead of putting a) registry imports like db_api in glance.common.context and b) methods that only work on the registry server...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            try:"},{"line_number":60,"context_line":"                # This means the is_image_visible() method may not be"},{"line_number":61,"context_line":"                # called from anything except the registry..."},{"line_number":62,"context_line":"                db_api.image_member_find(self, image.id, self.owner)"},{"line_number":63,"context_line":"                return True"},{"line_number":64,"context_line":"            except exception.NotFound:"},{"line_number":65,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F6s%3D","line":62,"in_reply_to":"AAAABH%2F%2F%2F78%3D","updated":"2011-08-12 21:19:14.000000000","message":"That\u0027s a good point; I\u0027ll see what I can do about that...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        # Determine whether to use tenant or owner"},{"line_number":62,"context_line":"        if \u0027owner_is_tenant\u0027 in self.options:"},{"line_number":63,"context_line":"            val \u003d self.options[\u0027owner_is_tenant\u0027]"},{"line_number":64,"context_line":"            if val.isdigit():"},{"line_number":65,"context_line":"                val \u003d bool(int(val))"},{"line_number":66,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAB3%2F%2F%2F8s%3D","line":63,"updated":"2011-08-15 19:14:20.000000000","message":"You need to use config.get_option() here for this boolean option, and supply a default.","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"}],"glance/registry/context.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            try:"},{"line_number":51,"context_line":"                # This means the is_image_visible() method may not be"},{"line_number":52,"context_line":"                # called from anything except the registry..."},{"line_number":53,"context_line":"                db_api.image_member_find(self, image.id, self.owner)"},{"line_number":54,"context_line":"                return True"},{"line_number":55,"context_line":"            except exception.NotFound:"},{"line_number":56,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAB3%2F%2F%2F8k%3D","line":53,"updated":"2011-08-15 19:14:20.000000000","message":"Remove the comment above.","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f16d84f83dfb1c52ea04b25ad2607c25638f48a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                # This means the is_image_sharable() method may not be"},{"line_number":84,"context_line":"                # called from anything except the registry..."},{"line_number":85,"context_line":"                membership \u003d db_api.image_member_find(self, image.id,"},{"line_number":86,"context_line":"                                                      self.owner)"},{"line_number":87,"context_line":"            except exception.NotFound:"},{"line_number":88,"context_line":"                # Not shared with us anyway"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAB3%2F%2F%2F8o%3D","line":85,"updated":"2011-08-15 19:14:20.000000000","message":"Remove the comment above.","commit_id":"79661b415f3151f081e7b26d383430b63c42a309"}],"glance/registry/server.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                                             member_id\u003d\u0027member\u0027,"},{"line_number":379,"context_line":"                                             can_share\u003d\u0027can_share\u0027))"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def images(self, req, member):"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        Retrieves images shared with the given member."},{"line_number":384,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F70%3D","line":381,"updated":"2011-08-12 20:49:04.000000000","message":"please use shared_images() instead of images() to avoid confusion here","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"}],"glance/tests/stubs.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":191,"context_line":"              fake_get_connection_type)"},{"line_number":192,"context_line":"    stubs.Set(glance.common.client.ImageBodyIterator, \u0027__iter__\u0027,"},{"line_number":193,"context_line":"              fake_image_iter)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"def stub_out_registry_db_image_api(stubs):"},{"line_number":197,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F7w%3D","line":194,"updated":"2011-08-12 20:49:04.000000000","message":"Please merge with trunk. The fake data store has been removed entirely...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0853b7d7cd3d6d6b522dd71bba8799e396abdb75","unresolved":false,"context_lines":[{"line_number":191,"context_line":"              fake_get_connection_type)"},{"line_number":192,"context_line":"    stubs.Set(glance.common.client.ImageBodyIterator, \u0027__iter__\u0027,"},{"line_number":193,"context_line":"              fake_image_iter)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"def stub_out_registry_db_image_api(stubs):"},{"line_number":197,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F6o%3D","line":194,"in_reply_to":"AAAABH%2F%2F%2F7w%3D","updated":"2011-08-12 21:19:14.000000000","message":"Yeah, I actually did merge with trunk, then resurrected it--partly just me being lazy and not wanting to have to figure out how to stub out the image_member_* stuff I needed.\n\nWhat happened with the fake data store?  Has it been replaced with some other methodology?","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"}],"glance/tests/unit/test_context.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"141dbf667cc93eac63b13876250ef7fd48780fc0","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        # The \u0027trap_door\u0027 tenant is a special tenant that causes"},{"line_number":218,"context_line":"        # stubs.stub_out_registry_db_image_api.image_member_find() to"},{"line_number":219,"context_line":"        # not throw a NotFound exception, for just this test."},{"line_number":220,"context_line":"        self.do_visible(True, \u0027pattieblack\u0027, False, tenant\u003d\u0027trap_door\u0027)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def test_auth_sharable(self):"},{"line_number":223,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAABH%2F%2F%2F7o%3D","line":220,"updated":"2011-08-12 20:49:04.000000000","message":"You will need to do this with the use of a fixture in the new non-stubbed test cases in trunk...","commit_id":"40b4d8909c8db54f2f178169c8bf95bd61d05329"}]}
