)]}'
{"nova/db/sqlalchemy/session.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f0174245c07615db81a11b3dde593e5c725dd0be","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"def _soft_delete(self, synchronize_session\u003d\u0027evaluate\u0027):"},{"line_number":481,"context_line":"    \"\"\"This method is added to squalchemy.orm.query.Query class\"\"\""},{"line_number":482,"context_line":"    return self.update({\u0027deleted\u0027: True,"},{"line_number":483,"context_line":"                        \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027),"},{"line_number":484,"context_line":"                        \u0027deleted_at\u0027: timeutils.utcnow()},"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6lw%3D","line":481,"updated":"2012-12-21 00:08:52.000000000","message":"Typo: s/squalchemy/SQLAlchemy/","commit_id":"96478441300a9c4795c9f6ae941b59946b2f32af"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f0174245c07615db81a11b3dde593e5c725dd0be","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"def get_maker(engine, autocommit\u003dTrue, expire_on_commit\u003dFalse):"},{"line_number":489,"context_line":"    \"\"\""},{"line_number":490,"context_line":"    Add soft_delete method to sqlalchemy query and return a sqlalchemy"},{"line_number":491,"context_line":"    sessionmaker using the given engine."},{"line_number":492,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6lY%3D","line":489,"updated":"2012-12-21 00:08:52.000000000","message":"Style tip: if your docstring can\u0027t be a single line, please follow pep guideline here: http://www.python.org/dev/peps/pep-0257/#multi-line-docstrings\n\nThat said, I think the changes to this method should be removed.","commit_id":"96478441300a9c4795c9f6ae941b59946b2f32af"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"f0174245c07615db81a11b3dde593e5c725dd0be","unresolved":false,"context_lines":[{"line_number":490,"context_line":"    Add soft_delete method to sqlalchemy query and return a sqlalchemy"},{"line_number":491,"context_line":"    sessionmaker using the given engine."},{"line_number":492,"context_line":"    \"\"\""},{"line_number":493,"context_line":"    sqlalchemy.orm.query.Query.soft_delete \u003d _soft_delete"},{"line_number":494,"context_line":"    return sqlalchemy.orm.sessionmaker(bind\u003dengine,"},{"line_number":495,"context_line":"                                       autocommit\u003dautocommit,"},{"line_number":496,"context_line":"                                       expire_on_commit\u003dexpire_on_commit)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6k8%3D","line":493,"updated":"2012-12-21 00:08:52.000000000","message":"I believe it is possible for a Query object to be instantiated before get_maker is called, and thus not getting this patch applied. Please move this assignment out of the get_maker() method and into the global scope, so it is applied at parse-time.","commit_id":"96478441300a9c4795c9f6ae941b59946b2f32af"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":159,"context_line":"  proper UNIQUE constraints are added to the tables."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"How to soft_delete entry(entries):"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"* There are two possible ways to soft_delete entry:"},{"line_number":165,"context_line":"    model.delete() and query.soft_delete(). Which one to use?"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Ls%3D","line":162,"updated":"2012-12-21 15:14:28.000000000","message":"Efficient use of soft deletes:","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"How to soft_delete entry(entries):"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"* There are two possible ways to soft_delete entry:"},{"line_number":165,"context_line":"    model.delete() and query.soft_delete(). Which one to use?"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  model.delete() method works with single already fetched entry."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Lk%3D","line":164,"updated":"2012-12-21 15:14:28.000000000","message":"s/soft_delete entry/mark a record as deleted/","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":162,"context_line":"How to soft_delete entry(entries):"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"* There are two possible ways to soft_delete entry:"},{"line_number":165,"context_line":"    model.delete() and query.soft_delete(). Which one to use?"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  model.delete() method works with single already fetched entry."},{"line_number":168,"context_line":"  query.soft_delete() makes only one db request for all entries that correspond"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Lg%3D","line":165,"updated":"2012-12-21 15:14:28.000000000","message":"s/Which one to use?//","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                if count \u003d\u003d 0:"},{"line_number":188,"context_line":"                    raise Exception(\"0 entries were soft deleted\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* There is only one situation when you probably should use model.delete()"},{"line_number":191,"context_line":"  method:"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def soft_delete_bar_model():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6ME%3D","line":190,"updated":"2012-12-21 15:14:28.000000000","message":"Here, I would remove \" probably\" and say something like,\n\nThere is only one situation where model.delete is appropriate: when you fetch a single record, work with it, and mark it as deleted in the same transaction.","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            with session.begin():"},{"line_number":206,"context_line":"                query \u003d model_query(BarModel, session\u003dsession).\\"},{"line_number":207,"context_line":"                            find(some_condition)"},{"line_number":208,"context_line":"                models_ref \u003d query.all()"},{"line_number":209,"context_line":"                #work with models_ref"},{"line_number":210,"context_line":"                query.soft_delete(synchronize_session\u003dFalse)"},{"line_number":211,"context_line":"                # synchronize_session\u003dFalse should be setted if there is no"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Ms%3D","line":208,"updated":"2012-12-21 15:14:28.000000000","message":"s/models_ref/model_refs/","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                query \u003d model_query(BarModel, session\u003dsession).\\"},{"line_number":207,"context_line":"                            find(some_condition)"},{"line_number":208,"context_line":"                models_ref \u003d query.all()"},{"line_number":209,"context_line":"                #work with models_ref"},{"line_number":210,"context_line":"                query.soft_delete(synchronize_session\u003dFalse)"},{"line_number":211,"context_line":"                # synchronize_session\u003dFalse should be setted if there is no"},{"line_number":212,"context_line":"                # outer session and we don\u0027t work with these entries after"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Mk%3D","line":209,"updated":"2012-12-21 15:14:28.000000000","message":"# Work with model_refs","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                models_ref \u003d query.all()"},{"line_number":209,"context_line":"                #work with models_ref"},{"line_number":210,"context_line":"                query.soft_delete(synchronize_session\u003dFalse)"},{"line_number":211,"context_line":"                # synchronize_session\u003dFalse should be setted if there is no"},{"line_number":212,"context_line":"                # outer session and we don\u0027t work with these entries after"},{"line_number":213,"context_line":"                # this."},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Mg%3D","line":211,"updated":"2012-12-21 15:14:28.000000000","message":"\" should be set \"","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                #work with models_ref"},{"line_number":210,"context_line":"                query.soft_delete(synchronize_session\u003dFalse)"},{"line_number":211,"context_line":"                # synchronize_session\u003dFalse should be setted if there is no"},{"line_number":212,"context_line":"                # outer session and we don\u0027t work with these entries after"},{"line_number":213,"context_line":"                # this."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"  In method above it is very important to use query.soft_delete() because if"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Mc%3D","line":212,"updated":"2012-12-21 15:14:28.000000000","message":"\" and these entries are not used after this\"","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e2933f5b0e21cdfdc8241d666b7abe7008b19ec0","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                # outer session and we don\u0027t work with these entries after"},{"line_number":213,"context_line":"                # this."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"  In method above it is very important to use query.soft_delete() because if"},{"line_number":216,"context_line":"  you write something like below:"},{"line_number":217,"context_line":"        for bar_ref in bar_refs:"},{"line_number":218,"context_line":"            bar_ref.delete(session\u003dsession)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6MU%3D","line":215,"updated":"2012-12-21 15:14:28.000000000","message":"When working with many rows, it is very important to use query.soft_delete, which issues a single query. Using model.delete, as in the following example, is very inefficient.\n\n    for ...","commit_id":"af42527da208287ad25306c23c4bf368b7e1f18d"}]}
