)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf5097aeccc6ebfcd17dc838a52341eacfbf8356","unresolved":false,"context_lines":[{"line_number":12,"context_line":"registered permanently but will have calls which lookup registration."},{"line_number":13,"context_line":"The FakeResource object in patch [2] is such a use case."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This chage is to wrap the pattern rather than accessing versioned"},{"line_number":16,"context_line":"object internals."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[1] https://review.openstack.org/#/c/243826/4/cinder/test.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa69d971_d361773a","line":15,"updated":"2016-01-05 17:25:23.000000000","message":"change","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"aa12beb93918533626a8941b49127fe008005400","unresolved":false,"context_lines":[{"line_number":12,"context_line":"registered permanently but will have calls which lookup registration."},{"line_number":13,"context_line":"The FakeResource object in patch [2] is such a use case."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This chage is to wrap the pattern rather than accessing versioned"},{"line_number":16,"context_line":"object internals."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[1] https://review.openstack.org/#/c/243826/4/cinder/test.py"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa69d971_9e7b9f29","line":15,"in_reply_to":"fa69d971_d361773a","updated":"2016-01-07 16:45:46.000000000","message":"Updated.","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf5097aeccc6ebfcd17dc838a52341eacfbf8356","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The FakeResource object in patch [2] is such a use case."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This chage is to wrap the pattern rather than accessing versioned"},{"line_number":16,"context_line":"object internals."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[1] https://review.openstack.org/#/c/243826/4/cinder/test.py"},{"line_number":19,"context_line":"[2] https://review.openstack.org/#/c/258026/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa69d971_93ce9f2b","line":16,"updated":"2016-01-05 17:25:23.000000000","message":"it\u0027s not \u0027versioned object internals\u0027 that you access, but \u0027oslo.versionedobjects library internals\u0027 that is a problem.","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"aa12beb93918533626a8941b49127fe008005400","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The FakeResource object in patch [2] is such a use case."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This chage is to wrap the pattern rather than accessing versioned"},{"line_number":16,"context_line":"object internals."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[1] https://review.openstack.org/#/c/243826/4/cinder/test.py"},{"line_number":19,"context_line":"[2] https://review.openstack.org/#/c/258026/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa69d971_bec6a347","line":16,"in_reply_to":"fa69d971_93ce9f2b","updated":"2016-01-07 16:45:46.000000000","message":"ok, modified.","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"}],"oslo_versionedobjects/base.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf5097aeccc6ebfcd17dc838a52341eacfbf8356","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        registry \u003d cls()"},{"line_number":154,"context_line":"        return registry._obj_classes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def backup_registry():"},{"line_number":158,"context_line":"        return copy.copy(VersionedObjectRegistry._registry._obj_classes)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_131e2fbb","line":156,"updated":"2016-01-05 17:25:23.000000000","message":"Seems adhoc. Can we maybe instead add a \u0027unregister\u0027 method that would be the opposite to existing register()?","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"cb1f1c5ff1b210fe977915025ba40eefd50d6648","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        registry \u003d cls()"},{"line_number":154,"context_line":"        return registry._obj_classes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def backup_registry():"},{"line_number":158,"context_line":"        return copy.copy(VersionedObjectRegistry._registry._obj_classes)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_cd430b41","line":156,"in_reply_to":"fa69d971_131e2fbb","updated":"2016-01-05 20:58:38.000000000","message":"We don\u0027t want/need to add an unregister() method (because there should never be a use case at runtime that we want to unregister a class). But these are more related to testing where we have multiple cases of locally registering an object just for one test that we don\u0027t want in the registry for fingerprinting.","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"aa12beb93918533626a8941b49127fe008005400","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        registry \u003d cls()"},{"line_number":154,"context_line":"        return registry._obj_classes"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @staticmethod"},{"line_number":157,"context_line":"    def backup_registry():"},{"line_number":158,"context_line":"        return copy.copy(VersionedObjectRegistry._registry._obj_classes)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_1e11efaf","line":156,"in_reply_to":"fa69d971_cd430b41","updated":"2016-01-07 16:45:46.000000000","message":"Rolled back as now implementing as a fixture in oslo_versionedobjects/fixture.py.","commit_id":"5452db7cb3b97a7b01dc658d7f4a1f8effbd7c54"}],"oslo_versionedobjects/fixture.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"e7295849370c61b1318e3cc848c0b46e824fa1cf","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    will have calls which lookup registration."},{"line_number":313,"context_line":"    \"\"\""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def __init__(self, cls):"},{"line_number":316,"context_line":"        self.cls \u003d cls"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_f1ce2882","line":315,"range":{"start_line":315,"start_character":23,"end_line":315,"end_character":26},"updated":"2016-01-08 20:24:24.000000000","message":"I would name this something other than \"cls\" because that tends to be reserved for classmethods symbolizing the local class.\n\nBut thinking about this more, I don\u0027t think the desired locally-registered class should be passed in. Consider these 2 situations:\n\n1) Locally registering 2+ objects\nBecause only one can be passed in, I would have to locally register the second myself, so it would look like\n\n    def setUp(self):\n        self.useFixture(fixture.VersionedObjectRegistryFixture(MyObj))\n        base.VersionedObjectRegistry.register(MyObj2)\n\n2) Registering an object in one test, and a different object in another test\nThis fixture is going to be used in setUp(), but there may be cases where the register needs to happen in the local test, because we may want different tests to test different registered classes.\n\n#1 can be solved with __init__(self, *args), but that would still conflict with #2.","commit_id":"46953e54424cddbdfdba83e6d104946666081e6b"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"0f14bb3d70f8a7a3c7408ecce4f0c6fe8fbd12e1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    will have calls which lookup registration."},{"line_number":313,"context_line":"    \"\"\""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def __init__(self, cls):"},{"line_number":316,"context_line":"        self.cls \u003d cls"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_0cd92c57","line":315,"range":{"start_line":315,"start_character":23,"end_line":315,"end_character":26},"in_reply_to":"fa69d971_f1ce2882","updated":"2016-01-11 14:30:13.000000000","message":"Agreed. I was of 2 thoughts about best approach and went with constructor idea as simplier from client usage of the class. Added register method which should cover both your points.","commit_id":"46953e54424cddbdfdba83e6d104946666081e6b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"84411023bb61655359312493cd896b8ffd5ebedc","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def setUp(self):"},{"line_number":366,"context_line":"        super(VersionedObjectRegistryFixture, self).setUp()"},{"line_number":367,"context_line":"        self._base_test_obj_backup \u003d copy.copy("},{"line_number":368,"context_line":"            base.VersionedObjectRegistry._registry._obj_classes)"},{"line_number":369,"context_line":"        self.addCleanup(self._restore_obj_registry)"},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_0317fded","line":367,"updated":"2016-01-22 02:55:55.000000000","message":"base.VersionedObjectRegistry._registry._obj_classes is a dict (well, technically it\u0027s a collections.defaultdict, but whatever...) and therefore you should be safe and use copy.deepcopy() here.","commit_id":"93bb6e349ddb33aa7233a915b46131e80eee18d0"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"a740210981a01d9f4c51a50435499e8f75b1f7cf","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def setUp(self):"},{"line_number":366,"context_line":"        super(VersionedObjectRegistryFixture, self).setUp()"},{"line_number":367,"context_line":"        self._base_test_obj_backup \u003d copy.copy("},{"line_number":368,"context_line":"            base.VersionedObjectRegistry._registry._obj_classes)"},{"line_number":369,"context_line":"        self.addCleanup(self._restore_obj_registry)"},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_6b3b1e9d","line":367,"in_reply_to":"9a68dd71_0317fded","updated":"2016-01-22 11:10:15.000000000","message":"Sure. Thanks for the \"heads up\". Changed to \u0027deepcopy\u0027.","commit_id":"93bb6e349ddb33aa7233a915b46131e80eee18d0"}],"oslo_versionedobjects/tests/test_fixture.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"0d8540ddd6bcd212f9ffd798736de72457559d65","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        self.assertRaises("},{"line_number":493,"context_line":"            exception.UnsupportedObjectError,"},{"line_number":494,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":495,"context_line":"            TestVersionedObjectRegistryFixture.primitive)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        # Register object locally"},{"line_number":498,"context_line":"        self.useFixture(fixture.VersionedObjectRegistryFixture())"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_e712b1b3","line":495,"updated":"2016-01-11 14:49:53.000000000","message":"Just FYI, you can use self.primitive here to get the dict ^ above, you don\u0027t have to type out the super long class name. You don\u0027t need to change it if you don\u0027t want, just figured I\u0027d let you know.","commit_id":"30315db24e006990357a3decb9f76e4e5d8937c5"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"f06dce8182810bb7a66132757bf79674b1120c7d","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        self.assertRaises("},{"line_number":493,"context_line":"            exception.UnsupportedObjectError,"},{"line_number":494,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":495,"context_line":"            TestVersionedObjectRegistryFixture.primitive)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        # Register object locally"},{"line_number":498,"context_line":"        self.useFixture(fixture.VersionedObjectRegistryFixture())"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_f8548fc6","line":495,"in_reply_to":"fa69d971_e712b1b3","updated":"2016-01-11 22:08:18.000000000","message":"I suppose, small gain. Updated.","commit_id":"30315db24e006990357a3decb9f76e4e5d8937c5"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"0d8540ddd6bcd212f9ffd798736de72457559d65","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        self.assertEqual(obj.identifier, 123)"},{"line_number":505,"context_line":"        self.assertEqual(\u00271.0\u0027, obj.VERSION)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def test_object_nolonger_registered(self):"},{"line_number":508,"context_line":"        # Test object that is no longer registered"},{"line_number":509,"context_line":"        self.assertRaises("},{"line_number":510,"context_line":"            exception.UnsupportedObjectError,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_078ee52d","line":507,"updated":"2016-01-11 14:49:53.000000000","message":"You actually can\u0027t be guaranteed that this will run after the other test, so this actually isn\u0027t testing anything.\n\nI would say you should make a test that calls fixture.setUp(), then registers the object, then call fixture.tearDown() (not sure if that\u0027s the correct function, just make sure all functions added by addCleanup() are called), and then check base.VersionedObjectRegistry._obj_classes to make sure the registered class is no longer in there.","commit_id":"30315db24e006990357a3decb9f76e4e5d8937c5"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"f06dce8182810bb7a66132757bf79674b1120c7d","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        self.assertEqual(obj.identifier, 123)"},{"line_number":505,"context_line":"        self.assertEqual(\u00271.0\u0027, obj.VERSION)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def test_object_nolonger_registered(self):"},{"line_number":508,"context_line":"        # Test object that is no longer registered"},{"line_number":509,"context_line":"        self.assertRaises("},{"line_number":510,"context_line":"            exception.UnsupportedObjectError,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_298dad7b","line":507,"in_reply_to":"fa69d971_078ee52d","updated":"2016-01-11 22:08:18.000000000","message":"Good point. Merged the two tests together to have pre and post tests of registration.","commit_id":"30315db24e006990357a3decb9f76e4e5d8937c5"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"c680f446befd2447a257a4060606199370b1fd32","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def get_objects(cls, context, **kwargs):"},{"line_number":67,"context_line":"        return list()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_512663bb","line":66,"updated":"2016-01-12 14:43:00.000000000","message":"It doesn\u0027t look like this function is used anywhere so I don\u0027t think you need it.","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"163bd91f0ccc09c3b51a8a8f38ddcfaaee8badbc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    }"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def get_objects(cls, context, **kwargs):"},{"line_number":67,"context_line":"        return list()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_7365a743","line":66,"in_reply_to":"da6ed579_512663bb","updated":"2016-01-12 16:27:59.000000000","message":"Removed.","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"c680f446befd2447a257a4060606199370b1fd32","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":495,"context_line":"            self.primitive)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        with fixture.VersionedObjectRegistryFixture() as obj_registry:"},{"line_number":498,"context_line":"            # Register object locally"},{"line_number":499,"context_line":"            obj_registry.setUp()"},{"line_number":500,"context_line":"            obj_registry.register(FakeResource)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_514d0371","line":497,"updated":"2016-01-12 14:43:00.000000000","message":"I didn\u0027t know you could use fixtures as a context manager. Neato!","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"163bd91f0ccc09c3b51a8a8f38ddcfaaee8badbc","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":495,"context_line":"            self.primitive)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        with fixture.VersionedObjectRegistryFixture() as obj_registry:"},{"line_number":498,"context_line":"            # Register object locally"},{"line_number":499,"context_line":"            obj_registry.setUp()"},{"line_number":500,"context_line":"            obj_registry.register(FakeResource)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_53c74312","line":497,"in_reply_to":"da6ed579_514d0371","updated":"2016-01-12 16:27:59.000000000","message":"ok","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"c680f446befd2447a257a4060606199370b1fd32","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        self.assertRaises("},{"line_number":510,"context_line":"            exception.UnsupportedObjectError,"},{"line_number":511,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":512,"context_line":"            TestVersionedObjectRegistryFixture.primitive)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_f1ac37ef","line":512,"range":{"start_line":512,"start_character":12,"end_line":512,"end_character":46},"updated":"2016-01-12 14:43:00.000000000","message":"this one can be self too :)","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"163bd91f0ccc09c3b51a8a8f38ddcfaaee8badbc","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        self.assertRaises("},{"line_number":510,"context_line":"            exception.UnsupportedObjectError,"},{"line_number":511,"context_line":"            FakeResource.obj_from_primitive,"},{"line_number":512,"context_line":"            TestVersionedObjectRegistryFixture.primitive)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_33d64fc6","line":512,"range":{"start_line":512,"start_character":12,"end_line":512,"end_character":46},"in_reply_to":"da6ed579_f1ac37ef","updated":"2016-01-12 16:27:59.000000000","message":"updated.","commit_id":"af3cbe9a897cb7afe419bd69daab48e632ec99b7"}],"oslo_versionedobjects/tests/test_objects.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"e7295849370c61b1318e3cc848c0b46e824fa1cf","unresolved":false,"context_lines":[{"line_number":2140,"context_line":"                         tree)"},{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"class TestVersionedObjectRegistryFixture(_BaseTestCase):"},{"line_number":2144,"context_line":""},{"line_number":2145,"context_line":"    primitive \u003d {\u0027versioned_object.name\u0027: \u0027FakeResource\u0027,"},{"line_number":2146,"context_line":"                 \u0027versioned_object.namespace\u0027: \u0027versionedobjects\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_d14444b8","line":2143,"updated":"2016-01-08 20:24:24.000000000","message":"This should be moved to tests/test_fixture.py","commit_id":"46953e54424cddbdfdba83e6d104946666081e6b"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"0f14bb3d70f8a7a3c7408ecce4f0c6fe8fbd12e1","unresolved":false,"context_lines":[{"line_number":2140,"context_line":"                         tree)"},{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"class TestVersionedObjectRegistryFixture(_BaseTestCase):"},{"line_number":2144,"context_line":""},{"line_number":2145,"context_line":"    primitive \u003d {\u0027versioned_object.name\u0027: \u0027FakeResource\u0027,"},{"line_number":2146,"context_line":"                 \u0027versioned_object.namespace\u0027: \u0027versionedobjects\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_71c5238c","line":2143,"in_reply_to":"fa69d971_d14444b8","updated":"2016-01-11 14:30:13.000000000","message":"Makes sense, moved.","commit_id":"46953e54424cddbdfdba83e6d104946666081e6b"}]}
