)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9318687428bfa24956e553a829cfdd7630695488","unresolved":false,"context_lines":[{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    new_values \u003d {}"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"    columns \u003d [c.name for c in class_mapper(models.Instance).mapped_table.c]"},{"line_number":1589,"context_line":"    for name, value in values.iteritems():"},{"line_number":1590,"context_line":"        if name in columns:"},{"line_number":1591,"context_line":"            new_values[name] \u003d value"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9WU%3D","line":1588,"updated":"2011-11-18 18:17:20.000000000","message":"What columns are you trying to ignore here?","commit_id":"6c5174e871f10ac326aafac6e588f33785a09fde"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"6065b6b1eafa2f8c8fd2846447aaf699b9515ed9","unresolved":false,"context_lines":[{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    new_values \u003d {}"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":"    columns \u003d [c.name for c in class_mapper(models.Instance).mapped_table.c]"},{"line_number":1589,"context_line":"    for name, value in values.iteritems():"},{"line_number":1590,"context_line":"        if name in columns:"},{"line_number":1591,"context_line":"            new_values[name] \u003d value"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9T4%3D","line":1588,"in_reply_to":"AAAACn%2F%2F9WU%3D","updated":"2011-11-18 19:35:43.000000000","message":"I\u0027m ignoring items that are part of the Instance object but not part of the instances table. For example, \"instance_type\", \"metadata\", \"volumes\", \"security_groups\"...etc. All of these are defined as \u0027backrefs\u0027 and thus get attached to the object.","commit_id":"6c5174e871f10ac326aafac6e588f33785a09fde"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9318687428bfa24956e553a829cfdd7630695488","unresolved":false,"context_lines":[{"line_number":3584,"context_line":"    session \u003d get_session()"},{"line_number":3585,"context_line":""},{"line_number":3586,"context_line":"    # FIXME: Remove when sqlalchemy objects stop leaking out of this layer"},{"line_number":3587,"context_line":"    if isinstance(metadata, list):"},{"line_number":3588,"context_line":"        _metadata \u003d {}"},{"line_number":3589,"context_line":"        for item in metadata:"},{"line_number":3590,"context_line":"            _metadata[item[\u0027key\u0027]] \u003d item[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9WY%3D","line":3587,"updated":"2011-11-18 18:17:20.000000000","message":"This seems like something is calling this function incorrectly. This function should always get a dictionary, right?","commit_id":"6c5174e871f10ac326aafac6e588f33785a09fde"},{"author":{"_account_id":706,"name":"Brian Lamar","email":"brian.lamar@rackspace.com","username":"blamar"},"change_message_id":"6065b6b1eafa2f8c8fd2846447aaf699b9515ed9","unresolved":false,"context_lines":[{"line_number":3584,"context_line":"    session \u003d get_session()"},{"line_number":3585,"context_line":""},{"line_number":3586,"context_line":"    # FIXME: Remove when sqlalchemy objects stop leaking out of this layer"},{"line_number":3587,"context_line":"    if isinstance(metadata, list):"},{"line_number":3588,"context_line":"        _metadata \u003d {}"},{"line_number":3589,"context_line":"        for item in metadata:"},{"line_number":3590,"context_line":"            _metadata[item[\u0027key\u0027]] \u003d item[\u0027value\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9T0%3D","line":3587,"in_reply_to":"AAAACn%2F%2F9WY%3D","updated":"2011-11-18 19:35:43.000000000","message":"You\u0027d think. What happens is that this method is called from instance_update.\n\ninstance_update gets an \u003cInstance\u003e SQLalchemy object and I call .get(\u0027metedata\u0027) on it which returns a list of \u003cMetadata\u003e SQLAlchemy objects which were attached to the instance object via a joinedload. The more we pass around object the more we\u0027re going to have to sanitize things like this until we start making sure SQLAlchemy object don\u0027t leak out of the DB layer.","commit_id":"6c5174e871f10ac326aafac6e588f33785a09fde"}]}
