)]}'
{"glance/db/sqlalchemy/migrate_repo/versions/023_add_location_storage_information.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"be5a6cca7799551acfb53a4a4c879638f3fa1a35","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                          nullable\u003dFalse,"},{"line_number":75,"context_line":"                          default\u003dFalse,"},{"line_number":76,"context_line":"                          index\u003dTrue),"},{"line_number":77,"context_line":"        sqlalchemy.Column(\u0027storage_information\u0027,"},{"line_number":78,"context_line":"                          schema.PickleType(),"},{"line_number":79,"context_line":"                          default\u003d{}),"},{"line_number":80,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F55k%3D","line":77,"updated":"2013-06-06 11:07:32.000000000","message":"1. I think maybe \u0027meta_data\u0027 name is much better much common, \u0027storage_information\u0027 just a particular meta data here. Do you want to adding other columns when you need add other particular meta data types?\n2. I\u0027m not sure why you use \u0027PickleType\u0027 datatype here?","commit_id":"e891ae0be3398fac5b0862c052dbb43e98a683d0"}],"glance/db/sqlalchemy/migrate_repo/versions/026_add_location_storage_information.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"6ca6100b215d795d9a0ee1fb2b051ce11a414848","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                  schema.PickleType(),"},{"line_number":94,"context_line":"                                  default\u003d{})"},{"line_number":95,"context_line":"    meta_data.create(image_locations_table)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def downgrade(migrate_engine):"},{"line_number":99,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fgqg%3D","line":96,"updated":"2013-06-28 20:05:30.000000000","message":"I know we re waiting to figure out how Pickle affects the patch, but just sliding in a reminder for migration tests, which could maybe help test out some of the stuff","commit_id":"d7cae57d3f49dd1dc2a3abdaf6348e43067a1784"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"15a3edc3fee67dadd3889f4c2656d08376531c71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# Copyright 2013 Red Hat, Inc."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FZqA%3D","line":3,"updated":"2013-07-02 17:47:23.000000000","message":"You probably don\u0027t want to include this line.","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"014aed7ecaeaa516f58a35c81bbb801dbb469484","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# Copyright 2013 Red Hat, Inc."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FSv4%3D","line":3,"in_reply_to":"AAAAPn%2F%2FZqA%3D","updated":"2013-07-04 20:34:02.000000000","message":"Done","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"15a3edc3fee67dadd3889f4c2656d08376531c71","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":23,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FZp8%3D","line":20,"updated":"2013-07-02 17:47:23.000000000","message":"It looks like the header here is duplicated.","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"014aed7ecaeaa516f58a35c81bbb801dbb469484","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":23,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FSv8%3D","line":20,"in_reply_to":"AAAAPn%2F%2FZp8%3D","updated":"2013-07-04 20:34:02.000000000","message":"Done","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"15a3edc3fee67dadd3889f4c2656d08376531c71","unresolved":false,"context_lines":[{"line_number":34,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":35,"context_line":"#    under the License."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from migrate.changeset import *"},{"line_number":38,"context_line":"import sqlalchemy"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from glance.db.sqlalchemy.migrate_repo import schema"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FZpo%3D","line":37,"updated":"2013-07-02 17:47:23.000000000","message":"I can\u0027t actually find where the entities imported from migrate.changeset are being used.\n\nDoes this need to be here? If it does, how do you feel about changing it to use explicit imports?","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"014aed7ecaeaa516f58a35c81bbb801dbb469484","unresolved":false,"context_lines":[{"line_number":34,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":35,"context_line":"#    under the License."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from migrate.changeset import *"},{"line_number":38,"context_line":"import sqlalchemy"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from glance.db.sqlalchemy.migrate_repo import schema"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FSv0%3D","line":37,"in_reply_to":"AAAAPn%2F%2FZpo%3D","updated":"2013-07-04 20:34:02.000000000","message":"Done","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"ed5c2a5281a95239d3dd2f86111c27d172b85093","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"#    under the License."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Copyright 2011 OpenStack LLC."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2F9hY%3D","line":19,"updated":"2013-07-08 14:43:32.000000000","message":"I guess only one copyright should be there","commit_id":"8beaa447eb7b7c407d0ffdee5b54c7cbbabf0320"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c808c91540e4a7b347955c1b66aa2847afabbbc0","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from migrate.changeset import *"},{"line_number":19,"context_line":"import sqlalchemy"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from glance.db.sqlalchemy.migrate_repo import schema"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2F7NE%3D","line":18,"updated":"2013-07-09 04:09:08.000000000","message":"Wrong commit? seems you have fixed this previous PS..","commit_id":"0c6cec684c5ea732a6faea9545e5524911b3c09e"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"a3651193770acc748b8a2b4885e32836895bddf0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    corresponds to the images table definition of this version."},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    sqlalchemy.Table(\u0027images\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    image_locations_table \u003d sqlalchemy.Table("},{"line_number":32,"context_line":"        \u0027image_locations\u0027, meta,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2F61o%3D","line":29,"updated":"2013-07-09 07:36:24.000000000","message":"Why is it required here?","commit_id":"e4700d9925ce8b12392cc39120d0596959dd21c3"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"a3651193770acc748b8a2b4885e32836895bddf0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"},{"line_number":68,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    image_locations_table \u003d get_images_locations_table(meta)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    meta_data \u003d sqlalchemy.Column(\u0027meta_data\u0027,"},{"line_number":73,"context_line":"                                  schema.PickleType(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2F61M%3D","line":70,"updated":"2013-07-09 07:36:24.000000000","message":"why don\u0027t you use \n\nimage_locations_table \u003d sqlalchemy.Table(\u0027image_locations_table\u0027, meta, autoload\u003dTrue)\n\ninstead of get_images_locations_table()","commit_id":"e4700d9925ce8b12392cc39120d0596959dd21c3"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"27d2072ea567be7b1b3836d2cc348c7707407a49","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"},{"line_number":68,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    image_locations_table \u003d get_images_locations_table(meta)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    meta_data \u003d sqlalchemy.Column(\u0027meta_data\u0027,"},{"line_number":73,"context_line":"                                  schema.PickleType(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2F5NU%3D","line":70,"in_reply_to":"AAAAP3%2F%2F61M%3D","updated":"2013-07-09 16:48:48.000000000","message":"Good point.  I modelled this off of other migrations but if your way works it is much better.","commit_id":"e4700d9925ce8b12392cc39120d0596959dd21c3"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"a3651193770acc748b8a2b4885e32836895bddf0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"},{"line_number":80,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    image_locations_table \u003d get_images_locations_table(meta)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    image_locations_table.columns[\u0027meta_data\u0027].drop()"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2F60E%3D","line":82,"updated":"2013-07-09 07:36:24.000000000","message":"ditto","commit_id":"e4700d9925ce8b12392cc39120d0596959dd21c3"}],"glance/db/sqlalchemy/models.py":[{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"dbdfbdc84f6d5227d0530935183c183dad5e530d","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    image_id \u003d Column(String(36), ForeignKey(\u0027images.id\u0027), nullable\u003dFalse)"},{"line_number":154,"context_line":"    image \u003d relationship(Image, backref\u003dbackref(\u0027locations\u0027))"},{"line_number":155,"context_line":"    value \u003d Column(Text(), nullable\u003dFalse)"},{"line_number":156,"context_line":"    meta_data \u003d Column(PickleType(), default\u003d{})"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"class ImageMember(BASE, ModelBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2FsOw%3D","line":156,"updated":"2013-06-12 20:11:05.000000000","message":"so you can basically store any picklable object here, will there be restrictions like only dictionaries of picklable primitives. Are we going to allow custom object to be stored?","commit_id":"83b91a1ad0ed3d29f97049d24041b68ef2c05911"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"04bbc86971783188a78908480abaeb34db3899e6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    image_id \u003d Column(String(36), ForeignKey(\u0027images.id\u0027), nullable\u003dFalse)"},{"line_number":154,"context_line":"    image \u003d relationship(Image, backref\u003dbackref(\u0027locations\u0027))"},{"line_number":155,"context_line":"    value \u003d Column(Text(), nullable\u003dFalse)"},{"line_number":156,"context_line":"    meta_data \u003d Column(PickleType(), default\u003d{})"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"class ImageMember(BASE, ModelBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FtXo%3D","line":156,"in_reply_to":"AAAAPX%2F%2FsOw%3D","updated":"2013-06-24 19:55:10.000000000","message":"my plan was to only store dictionaries.  When a use looks up the image the location metadata is returned as a json doc so it must be able to be serialized to json.","commit_id":"83b91a1ad0ed3d29f97049d24041b68ef2c05911"},{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"729f82ec35cf276c64f183a802dc4f66ff5f57b8","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    image_id \u003d Column(String(36), ForeignKey(\u0027images.id\u0027), nullable\u003dFalse)"},{"line_number":154,"context_line":"    image \u003d relationship(Image, backref\u003dbackref(\u0027locations\u0027))"},{"line_number":155,"context_line":"    value \u003d Column(Text(), nullable\u003dFalse)"},{"line_number":156,"context_line":"    meta_data \u003d Column(PickleType(), default\u003d{})"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"class ImageMember(BASE, ModelBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FjdM%3D","line":156,"in_reply_to":"AAAAPn%2F%2FtXo%3D","updated":"2013-06-27 21:20:15.000000000","message":"Thanks for response, sounds good","commit_id":"83b91a1ad0ed3d29f97049d24041b68ef2c05911"}],"glance/tests/unit/test_migrations.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"738acafbd584f6f61a04bb94464ecd9703cc9046","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2010-2011 OpenStack, LLC"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FgA8%3D","line":1,"updated":"2013-06-29 04:46:40.000000000","message":"Why change/remove this line?","commit_id":"0020a97745b4a17ac24bc459b4912fd0b6648317"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"62ff3d0414e559915a85d92bd171a9b89a5b7835","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2010-2011 OpenStack, LLC"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"# Copyright 2013 IBM Corp."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Ff4U%3D","line":1,"in_reply_to":"AAAAPn%2F%2FgA8%3D","updated":"2013-06-29 06:22:39.000000000","message":"just cruft.  Good catch, thanks! (and sorry)","commit_id":"0020a97745b4a17ac24bc459b4912fd0b6648317"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"15a3edc3fee67dadd3889f4c2656d08376531c71","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        self.assertEquals(len(r), 1)"},{"line_number":710,"context_line":"        self.assertEquals(r[0][\u0027value\u0027], \u0027file:///some/place/onthe/fs\u0027)"},{"line_number":711,"context_line":"        #NOTE(jbresnah) select on a table does not seem to unpickle the"},{"line_number":712,"context_line":"        # object so all we can do is check that it was added"},{"line_number":713,"context_line":"        self.assertTrue(\u0027meta_data\u0027 in r[0])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FZpE%3D","line":712,"updated":"2013-07-02 17:47:23.000000000","message":"That\u0027s a bit strange. . how are you supposed to use it then? Explicitly unpickling?","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"014aed7ecaeaa516f58a35c81bbb801dbb469484","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        self.assertEquals(len(r), 1)"},{"line_number":710,"context_line":"        self.assertEquals(r[0][\u0027value\u0027], \u0027file:///some/place/onthe/fs\u0027)"},{"line_number":711,"context_line":"        #NOTE(jbresnah) select on a table does not seem to unpickle the"},{"line_number":712,"context_line":"        # object so all we can do is check that it was added"},{"line_number":713,"context_line":"        self.assertTrue(\u0027meta_data\u0027 in r[0])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FSwA%3D","line":712,"in_reply_to":"AAAAPn%2F%2FZpE%3D","updated":"2013-07-04 20:34:02.000000000","message":"I find this strange also.  When I use the session.query() features of sqlalchemy i get a fully inflated object back.  However when using table select as is much more readily available in these tests I get back a byte string.","commit_id":"fbc574fc596be23382cfc2feb6bb3fc08a1f4174"}]}
