)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Dan Smith \u003cdansmith@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-11-22 11:17:07 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add {get,set}_flavor() to Instance object"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a native interface to the Instance object to get and save"},{"line_number":10,"context_line":"either the main or stashed flavors. This will let us migrate code"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F95%2Fw%3D","line":7,"updated":"2013-12-04 16:57:48.000000000","message":"Not only get and set but also delete.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"}],"nova/objects/instance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                action\u003d\u0027obj_load_attr\u0027,"},{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        if namespace is None:"},{"line_number":476,"context_line":"            prefix \u003d \u0027\u0027"},{"line_number":477,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F96AQ%3D","line":474,"updated":"2013-12-04 16:57:48.000000000","message":"Would be nice to have a docstring here that explains the namespace argument, i.e. it\u0027s usage as \u0027new\u0027 and \u0027old\u0027 for keeping track during migrate/resize operations in regard to system_metadata on the instance.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45ff826cff56dc938a47e50d4f53ef629566b3d0","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                action\u003d\u0027obj_load_attr\u0027,"},{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        if namespace is None:"},{"line_number":476,"context_line":"            prefix \u003d \u0027\u0027"},{"line_number":477,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F950Y%3D","line":474,"in_reply_to":"AAAATn%2F955M%3D","updated":"2013-12-04 17:29:18.000000000","message":"Yeah, I see your second point, especially with pci doing namespacing.  I guess I\u0027m just always partial to doing docstrings on public methods, but it\u0027s personal preference.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71b3369e111c042f7df391d02d9f55658fa22c06","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                action\u003d\u0027obj_load_attr\u0027,"},{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        if namespace is None:"},{"line_number":476,"context_line":"            prefix \u003d \u0027\u0027"},{"line_number":477,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F955M%3D","line":474,"in_reply_to":"AAAATn%2F96AQ%3D","updated":"2013-12-04 17:11:58.000000000","message":"Personally, I think this is tiny enough that it\u0027s pretty obvious what the namespace is. Also, calling it out in the Instance object for how it\u0027s used in compute_api and compute_manager is kindof a view/model violation, no?","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":481,"context_line":"        flavor \u003d flavor_obj.Flavor()"},{"line_number":482,"context_line":"        for key in flavors.system_metadata_flavor_props:"},{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F959s%3D","line":482,"updated":"2013-12-04 16:57:48.000000000","message":"Hmm, it seems odd to have this code in the Instance object rather than encapsulating it in the Flavor object.  Thinking of something like the _from_db_object in the Instance class.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45ff826cff56dc938a47e50d4f53ef629566b3d0","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":481,"context_line":"        flavor \u003d flavor_obj.Flavor()"},{"line_number":482,"context_line":"        for key in flavors.system_metadata_flavor_props:"},{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95yU%3D","line":482,"in_reply_to":"AAAATn%2F955I%3D","updated":"2013-12-04 17:29:18.000000000","message":"Seems that system_metadata_flavor_props should be moved to the Instance class then, otherwise I don\u0027t see how this is different from how it\u0027s already encapsulated in the flavors.extract_flavor method for setting the prefix for the system_metadata keys on the db_flavor.  Plus it\u0027s making an assumption/contract with flavors.extract_flavor that it\u0027s doing the prefixing on the db_flavor before it comes back here, right?\n\nMaybe I\u0027m missing something, it seems like db_flavor[key] isn\u0027t going to work if there is a prefix since db_flavor has the keys prefixed when it comes back from flavors.extract_flavor.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71b3369e111c042f7df391d02d9f55658fa22c06","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":481,"context_line":"        flavor \u003d flavor_obj.Flavor()"},{"line_number":482,"context_line":"        for key in flavors.system_metadata_flavor_props:"},{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F955I%3D","line":482,"in_reply_to":"AAAATn%2F959s%3D","updated":"2013-12-04 17:11:58.000000000","message":"The properties of the flavor that are persisted in the instance\u0027s system_metadata is really a quality or trait of the instance, not the flavor. It\u0027s the instance saying \"these are the things I remember about a flavor\" so it belongs here, IMHO.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"323dc2cb11d713aefe28600c66dbf3c0e6945467","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":481,"context_line":"        flavor \u003d flavor_obj.Flavor()"},{"line_number":482,"context_line":"        for key in flavors.system_metadata_flavor_props:"},{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95s0%3D","line":482,"in_reply_to":"AAAATn%2F95wA%3D","updated":"2013-12-04 17:45:58.000000000","message":"Ahh, yup, I see that now, flavors.extract_flavor uses the prefix to get the namespaced system_metadata flavor keys and store them in the non-namespaced dict that comes back.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3c722a64ea69763a89ee8e1321d4feb2334ba8f","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":481,"context_line":"        flavor \u003d flavor_obj.Flavor()"},{"line_number":482,"context_line":"        for key in flavors.system_metadata_flavor_props:"},{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95wA%3D","line":482,"in_reply_to":"AAAATn%2F95yU%3D","updated":"2013-12-04 17:38:08.000000000","message":"They\u0027re not namespaced when they come back from extract_flavor().","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            flavor[key] \u003d db_flavor[key]"},{"line_number":484,"context_line":"        return flavor"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    def set_flavor(self, flavor, namespace\u003dNone):"},{"line_number":487,"context_line":"        if namespace is None:"},{"line_number":488,"context_line":"            prefix \u003d \u0027\u0027"},{"line_number":489,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F96AE%3D","line":486,"updated":"2013-12-04 16:57:48.000000000","message":"Same comment here on nice to have a docstring.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":493,"context_line":"            self.system_metadata, flavor, prefix)"},{"line_number":494,"context_line":"        self.save()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":498,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":499,"context_line":"        self.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95%2F0%3D","line":496,"updated":"2013-12-04 16:57:48.000000000","message":"Should namespace default to None here?","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71b3369e111c042f7df391d02d9f55658fa22c06","unresolved":false,"context_lines":[{"line_number":493,"context_line":"            self.system_metadata, flavor, prefix)"},{"line_number":494,"context_line":"        self.save()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":498,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":499,"context_line":"        self.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9548%3D","line":496,"in_reply_to":"AAAATn%2F95%2F0%3D","updated":"2013-12-04 17:11:58.000000000","message":"No, this was intentional because I don\u0027t want anyone to be able to delete the un-namespaced flavor. In other words, you can delete the old_ or new_ one, but I don\u0027t want you to be able to strip an instance of the \"base\" flavor (for lack of a better name). Make sense?","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45ff826cff56dc938a47e50d4f53ef629566b3d0","unresolved":false,"context_lines":[{"line_number":493,"context_line":"            self.system_metadata, flavor, prefix)"},{"line_number":494,"context_line":"        self.save()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":498,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":499,"context_line":"        self.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95xw%3D","line":496,"in_reply_to":"AAAATn%2F9548%3D","updated":"2013-12-04 17:29:18.000000000","message":"Makes sense, but if you really want to guard against that, i.e. someone sending \u0027\u0027 or None, why not check if not namespace and then raising an exception if that happens?  At least need a unit test for that.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        self.save()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":498,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":499,"context_line":"        self.save()"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F958Y%3D","line":497,"updated":"2013-12-04 16:57:48.000000000","message":"Looks like flavors.delete_flavor_info takes a list of prefixes, shouldn\u0027t the Instance.delete_flavor method do the same? Or is the list a use case that is no longer relevant?","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71b3369e111c042f7df391d02d9f55658fa22c06","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        self.save()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":498,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":499,"context_line":"        self.save()"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F954w%3D","line":497,"in_reply_to":"AAAATn%2F958Y%3D","updated":"2013-12-04 17:11:58.000000000","message":"It\u0027s not used that way anymore, so... meh.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"50ada03d85dc28b6a312b0e0dcc935579d430a3d","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        if namespace is None:"},{"line_number":476,"context_line":"            prefix \u003d \u0027\u0027"},{"line_number":477,"context_line":"        else:"},{"line_number":478,"context_line":"            prefix \u003d \u0027%s_\u0027 % namespace"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F95kQ%3D","line":475,"updated":"2013-12-04 18:12:15.000000000","message":"any chance of putting lines 475-478 and 487-490 as a utility method","commit_id":"5f2d45bfa3862356b85797117dd1112a25733345"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8fab6e325721f353e9d660f1c0de1df9a984d72c","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        if namespace is None:"},{"line_number":498,"context_line":"            raise exception.NotFound()"},{"line_number":499,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":500,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":501,"context_line":"        self.save()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F95pQ%3D","line":498,"updated":"2013-12-04 18:00:11.000000000","message":"nit: would NotAllowed be more appropriate here?  If not, would be good to have a more specific error message instead of the default \u0027Resource could not be found\u0027.\n\nAnd they could get past this with namespace\u003d\u0027\u0027 but then they\u0027d get a KeyError in flavors.delete_flavor_info so that takes care of itself I guess.\n\nActually the more I think about this, do we really need to guard against None since if someone passes None you\u0027ll get a prefix of None_ which should result in a KeyError in flavors.delete_flavor_info, right?","commit_id":"5f2d45bfa3862356b85797117dd1112a25733345"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4e01e427a4a1c2800791ceea35267ee1c52dd66a","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def delete_flavor(self, namespace):"},{"line_number":497,"context_line":"        if namespace is None:"},{"line_number":498,"context_line":"            raise exception.NotFound()"},{"line_number":499,"context_line":"        self.system_metadata \u003d flavors.delete_flavor_info("},{"line_number":500,"context_line":"            self.system_metadata, \"%s_\" % namespace)"},{"line_number":501,"context_line":"        self.save()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F95iA%3D","line":498,"in_reply_to":"AAAATn%2F95pQ%3D","updated":"2013-12-04 18:21:26.000000000","message":"Based on what we talked about here, we should probably just remove the NotFound and let it fail with a KeyError to signal a programming error if someone passes an invalid value.","commit_id":"5f2d45bfa3862356b85797117dd1112a25733345"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"569b48495c3ce7a5613b8d8fd995a594b59c1bd1","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        prefix \u003d \u0027%s_\u0027 % namespace if namespace is not None else \u0027\u0027"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":478,"context_line":"        flavor \u003d flavor_obj.Flavor()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9tpI%3D","line":475,"updated":"2013-12-06 20:21:50.000000000","message":"If there\u0027s no namespace, this means the prefix is \u0027_\u0027.. which it should be \u0027\u0027... no?","commit_id":"550edb0a582eda5a7e22b664f5b5b5b31a6c90c5"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"667178714f59ef4449c3890cebd321c9954a8089","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                reason\u003d\u0027loading %s requires recursion\u0027 % attrname)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    def get_flavor(self, namespace\u003dNone):"},{"line_number":475,"context_line":"        prefix \u003d \u0027%s_\u0027 % namespace if namespace is not None else \u0027\u0027"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        db_flavor \u003d flavors.extract_flavor(self, prefix)"},{"line_number":478,"context_line":"        flavor \u003d flavor_obj.Flavor()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F9s48%3D","line":475,"in_reply_to":"AAAATn%2F9tpI%3D","updated":"2013-12-06 23:50:07.000000000","message":"Tested this and I guess I\u0027m mixing up order of operations. Maybe parens would make this more clear, because I read this as:\n\nprefix \u003d \u0027%s_\u0027 % (namespace if namespace is not None else \u0027\u0027)","commit_id":"550edb0a582eda5a7e22b664f5b5b5b31a6c90c5"}],"nova/tests/objects/test_instance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4bc0e260e44ca0749d76b1413b4e7b56cc8aeed2","unresolved":false,"context_lines":[{"line_number":705,"context_line":"        db_flavor \u003d flavors.extract_flavor(db_inst, prefix)"},{"line_number":706,"context_line":"        inst \u003d instance.Instance.get_by_uuid(self.context, db_inst[\u0027uuid\u0027])"},{"line_number":707,"context_line":"        flavor \u003d inst.get_flavor(namespace)"},{"line_number":708,"context_line":"        self.assertEqual(db_flavor[\u0027flavorid\u0027], flavor.flavorid)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def test_get_flavor(self):"},{"line_number":711,"context_line":"        self._test_get_flavor(None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F959A%3D","line":708,"updated":"2013-12-04 16:57:48.000000000","message":"You\u0027re also doing some work in the getter to set the namespaced keys on the flavor object, so I think you should assert that the keys are prefixed with the namespace when the flavor object comes back out.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45ff826cff56dc938a47e50d4f53ef629566b3d0","unresolved":false,"context_lines":[{"line_number":705,"context_line":"        db_flavor \u003d flavors.extract_flavor(db_inst, prefix)"},{"line_number":706,"context_line":"        inst \u003d instance.Instance.get_by_uuid(self.context, db_inst[\u0027uuid\u0027])"},{"line_number":707,"context_line":"        flavor \u003d inst.get_flavor(namespace)"},{"line_number":708,"context_line":"        self.assertEqual(db_flavor[\u0027flavorid\u0027], flavor.flavorid)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def test_get_flavor(self):"},{"line_number":711,"context_line":"        self._test_get_flavor(None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F95xE%3D","line":708,"in_reply_to":"AAAATn%2F9538%3D","updated":"2013-12-04 17:29:18.000000000","message":"I think that\u0027s the point I\u0027m stuck on, maybe not understanding, more details in the getter method.","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71b3369e111c042f7df391d02d9f55658fa22c06","unresolved":false,"context_lines":[{"line_number":705,"context_line":"        db_flavor \u003d flavors.extract_flavor(db_inst, prefix)"},{"line_number":706,"context_line":"        inst \u003d instance.Instance.get_by_uuid(self.context, db_inst[\u0027uuid\u0027])"},{"line_number":707,"context_line":"        flavor \u003d inst.get_flavor(namespace)"},{"line_number":708,"context_line":"        self.assertEqual(db_flavor[\u0027flavorid\u0027], flavor.flavorid)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"    def test_get_flavor(self):"},{"line_number":711,"context_line":"        self._test_get_flavor(None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9538%3D","line":708,"in_reply_to":"AAAATn%2F959A%3D","updated":"2013-12-04 17:11:58.000000000","message":"But they\u0027re not namespaced when they come out of the get, otherwise the above line wouldn\u0027t work for anything other than namespace\u003dNone. By always checking the un-namespaced value, I\u0027m verifying that it is properly stripping it. Since flavors.extract_flavor() is tested elsewhere to do the namespacing, I think we\u0027re covered here, right?","commit_id":"5d3f36f4b67e2f99b3fbd0de12ae96d2a33b7c16"}]}
