)]}'
{"oslo/db/sqlalchemy/migration_cli/ext_alembic.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"bf77fccc0ea7b2e22d24f40cfcf368dbe2efdabb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            starting_rev, version \u003d version.split(\u0027:\u0027, 2)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        def upgrade(rev, context):"},{"line_number":61,"context_line":"            return script_dir._upgrade_revs(version, rev)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        with self.engine.connect() as conn:"},{"line_number":64,"context_line":"            with environment.EnvironmentContext("}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_e1a4894c","line":61,"updated":"2014-11-17 10:49:35.000000000","message":"See discussion at \nhttps://review.openstack.org/#/c/71874/9/openstack/common/db/sqlalchemy/migration_cli/ext_alembic.py\n\nTL;DR - it\u0027s a bad idea - to use private methods of external library","commit_id":"6266af67a0c8671c036614c0991dede075339af1"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"cfda4b954077f07af5ddc241814bc49a51ec654d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            if sql:"},{"line_number":180,"context_line":"                current \u003d False"},{"line_number":181,"context_line":"            else:"},{"line_number":182,"context_line":"                current \u003d context._current_rev()"},{"line_number":183,"context_line":"            dest \u003d script_dir.get_revision(version)"},{"line_number":184,"context_line":"            if dest is not None:"},{"line_number":185,"context_line":"                dest \u003d dest.revision"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_cf439dad","line":182,"updated":"2014-12-01 18:31:18.000000000","message":"this should be get_current_revision(), that\u0027s the name since 0.3, see https://bitbucket.org/zzzeek/alembic/src/e37162294fc6df9740f4231a75021f391e2a0f98/alembic/migration.py?at\u003drel_0_6#cl-203","commit_id":"6266af67a0c8671c036614c0991dede075339af1"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"5143c48be534232c101eb2b7c6688bf7fe71119d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            if sql:"},{"line_number":180,"context_line":"                current \u003d False"},{"line_number":181,"context_line":"            else:"},{"line_number":182,"context_line":"                current \u003d context._current_rev()"},{"line_number":183,"context_line":"            dest \u003d script_dir.get_revision(version)"},{"line_number":184,"context_line":"            if dest is not None:"},{"line_number":185,"context_line":"                dest \u003d dest.revision"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_92eb5aa3","line":182,"in_reply_to":"5a890539_cf439dad","updated":"2014-12-02 16:17:55.000000000","message":"Done, thanks","commit_id":"6266af67a0c8671c036614c0991dede075339af1"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"cfda4b954077f07af5ddc241814bc49a51ec654d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            dest \u003d script_dir.get_revision(version)"},{"line_number":184,"context_line":"            if dest is not None:"},{"line_number":185,"context_line":"                dest \u003d dest.revision"},{"line_number":186,"context_line":"            context._update_current_rev(current, dest)"},{"line_number":187,"context_line":"            return []"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        with self.engine.connect() as conn:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_2fe8a17b","line":186,"updated":"2014-12-01 18:31:18.000000000","message":"OK well there\u0027s a new public command for this on context called stamp().  I\u0027d need to add an argument to support adding in arbitrary heads.   The behavior of stamping is much more complex than it used to be.\n\nOTOH, this whole section could really just be calling command.stamp(), once you work up the \"connection sharing\" approach between caller-\u003eenv.py.","commit_id":"6266af67a0c8671c036614c0991dede075339af1"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"5143c48be534232c101eb2b7c6688bf7fe71119d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            dest \u003d script_dir.get_revision(version)"},{"line_number":184,"context_line":"            if dest is not None:"},{"line_number":185,"context_line":"                dest \u003d dest.revision"},{"line_number":186,"context_line":"            context._update_current_rev(current, dest)"},{"line_number":187,"context_line":"            return []"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        with self.engine.connect() as conn:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_12468a7b","line":186,"in_reply_to":"5a890539_2fe8a17b","updated":"2014-12-02 16:17:55.000000000","message":"will replace context._update_current_rev() to context.stamp() for now.","commit_id":"6266af67a0c8671c036614c0991dede075339af1"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"54809c0db9c87dee9e277e9a86730f054bb400db","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def enabled(self):"},{"line_number":31,"context_line":"        return os.path.exists(self.alembic_ini_path)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, engine, migration_config):"},{"line_number":34,"context_line":"        \"\"\"Extension to provide alembic features."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param migration_config: Stores specific configuration for migrations"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_43000f02","line":33,"updated":"2014-12-22 13:11:47.000000000","message":"Please, don\u0027t forget to add engine to the docstring","commit_id":"5245bc6098c1c60495874e61e72eb18f951015e9"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"bde7f52c87b1364b4178e8e1bb8fd9796ac56c3e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def enabled(self):"},{"line_number":31,"context_line":"        return os.path.exists(self.alembic_ini_path)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, engine, migration_config):"},{"line_number":34,"context_line":"        \"\"\"Extension to provide alembic features."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param migration_config: Stores specific configuration for migrations"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_b3f617d7","line":33,"in_reply_to":"3a961159_43000f02","updated":"2014-12-25 11:52:47.000000000","message":"Done","commit_id":"5245bc6098c1c60495874e61e72eb18f951015e9"}],"oslo_db/sqlalchemy/migration_cli/ext_alembic.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"97d31c77bcc40046b84f3032b2b98c8e9cedf9b8","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                destination_rev\u003dversion,"},{"line_number":104,"context_line":"                tag\u003dtag,"},{"line_number":105,"context_line":"            ) as env:"},{"line_number":106,"context_line":"                env.configure(connection\u003dconn)"},{"line_number":107,"context_line":"                script_dir.run_env()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_fc0cca3d","line":106,"updated":"2014-12-29 18:28:07.000000000","message":"I don\u0027t think this will work as this sets up a separate self._migration_context then the one we\u0027re going to get in env.py.   Obviously alembic needs a fully documented way to do this pattern, however for now, you can attach the Connection here to the self.config object, and pull that out in env.py.","commit_id":"02173cba33112f64ed6ae6093fd3cf72656db815"}],"oslo_db/sqlalchemy/migration_cli/manager.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"b6d90fffb994c2ed140961dff6c588bf1cf4689a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class MigrationManager(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if engine or migration_config.get(\u0027url\u0027):"},{"line_number":29,"context_line":"            engine \u003d engine or sqlalchemy.create_engine("},{"line_number":30,"context_line":"                migration_config[\u0027url\u0027])"},{"line_number":31,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_1d71e4a7","line":28,"updated":"2015-01-27 13:28:37.000000000","message":"You are checking here \u0027url\u0027 key, but everywhere else it is \u0027db_url\u0027.\n\nI also wonder why tests don\u0027t fail with \u0027url\u0027.","commit_id":"44dab323774d50798c9d5634659b59905905b049"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"acdf597ccfaf452b0a8c96ffcd493f220e1c49b9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class MigrationManager(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if engine or migration_config.get(\u0027url\u0027):"},{"line_number":29,"context_line":"            engine \u003d engine or sqlalchemy.create_engine("},{"line_number":30,"context_line":"                migration_config[\u0027url\u0027])"},{"line_number":31,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_53ad1de8","line":28,"in_reply_to":"1a930d6b_1d71e4a7","updated":"2015-01-27 14:08:45.000000000","message":"Fixed","commit_id":"44dab323774d50798c9d5634659b59905905b049"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"319ef19f819a6ffd9caf6d29cae8d1e04aeee023","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class MigrationManager(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if not engine:"},{"line_number":29,"context_line":"            if migration_config.get(\u0027db_url\u0027):"},{"line_number":30,"context_line":"                engine \u003d sqlalchemy.create_engine(migration_config[\u0027db_url\u0027])"},{"line_number":31,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_11b38898","line":28,"updated":"2015-01-27 16:41:01.000000000","message":"nit:  if engine is not None","commit_id":"6f4022e91230cd60e28e730f8b7b190e8b31e998"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"2cce7f5741cc97abcdb427c401b994ca7862a853","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class MigrationManager(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if not engine:"},{"line_number":29,"context_line":"            if migration_config.get(\u0027db_url\u0027):"},{"line_number":30,"context_line":"                engine \u003d sqlalchemy.create_engine(migration_config[\u0027db_url\u0027])"},{"line_number":31,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_83180dd4","line":28,"in_reply_to":"1a930d6b_11b38898","updated":"2015-01-27 17:40:56.000000000","message":"Done","commit_id":"6f4022e91230cd60e28e730f8b7b190e8b31e998"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"319ef19f819a6ffd9caf6d29cae8d1e04aeee023","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if not engine:"},{"line_number":29,"context_line":"            if migration_config.get(\u0027db_url\u0027):"},{"line_number":30,"context_line":"                engine \u003d sqlalchemy.create_engine(migration_config[\u0027db_url\u0027])"},{"line_number":31,"context_line":"            else:"},{"line_number":32,"context_line":"                raise ValueError(\u0027Either database url or engine\u0027"},{"line_number":33,"context_line":"                                 \u0027 must be provided.\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_0c3d2fc4","line":30,"updated":"2015-01-27 16:41:01.000000000","message":"we probably want to use NullPool here (http://docs.sqlalchemy.org/en/rel_0_9/core/pooling.html#sqlalchemy.pool.NullPool) as both MigrationManager instance and extensions implementations will stay alive for some time and we don\u0027t want to have any hanging db connections\n\n+\n\nthere could be cases when we\u0027d want to pass a Connection instance (e.g. to join an existing DB transaction) - I\u0027m not sure code in ext_alembic.py is ready for that","commit_id":"6f4022e91230cd60e28e730f8b7b190e8b31e998"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"2cce7f5741cc97abcdb427c401b994ca7862a853","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def __init__(self, migration_config, engine\u003dNone):"},{"line_number":28,"context_line":"        if not engine:"},{"line_number":29,"context_line":"            if migration_config.get(\u0027db_url\u0027):"},{"line_number":30,"context_line":"                engine \u003d sqlalchemy.create_engine(migration_config[\u0027db_url\u0027])"},{"line_number":31,"context_line":"            else:"},{"line_number":32,"context_line":"                raise ValueError(\u0027Either database url or engine\u0027"},{"line_number":33,"context_line":"                                 \u0027 must be provided.\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_63f1616a","line":30,"in_reply_to":"1a930d6b_0c3d2fc4","updated":"2015-01-27 17:40:56.000000000","message":"Agreed with NullPool, fixed.\n\nas for cases, when we\u0027d want to pass a Connection instance - I\u0027m pretty sure, that we will be in able use this feature with Alembic only (not with sqla-migrate), so there is no big sense to add it. At least for now.","commit_id":"6f4022e91230cd60e28e730f8b7b190e8b31e998"}]}
