)]}'
{"keystone/assignment/backends/sql.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"874b45ed55dd70753f11ad4c8b01d7f7cb45a059","unresolved":false,"context_lines":[{"line_number":594,"context_line":"    description \u003d sql.Column(sql.Text())"},{"line_number":595,"context_line":"    enabled \u003d sql.Column(sql.Boolean)"},{"line_number":596,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":597,"context_line":"    parent_project_id \u003d sql.Column(sql.String(64))"},{"line_number":598,"context_line":"    # Unique constraint across two columns to create the separation"},{"line_number":599,"context_line":"    # rather than just only \u0027name\u0027 being unique"},{"line_number":600,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a45604cb","line":597,"updated":"2014-08-04 23:36:36.000000000","message":"Should this be a foreign key?","commit_id":"1484d0b2f532ef951f74fb41926fd0fe0c72a22e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5007b9ddf4a7b0a826ed047f779c82bec630e699","unresolved":false,"context_lines":[{"line_number":594,"context_line":"    description \u003d sql.Column(sql.Text())"},{"line_number":595,"context_line":"    enabled \u003d sql.Column(sql.Boolean)"},{"line_number":596,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":597,"context_line":"    parent_project_id \u003d sql.Column(sql.String(64))"},{"line_number":598,"context_line":"    # Unique constraint across two columns to create the separation"},{"line_number":599,"context_line":"    # rather than just only \u0027name\u0027 being unique"},{"line_number":600,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8df3d108","line":597,"in_reply_to":"baada198_a45604cb","updated":"2014-08-05 12:24:12.000000000","message":"++","commit_id":"1484d0b2f532ef951f74fb41926fd0fe0c72a22e"}],"keystone/assignment/core.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"567d365fca6fad9de2b989b8cc9fb92ffcb101d0","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"        parent project."},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        \"\"\""},{"line_number":1079,"context_line":"        # root parent_project_id is None"},{"line_number":1080,"context_line":"        if parent_project_id:"},{"line_number":1081,"context_line":"            raise exception.InvalidRootParentProject("},{"line_number":1082,"context_line":"                parent_project_id\u003dparent_project_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_c5baaa22","line":1079,"updated":"2014-08-19 19:36:24.000000000","message":"is this to be validated later or is the validation just to check it\u0027s not None? also, this isn\u0027t used anywhere else in class so maybe the method isn\u0027t needed.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c74830a2ba9cc0a8d1ac4ed44423f0723bb63bbb","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"        parent project."},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        \"\"\""},{"line_number":1079,"context_line":"        # root parent_project_id is None"},{"line_number":1080,"context_line":"        if parent_project_id:"},{"line_number":1081,"context_line":"            raise exception.InvalidRootParentProject("},{"line_number":1082,"context_line":"                parent_project_id\u003dparent_project_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_e873fb12","line":1079,"in_reply_to":"1abeadc6_a892e39c","updated":"2014-08-19 19:57:02.000000000","message":"cool cool. just that it\u0027s not actually saving you anything since it\u0027s only used in one place. that said, not a dealbreaker.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"20e4dc02fa3f51939eb66750a7e18406747d05c8","unresolved":false,"context_lines":[{"line_number":1076,"context_line":"        parent project."},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"        \"\"\""},{"line_number":1079,"context_line":"        # root parent_project_id is None"},{"line_number":1080,"context_line":"        if parent_project_id:"},{"line_number":1081,"context_line":"            raise exception.InvalidRootParentProject("},{"line_number":1082,"context_line":"                parent_project_id\u003dparent_project_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_a892e39c","line":1079,"in_reply_to":"1abeadc6_c5baaa22","updated":"2014-08-19 19:42:33.000000000","message":"the idea to provide a method for this checking was to provide a maintainable place that could be easily changed in case the checking logic also changed.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4799b40926245cd73b98e005f5929c3dc571c981","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def _validate_root_parent_project(self, ref):"},{"line_number":1072,"context_line":"        \"\"\"Validate that the root parent project is correctly specified."},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":"        \"\"\""},{"line_number":1075,"context_line":"        ref \u003d ref.copy()"},{"line_number":1076,"context_line":"        parent_project_id \u003d ref.pop(\u0027parent_project_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_c5a8c18f","line":1073,"updated":"2014-08-20 18:30:45.000000000","message":"I\u0027m not a fan of this modifying the ref, but I see that we already have a similar pattern in this module. You should at least call it out like line 1055.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b2b3ad8f1d774590067b6949237bb600aa72791e","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"    def _validate_root_parent_project(self, ref):"},{"line_number":1072,"context_line":"        \"\"\"Validate that the root parent project is correctly specified."},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":"        \"\"\""},{"line_number":1075,"context_line":"        ref \u003d ref.copy()"},{"line_number":1076,"context_line":"        parent_project_id \u003d ref.pop(\u0027parent_project_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_3565ffb4","line":1073,"in_reply_to":"1abeadc6_c5a8c18f","updated":"2014-08-21 14:22:41.000000000","message":"those methods are no longer required. Thanks for the review.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4799b40926245cd73b98e005f5929c3dc571c981","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"        return ref"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def _validate_root_parent_project_id(self, parent_project_id):"},{"line_number":1081,"context_line":"        \"\"\"Validate that the parent project ID specified belongs to the root"},{"line_number":1082,"context_line":"        parent project."},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_05eb99b0","line":1081,"updated":"2014-08-20 18:30:45.000000000","message":"The first line of a docstring should be a summary followed by a blank line. See http://docs.openstack.org/developer/hacking/#docstrings\n\nAlso you may want to put a note of why we would never expect this to have a value.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b2b3ad8f1d774590067b6949237bb600aa72791e","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"        return ref"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def _validate_root_parent_project_id(self, parent_project_id):"},{"line_number":1081,"context_line":"        \"\"\"Validate that the parent project ID specified belongs to the root"},{"line_number":1082,"context_line":"        parent project."},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_5556fbce","line":1081,"in_reply_to":"1abeadc6_05eb99b0","updated":"2014-08-21 14:22:41.000000000","message":"those methods are no longer required. Thanks for the review.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f7e7c828905c85e1a5b13291b148fc522fa93148","unresolved":false,"context_lines":[{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        \"\"\""},{"line_number":1085,"context_line":"        # root parent_project_id is None"},{"line_number":1086,"context_line":"        if parent_project_id:"},{"line_number":1087,"context_line":"            raise exception.InvalidRootParentProject("},{"line_number":1088,"context_line":"                parent_project_id\u003dparent_project_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_b14f836a","line":1086,"updated":"2014-08-20 19:07:11.000000000","message":"this method is not actually saving you anything since it\u0027s only used in one place. that said, not a dealbreaker.\n\nalso not patch specific but i find it strange we\u0027re marking these as private but we fully use them in the subclasses that inherit this... maybe it\u0027s just java in me.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b2b3ad8f1d774590067b6949237bb600aa72791e","unresolved":false,"context_lines":[{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        \"\"\""},{"line_number":1085,"context_line":"        # root parent_project_id is None"},{"line_number":1086,"context_line":"        if parent_project_id:"},{"line_number":1087,"context_line":"            raise exception.InvalidRootParentProject("},{"line_number":1088,"context_line":"                parent_project_id\u003dparent_project_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_9573337f","line":1086,"in_reply_to":"1abeadc6_b14f836a","updated":"2014-08-21 14:22:41.000000000","message":"those methods are no longer required. Thanks for the review.","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4331c0372eed940631eda4bc2cf4ca1f3af4eb62","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"        else:"},{"line_number":1068,"context_line":"            raise ValueError(_(\u0027Expected dict or list: %s\u0027) % type(ref))"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"    def _set_default_parent_project(self, ref):"},{"line_number":1071,"context_line":"        \"\"\"If the parent project ID  has not been set, set it to None.\"\"\""},{"line_number":1072,"context_line":"        if isinstance(ref, dict):"},{"line_number":1073,"context_line":"            if \u0027parent_project_id\u0027 not in ref:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_51b27c4c","line":1070,"updated":"2014-08-21 23:09:51.000000000","message":"set_default_domain and set_default_parent_project could probably share code but not a big deal","commit_id":"0485795a7c0bd3973725f20875a5f88b14242a82"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"4331c0372eed940631eda4bc2cf4ca1f3af4eb62","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"        if isinstance(ref, dict):"},{"line_number":1073,"context_line":"            if \u0027parent_project_id\u0027 not in ref:"},{"line_number":1074,"context_line":"                ref \u003d ref.copy()"},{"line_number":1075,"context_line":"                ref[\u0027parent_project_id\u0027] \u003d None"},{"line_number":1076,"context_line":"            return ref"},{"line_number":1077,"context_line":"        elif isinstance(ref, list):"},{"line_number":1078,"context_line":"            return [self._set_default_parent_project(x) for x in ref]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_117c8471","line":1075,"updated":"2014-08-21 23:09:51.000000000","message":"would be good to have a test that verifies this is actually removed but i assume the above method doesn\u0027t either","commit_id":"0485795a7c0bd3973725f20875a5f88b14242a82"}],"keystone/common/sql/migrate_repo/versions/052_add_parent_project.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"874b45ed55dd70753f11ad4c8b01d7f7cb45a059","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_64078cc9","line":1,"updated":"2014-08-04 23:36:36.000000000","message":"Unless you work for the foundation this line should be left out. (...and the # below)","commit_id":"1484d0b2f532ef951f74fb41926fd0fe0c72a22e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5007b9ddf4a7b0a826ed047f779c82bec630e699","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_add7b54f","line":1,"in_reply_to":"baada198_64078cc9","updated":"2014-08-05 12:24:12.000000000","message":"Done","commit_id":"1484d0b2f532ef951f74fb41926fd0fe0c72a22e"}],"keystone/common/sql/migrate_repo/versions/053_add_parent_project.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"567d365fca6fad9de2b989b8cc9fb92ffcb101d0","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_constraints(migrate_engine):"},{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_9f69df27","line":20,"updated":"2014-08-19 19:36:24.000000000","message":"you can probably just pass the meta object rather than creating a new one.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c74830a2ba9cc0a8d1ac4ed44423f0723bb63bbb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_constraints(migrate_engine):"},{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_a83bc336","line":20,"in_reply_to":"1abeadc6_88c52790","updated":"2014-08-19 19:57:02.000000000","message":"rather than list_constraints(migrate_engine) you can use list_contraints(meta)... that way you already have the MetaData object you created in upgrade/downgrade methods.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"20e4dc02fa3f51939eb66750a7e18406747d05c8","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_constraints(migrate_engine):"},{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_88c52790","line":20,"in_reply_to":"1abeadc6_9f69df27","updated":"2014-08-19 19:42:33.000000000","message":"can you exemplify? \u003d)","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c74830a2ba9cc0a8d1ac4ed44423f0723bb63bbb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"},{"line_number":24,"context_line":"                    \u0027fk_column\u0027: \u0027parent_project_id\u0027,"},{"line_number":25,"context_line":"                    \u0027ref_column\u0027: proj_table.c.id}]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    return constraints"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_e88f7bca","line":24,"updated":"2014-08-19 19:57:02.000000000","message":"just noticed this is wrong. if i understand correctly, it\u0027s trying to create a foreign_key on itself.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"567d365fca6fad9de2b989b8cc9fb92ffcb101d0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def upgrade(migrate_engine):"},{"line_number":31,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":32,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    project_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":35,"context_line":"    parent_project_id \u003d sql.Column(\u0027parent_project_id\u0027, sql.String(64))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_9fc0ff7d","line":32,"updated":"2014-08-19 19:36:24.000000000","message":"bind is actually a parameter in Metadata()... although i guess this is more consistent with other keystone scripts.","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"20e4dc02fa3f51939eb66750a7e18406747d05c8","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def upgrade(migrate_engine):"},{"line_number":31,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":32,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    project_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":35,"context_line":"    parent_project_id \u003d sql.Column(\u0027parent_project_id\u0027, sql.String(64))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_083917a4","line":32,"in_reply_to":"1abeadc6_9fc0ff7d","updated":"2014-08-19 19:42:33.000000000","message":"++","commit_id":"2c9e196d07ac0168e689be59a75ffdf5c0d60a57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f7e7c828905c85e1a5b13291b148fc522fa93148","unresolved":false,"context_lines":[{"line_number":18,"context_line":"def list_constraints(migrate_engine):"},{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"},{"line_number":24,"context_line":"                    \u0027fk_column\u0027: \u0027parent_project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_11459716","line":21,"updated":"2014-08-20 19:07:11.000000000","message":"the suggestion was to pass meta in as an argument rather than create a new metadata obj","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b2b3ad8f1d774590067b6949237bb600aa72791e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"def list_constraints(migrate_engine):"},{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    proj_table \u003d sql.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    constraints \u003d [{\u0027table\u0027: proj_table,"},{"line_number":24,"context_line":"                    \u0027fk_column\u0027: \u0027parent_project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_7aa844db","line":21,"in_reply_to":"1abeadc6_11459716","updated":"2014-08-21 14:22:41.000000000","message":"Done","commit_id":"95e38c96ece48fd61d619172a95fb77729577750"}]}
