)]}'
{"openstack/object_store/v1/_base.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"b44b9cc7c52126e0d6ff03a3cd9139796b0ce7d6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    #: Metadata stored for this resource. *Type: dict*"},{"line_number":24,"context_line":"    metadata \u003d dict()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _set_metadata_attribute(self, prefix):"},{"line_number":27,"context_line":"        self.metadata \u003d dict()"},{"line_number":28,"context_line":"        headers \u003d self.get_headers()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_5ade4040","line":26,"updated":"2016-02-04 15:55:54.000000000","message":"Since this is setting all metadata, maybe this should be called _set_metadata_attributes.","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"57d6cd398cff85ed35827565a2402e02525bdb97","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    #: Metadata stored for this resource. *Type: dict*"},{"line_number":24,"context_line":"    metadata \u003d dict()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _set_metadata_attribute(self, prefix):"},{"line_number":27,"context_line":"        self.metadata \u003d dict()"},{"line_number":28,"context_line":"        headers \u003d self.get_headers()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_ffcfd57c","line":26,"in_reply_to":"5a5ae5dd_5ade4040","updated":"2016-02-04 18:08:39.000000000","message":"This method sets the (one and only) metadata attribute on the object store resource.\n\nIs attribute too broad a term? \n\nIt seems to the prevailing term [1] for describing such a thing but I might be missing some subtly.\n\n[1] https://docs.python.org/2/tutorial/classes.html#python-scopes-and-namespaces","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"2f6059de4ea21f24824e2c357f13c5229f1e74c7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    #: Metadata stored for this resource. *Type: dict*"},{"line_number":24,"context_line":"    metadata \u003d dict()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _set_metadata_attribute(self, prefix):"},{"line_number":27,"context_line":"        self.metadata \u003d dict()"},{"line_number":28,"context_line":"        headers \u003d self.get_headers()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_9c5a14f1","line":26,"in_reply_to":"5a5ae5dd_c891fd9a","updated":"2016-02-07 22:55:16.000000000","message":"Done","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"05e22ffe73fc5b1ba974f9bba587729a3d9de667","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    #: Metadata stored for this resource. *Type: dict*"},{"line_number":24,"context_line":"    metadata \u003d dict()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _set_metadata_attribute(self, prefix):"},{"line_number":27,"context_line":"        self.metadata \u003d dict()"},{"line_number":28,"context_line":"        headers \u003d self.get_headers()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_c891fd9a","line":26,"in_reply_to":"5a5ae5dd_e5d744eb","updated":"2016-02-04 19:11:51.000000000","message":"I think it\u0027s probably fine to even drop \"_attribute\"","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"43cd58163c4d839d54b2dadace197966a8bea606","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    #: Metadata stored for this resource. *Type: dict*"},{"line_number":24,"context_line":"    metadata \u003d dict()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _set_metadata_attribute(self, prefix):"},{"line_number":27,"context_line":"        self.metadata \u003d dict()"},{"line_number":28,"context_line":"        headers \u003d self.get_headers()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_e5d744eb","line":26,"in_reply_to":"5a5ae5dd_ffcfd57c","updated":"2016-02-04 18:56:28.000000000","message":"I understand what you mean now.  This is fine.","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"05e22ffe73fc5b1ba974f9bba587729a3d9de667","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                metadata_key \u003d header_key[len(prefix):].lower()"},{"line_number":33,"context_line":"                self.metadata[metadata_key] \u003d headers[header_key]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def update_metadata(self, session, prefix, new_metadata):"},{"line_number":36,"context_line":"        updated_metadata \u003d copy.deepcopy(self.metadata)"},{"line_number":37,"context_line":"        updated_metadata.update(new_metadata)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_c86d7d99","line":35,"range":{"start_line":35,"start_character":39,"end_line":35,"end_character":45},"updated":"2016-02-04 19:11:51.000000000","message":"Instead of making prefix an argument here, since this is a base class I think we should move the subclass\u0027 METADATA_PREFIX to be a part of this base (but lower-case), and then reference self.metadata_prefix","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"2f6059de4ea21f24824e2c357f13c5229f1e74c7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                metadata_key \u003d header_key[len(prefix):].lower()"},{"line_number":33,"context_line":"                self.metadata[metadata_key] \u003d headers[header_key]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def update_metadata(self, session, prefix, new_metadata):"},{"line_number":36,"context_line":"        updated_metadata \u003d copy.deepcopy(self.metadata)"},{"line_number":37,"context_line":"        updated_metadata.update(new_metadata)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_3c768070","line":35,"range":{"start_line":35,"start_character":39,"end_line":35,"end_character":45},"in_reply_to":"5a5ae5dd_c86d7d99","updated":"2016-02-07 22:55:16.000000000","message":"Done","commit_id":"989ecc6b92f1074d3a6fca460d0ae13bc1a642aa"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"b0bc2a7487011833fecce461a7897cdb94b3b19d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_2cd46c45","line":18,"updated":"2016-02-16 21:50:17.000000000","message":"Adding something like the following in here would allow you to remove the _system_metadata manually maintained dictionary.\n\n    @classmethod\n    def _get_header_mapping(cls):\n        mapping \u003d {}\n        for key, value in cls.__dict__.items():\n            if isinstance(value, resource.header):\n                mapping[key] \u003d value.name\n        return mapping","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"cb1840ac3db2986af38b9127e045ad7e0fdbe99c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_6f18f41e","line":18,"in_reply_to":"dae33548_2cd46c45","updated":"2016-02-17 16:39:06.000000000","message":"One of the things i use _system_metadata for is to distinguish between system metadata and custom metadata. This snippet doesn\u0027t quite work for that but it\u0027s doable. By adding another field to the resource header prop like so.\n\n    read_ACL \u003d resource.header(\"x-container-read\", system_metadata\u003dTrue)\n\nThe snippet becomes\n\n    @classmethod\n    def _get_header_mapping(cls):\n        mapping \u003d {}\n        for key, value in cls.__dict__.items():\n            if isinstance(value, resource.header) and value.system_metadata:\n                mapping[key] \u003d value.name\n        return mapping\n\nThat can actually work but it feels weird to put something like the system_metadata bool in a the generic resource header prop. I suppose I could subclass it and add the system_metadata bool there like so\n\nclass object_store_header(header):\n    def __init__(self, name, alias\u003dNone, type\u003dNone, default\u003dNone, system_metadata\u003dFalse):\n        self.system_metadata \u003d system_metadata\n        super(object_store_header, self).__init__(name, alias, type, default)\n\nThoughts?","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"a7d6f2904a978b29de070a3615b05fc46077611a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_ef7fcd12","line":18,"in_reply_to":"dae33548_4ff7f058","updated":"2016-02-18 01:31:23.000000000","message":"But there\u0027s mutable system metadata (I\u0027m running out of names to call this junk) like\n\n    read_ACL \u003d resource.header(\"x-container-read\")\n    write_ACL \u003d resource.header(\"x-container-write\")\n\nand there\u0027s immutable system metadata like\n\n    object_count \u003d resource.header(\"x-container-object-count\", type\u003dint)\n    bytes_used \u003d resource.header(\"x-container-bytes-used\", type\u003dint)\n\nand both headers are only prefixed with \"x-container\" so there\u0027s no good way to tell the mutable and immutable system metadata apart. :/\n\nI\u0027m still willing to do the flags. Or we can leave it as is and hope something better comes along, like a less janky object store API.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d3e7166b3901a0250a09bbd8f0b51c1831b536dc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_4ff7f058","line":18,"in_reply_to":"dae33548_6f18f41e","updated":"2016-02-17 16:48:38.000000000","message":"I confess to not having run your branch with that snippet, but the _get_header_mapping would only ever have what you\u0027re calling system metadata since it\u0027s pulling the resource.header instances defined on the resource subclasses. No one\u0027s custom metadata would end up as a part of the class definition of, e.g., Container.\n\nIf I misunderstood that stuff, then yeah, it\u0027s not worth adding extra flags and perhaps this is too much.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"f3ad17f32b0cd1b97c3f46da94023ae49899e539","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_b3d64025","line":18,"in_reply_to":"dae33548_8766c1b8","updated":"2016-02-21 19:41:23.000000000","message":"Alright. Left it as is.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"e0f1d42740aed27843e4793f564391976db0142b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack import resource"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseResource(resource.Resource):"},{"line_number":19,"context_line":"    service \u003d object_store_service.ObjectStoreService()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    #: Metadata stored for this resource. *Type: dict*"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_8766c1b8","line":18,"in_reply_to":"dae33548_ef7fcd12","updated":"2016-02-18 15:42:13.000000000","message":"Nah, I guess it\u0027s fine as-is.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"ee5af3802b661a2932d2144b47fbbce2e3ed6ad9","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _calculate_headers(self, metadata):"},{"line_number":28,"context_line":"        headers \u003d dict()"},{"line_number":29,"context_line":"        for k in metadata:"},{"line_number":30,"context_line":"            if k in self._system_metadata:"},{"line_number":31,"context_line":"                header \u003d self._system_metadata[k]"},{"line_number":32,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_a1ba556c","line":29,"range":{"start_line":29,"start_character":13,"end_line":29,"end_character":14},"updated":"2016-02-16 16:58:24.000000000","message":"Can k be key here? It generally reads better that way, especially when we\u0027re using it below as a key and also makes it slightly more readable what the prefix is being prepended to.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"f3ad17f32b0cd1b97c3f46da94023ae49899e539","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _calculate_headers(self, metadata):"},{"line_number":28,"context_line":"        headers \u003d dict()"},{"line_number":29,"context_line":"        for k in metadata:"},{"line_number":30,"context_line":"            if k in self._system_metadata:"},{"line_number":31,"context_line":"                header \u003d self._system_metadata[k]"},{"line_number":32,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_f3e0c8fc","line":29,"range":{"start_line":29,"start_character":13,"end_line":29,"end_character":14},"in_reply_to":"dae33548_69066bcf","updated":"2016-02-21 19:41:23.000000000","message":"Fixed here and elsewhere too.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"cb1840ac3db2986af38b9127e045ad7e0fdbe99c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _calculate_headers(self, metadata):"},{"line_number":28,"context_line":"        headers \u003d dict()"},{"line_number":29,"context_line":"        for k in metadata:"},{"line_number":30,"context_line":"            if k in self._system_metadata:"},{"line_number":31,"context_line":"                header \u003d self._system_metadata[k]"},{"line_number":32,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_69066bcf","line":29,"range":{"start_line":29,"start_character":13,"end_line":29,"end_character":14},"in_reply_to":"dae33548_a1ba556c","updated":"2016-02-17 16:39:06.000000000","message":"Will fix here and elsewhere too.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"c36c8c5b36fa01cb3906f815a7619964e8ac6ccb","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get(self, session, include_headers\u003dFalse, args\u003dNone):"},{"line_number":58,"context_line":"        super(BaseResource, self).get(session, include_headers, args)"},{"line_number":59,"context_line":"        self._set_metadata()"},{"line_number":60,"context_line":"        return self"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def head(self, session):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_a927d762","line":59,"updated":"2016-02-22 14:41:20.000000000","message":"It isn\u0027t obvious why getting a resource results in metadata being set.  A comment would be nice.","commit_id":"4ae0638048a572f2fbab71047d4d33e63dc6819a"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"c36c8c5b36fa01cb3906f815a7619964e8ac6ccb","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def head(self, session):"},{"line_number":63,"context_line":"        super(BaseResource, self).head(session)"},{"line_number":64,"context_line":"        self._set_metadata()"},{"line_number":65,"context_line":"        return self"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_291c6711","line":64,"updated":"2016-02-22 14:41:20.000000000","message":"Similar comment as above.","commit_id":"4ae0638048a572f2fbab71047d4d33e63dc6819a"}],"openstack/object_store/v1/container.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"ee5af3802b661a2932d2144b47fbbce2e3ed6ad9","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Container(_base.BaseResource):"},{"line_number":20,"context_line":"    _custom_metadata_prefix \u003d \"X-Container-Meta-\""},{"line_number":21,"context_line":"    _system_metadata \u003d {"},{"line_number":22,"context_line":"        \"content_type\": \"content-type\","},{"line_number":23,"context_line":"        \"detect_content_type\": \"x-detect-content-type\","},{"line_number":24,"context_line":"        \"versions_location\": \"x-versions-location\","}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_4131c904","line":21,"range":{"start_line":21,"start_character":4,"end_line":21,"end_character":20},"updated":"2016-02-16 16:58:24.000000000","message":"Will that snippet I sent you called get_mapping work for this? Although I have some other usage for that kind of thing down the line, which we\u0027ll deal with when we get there, you could probably put that method on object_store\u0027s BaseResource to get this manually curated dict out of the way.","commit_id":"fc7007313ea94c8264ac5bff663adf375d1b1fa9"}],"openstack/tests/functional/object_store/v1/test_account.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"87292200ff907c017139837a87d33e4a30a03066","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":34,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":35,"context_line":"        self.assertEqual(1, len(account.metadata))"},{"line_number":36,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":37,"context_line":"        self.assertEqual(\u0027v1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k2\u0027: \u0027v2\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_01ed078b","line":36,"updated":"2016-02-03 13:27:47.000000000","message":"Consider using assertIn().","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"67278dedaea5cb39ab62318144b0e95d78f7c64a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":34,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":35,"context_line":"        self.assertEqual(1, len(account.metadata))"},{"line_number":36,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":37,"context_line":"        self.assertEqual(\u0027v1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k2\u0027: \u0027v2\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_a604327e","line":36,"in_reply_to":"5a5ae5dd_01ed078b","updated":"2016-02-03 20:09:47.000000000","message":"Done","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"87292200ff907c017139837a87d33e4a30a03066","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":41,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":42,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":43,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":44,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k1\u0027: \u0027v1.1\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_a102f33c","line":43,"updated":"2016-02-03 13:27:47.000000000","message":"Consider using assertIn().","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"67278dedaea5cb39ab62318144b0e95d78f7c64a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":41,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":42,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":43,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":44,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k1\u0027: \u0027v1.1\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_c6092e97","line":43,"in_reply_to":"5a5ae5dd_a102f33c","updated":"2016-02-03 20:09:47.000000000","message":"Done","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"87292200ff907c017139837a87d33e4a30a03066","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":48,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":49,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":50,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":51,"context_line":"        self.assertEqual(\u0027v1.1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":52,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":53,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_c1ffef32","line":50,"updated":"2016-02-03 13:27:47.000000000","message":"Consider using assertIn().","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"67278dedaea5cb39ab62318144b0e95d78f7c64a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        account \u003d self.conn.object_store.get_account_metadata()"},{"line_number":48,"context_line":"        self.assertTrue(account.metadata)"},{"line_number":49,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":50,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":51,"context_line":"        self.assertEqual(\u0027v1.1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":52,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":53,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_26f92281","line":50,"in_reply_to":"5a5ae5dd_c1ffef32","updated":"2016-02-03 20:09:47.000000000","message":"Done","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"87292200ff907c017139837a87d33e4a30a03066","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":50,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":51,"context_line":"        self.assertEqual(\u0027v1.1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":52,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":53,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k1\u0027: \u0027\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_81f9f74f","line":52,"updated":"2016-02-03 13:27:47.000000000","message":"Consider using assertIn().","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"67278dedaea5cb39ab62318144b0e95d78f7c64a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.assertEqual(2, len(account.metadata))"},{"line_number":50,"context_line":"        self.assertTrue(\u0027k1\u0027 in account.metadata)"},{"line_number":51,"context_line":"        self.assertEqual(\u0027v1.1\u0027, account.metadata[\u0027k1\u0027])"},{"line_number":52,"context_line":"        self.assertTrue(\u0027k2\u0027 in account.metadata)"},{"line_number":53,"context_line":"        self.assertEqual(\u0027v2\u0027, account.metadata[\u0027k2\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.conn.object_store.set_account_metadata(account, {\u0027k1\u0027: \u0027\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_46f69e90","line":52,"in_reply_to":"5a5ae5dd_81f9f74f","updated":"2016-02-03 20:09:47.000000000","message":"Done","commit_id":"a875fbe4725c35a5c9a00c2b1e53c842a9c335fb"}]}
