)]}'
{"specs/kilo/common-alembic-env-py.rst":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c1963109e542bcc209d9c1117dfe6d264a97e631","unresolved":false,"context_lines":[{"line_number":49,"context_line":"env.py, generated when `init` shell command called. An OpenStack projects can\u0027t"},{"line_number":50,"context_line":"go this way, because the projects are moving to Alembic from Migrate with"},{"line_number":51,"context_line":"existing migration history. So it is impossible to generate an environment"},{"line_number":52,"context_line":"from scratch."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Purposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_591b0cca","line":52,"updated":"2014-10-13 13:47:39.000000000","message":"I don\u0027t understand this part. I thought we were going to run sqlalchemy-migrate and then run alembic separately. They store the info about which migrations have run in different tables, and the migrations themselves are in separate files, right? Why can\u0027t a project generate an environment from scratch?","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"5530eac63674627ca7b23591bd4891f4664a8bf6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"env.py, generated when `init` shell command called. An OpenStack projects can\u0027t"},{"line_number":50,"context_line":"go this way, because the projects are moving to Alembic from Migrate with"},{"line_number":51,"context_line":"existing migration history. So it is impossible to generate an environment"},{"line_number":52,"context_line":"from scratch."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Purposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_13413539","line":52,"in_reply_to":"baa201ad_591b0cca","updated":"2014-10-15 10:08:53.000000000","message":"Agree. This part seems to me strange too. I rephrased it and added one more topic.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3361aa5c7673f530159282761f0d7ed131286434","unresolved":false,"context_lines":[{"line_number":61,"context_line":"it much project\u0027s purposes. Otherwise project can inherit the class end"},{"line_number":62,"context_line":"override a methods. `Env` contains same functionality as default env.py"},{"line_number":63,"context_line":"module, but it is decomposed into several methods, intended to configure"},{"line_number":64,"context_line":"different objects needed by an environment."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Alternatives"},{"line_number":67,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_4db91178","line":64,"updated":"2014-10-07 16:27:15.000000000","message":"why do we need a class with methods as opposed to a module with functions?    Encouraging other projects to subclass rather than compose means the API becomes brittle as subclasses must code to the implementation of the superclass.  What hooks specifically need to be provided?   without that listed out there\u0027s no way to know what kind of API would be needed, and with it, we can build a module-\u003efunction based API instead of an inheritance-based one.\n\nI\u0027m not opposed to classes but I worry that we seem to default to using classes for things without necessarily knowing what we need them for.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"5530eac63674627ca7b23591bd4891f4664a8bf6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"it much project\u0027s purposes. Otherwise project can inherit the class end"},{"line_number":62,"context_line":"override a methods. `Env` contains same functionality as default env.py"},{"line_number":63,"context_line":"module, but it is decomposed into several methods, intended to configure"},{"line_number":64,"context_line":"different objects needed by an environment."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Alternatives"},{"line_number":67,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_9388c523","line":64,"in_reply_to":"baa201ad_4db91178","updated":"2014-10-15 10:08:53.000000000","message":"The main motivation is flexibility. Every project can has very different needs. If our module contains only functions we can\u0027t modify only that part which doesn\u0027t match a project purposes. With a class we can customize only parts which we need to customize, or even not customize at all. With module/functions approach we will have something stiff as hardboard. Actually OOP as is.\n\nIf I wrongly understood your point lets discuss it in IRC.\n\nI agree that list of existing method should be provided here.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"28c2e16f76a72a9b69965a04b88c6062383b749b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"it much project\u0027s purposes. Otherwise project can inherit the class end"},{"line_number":62,"context_line":"override a methods. `Env` contains same functionality as default env.py"},{"line_number":63,"context_line":"module, but it is decomposed into several methods, intended to configure"},{"line_number":64,"context_line":"different objects needed by an environment."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Alternatives"},{"line_number":67,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_5281d7c1","line":64,"in_reply_to":"baa201ad_9388c523","updated":"2014-10-15 15:03:12.000000000","message":"im strongly -1 on creating an API that only guesses as to what flexibility might be needed, and then overbuilds this flexibility; this is how we have things like EngineFacade which assume nothing and then end up delivering many bugs to consuming projects.    if every project has very different needs, those needs must be gathered ahead of time, and an API that is as minimal as possible but covers those needs should be made.    I\u0027d much prefer we build little to no flexibility to start, and then as projects need to come on, we add just enough hooks for them.   oslo is not like a publicly released library on pypi where we need to anticipate the needs of the general public; we are in close relationship with our consuming projects.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3361aa5c7673f530159282761f0d7ed131286434","unresolved":false,"context_lines":[{"line_number":67,"context_line":"------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"We can use custom :mod:`env` module for every particular project. It will"},{"line_number":70,"context_line":"cause much of overhead incompatible code."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Impact on Existing APIs"},{"line_number":73,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_0d6aa9ed","line":70,"updated":"2014-10-07 16:27:15.000000000","message":"every project need an \"env\" file in any case, and if a project is \"subclassing\" or otherwise extending where does that go if not in the project-specific env.py ?","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"5530eac63674627ca7b23591bd4891f4664a8bf6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"We can use custom :mod:`env` module for every particular project. It will"},{"line_number":70,"context_line":"cause much of overhead incompatible code."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Impact on Existing APIs"},{"line_number":73,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_b66137aa","line":70,"in_reply_to":"baa201ad_0d6aa9ed","updated":"2014-10-15 10:08:53.000000000","message":"It shouldn\u0027t be anywhere outside of  the project-specific env.py. But with extending it can be minimal as possible code snippet. Without extending we will have unDRY custom env.py with API spaced apart from the rest of reality. Should I rephrase this part to be more clear?","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"28c2e16f76a72a9b69965a04b88c6062383b749b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"We can use custom :mod:`env` module for every particular project. It will"},{"line_number":70,"context_line":"cause much of overhead incompatible code."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Impact on Existing APIs"},{"line_number":73,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_52e637b1","line":70,"in_reply_to":"baa201ad_b66137aa","updated":"2014-10-15 15:03:12.000000000","message":"I\u0027m not sure; this seems like above to refer to some customizations that projects will need without any specifics what those customizations are.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3361aa5c7673f530159282761f0d7ed131286434","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    from project.db.sqlalchemy import models"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    class ProjEnv(alembic_env.Env):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        def get_engine(self):"},{"line_number":131,"context_line":"            ..."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_df2e848b","line":128,"updated":"2014-10-07 16:27:15.000000000","message":"what methods other than get_engine() do we see as being needed here?  Just to be clear here, by default a project would *not* want to implement get_engine(), since that\u0027s the part that we should be providing from oslo.db right?","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"28c2e16f76a72a9b69965a04b88c6062383b749b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    from project.db.sqlalchemy import models"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    class ProjEnv(alembic_env.Env):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        def get_engine(self):"},{"line_number":131,"context_line":"            ..."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_f2f64b5c","line":128,"in_reply_to":"baa201ad_56ad6b87","updated":"2014-10-15 15:03:12.000000000","message":"IMHO I\u0027ve proposed a single configuational system in https://review.openstack.org/#/c/125181/ and it should be no different here.  I\u0027ll check out your new draft now.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"5530eac63674627ca7b23591bd4891f4664a8bf6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    from project.db.sqlalchemy import models"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    class ProjEnv(alembic_env.Env):"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        def get_engine(self):"},{"line_number":131,"context_line":"            ..."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_56ad6b87","line":128,"in_reply_to":"baa201ad_df2e848b","updated":"2014-10-15 10:08:53.000000000","message":"I listed methods above — see the next patch. Most of cases we need to configure an engine from config. For example if we have different config we need to override `get_engine`. Or we need extra config options for an engine. oslo.db provides a public API to configure an engine. So it used in proper way.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c1963109e542bcc209d9c1117dfe6d264a97e631","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Adoption"},{"line_number":171,"context_line":"--------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"N/A"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Library"},{"line_number":176,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_19d6e4c3","line":173,"updated":"2014-10-13 13:47:39.000000000","message":"This is a new feature, but some projects (at least  neutron) are using alembic already. How will this affect those projects? What will they have to do to migrate to use this new feature? How about projects using sqlalchemy-migrate?","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"5530eac63674627ca7b23591bd4891f4664a8bf6","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Adoption"},{"line_number":171,"context_line":"--------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"N/A"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Library"},{"line_number":176,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa201ad_f6eadfaa","line":173,"in_reply_to":"baa201ad_19d6e4c3","updated":"2014-10-15 10:08:53.000000000","message":"Now I got what should be here.","commit_id":"fdab0998546c1f64c6685fa1f76eda5736951ffd"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Engine sharing"},{"line_number":12,"context_line":"--------------"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"`env.py` module called directly from alembic lib many times. For example:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"::"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_8d26c4cc","line":14,"updated":"2014-10-15 15:58:37.000000000","message":"Which env.py does this refer to? One in the project?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Engine sharing"},{"line_number":12,"context_line":"--------------"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"`env.py` module called directly from alembic lib many times. For example:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"::"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_f128f434","line":14,"in_reply_to":"baa201ad_8d26c4cc","updated":"2014-10-16 10:11:54.000000000","message":"Specified.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        util.load_python_file(self.dir, \u0027env.py\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Which eventually loads the module with the one of an `importlib.machinery` file"},{"line_number":30,"context_line":"loaders. In the meaning, alembic env.py designed so to call revision runner"},{"line_number":31,"context_line":"(callable) immediately when interpreter executing the file. So we have no"},{"line_number":32,"context_line":"ability to pass any arguments to the file in the way different from passing"},{"line_number":33,"context_line":"what we need with a proxy object. When we test a project migration scripts"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_ed29109c","line":30,"updated":"2014-10-15 15:58:37.000000000","message":"Again, which module is this? In the project or in alembic?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        util.load_python_file(self.dir, \u0027env.py\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Which eventually loads the module with the one of an `importlib.machinery` file"},{"line_number":30,"context_line":"loaders. In the meaning, alembic env.py designed so to call revision runner"},{"line_number":31,"context_line":"(callable) immediately when interpreter executing the file. So we have no"},{"line_number":32,"context_line":"ability to pass any arguments to the file in the way different from passing"},{"line_number":33,"context_line":"what we need with a proxy object. When we test a project migration scripts"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_d17f7015","line":30,"in_reply_to":"baa201ad_ed29109c","updated":"2014-10-16 10:11:54.000000000","message":"Specified.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"a749424d5583dc5c4f6b6ea54c3b41f5a7e37866","unresolved":false,"context_lines":[{"line_number":34,"context_line":"we need to have access from a tests module to the same database as it has"},{"line_number":35,"context_line":"run env.py. This means we need shared connection url through a test module"},{"line_number":36,"context_line":"and env.py. We need to get an engine in the same way in the test module and in"},{"line_number":37,"context_line":"the env.py. Default env.py does not much this purpose perfectly."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Logging"},{"line_number":40,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_28f5c656","line":37,"updated":"2014-10-15 15:52:06.000000000","message":"I disagree with this paragraph.  If a test suite calls upon alembic programmatically, the Alembic config would be configured as part of that.   env.py receives this config and has full access to everything about how alembic is being invoked.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":34,"context_line":"we need to have access from a tests module to the same database as it has"},{"line_number":35,"context_line":"run env.py. This means we need shared connection url through a test module"},{"line_number":36,"context_line":"and env.py. We need to get an engine in the same way in the test module and in"},{"line_number":37,"context_line":"the env.py. Default env.py does not much this purpose perfectly."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Logging"},{"line_number":40,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_a83ff6b2","line":37,"updated":"2014-10-15 15:58:37.000000000","message":"I\u0027m having a little trouble understanding the problem you\u0027re trying to solve, still. Are you saying that we need to be able to configure the project\u0027s env.py and tests to use the same database URL? Is that for testing the migrations, or for running the migrations before running the tests? Could we provide a test fixture class in oslo.db to set up the database and run the migrations to achieve this goal?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"we need to have access from a tests module to the same database as it has"},{"line_number":35,"context_line":"run env.py. This means we need shared connection url through a test module"},{"line_number":36,"context_line":"and env.py. We need to get an engine in the same way in the test module and in"},{"line_number":37,"context_line":"the env.py. Default env.py does not much this purpose perfectly."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Logging"},{"line_number":40,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_74a792a7","line":37,"in_reply_to":"baa201ad_a83ff6b2","updated":"2014-10-16 10:11:54.000000000","message":"I see my mistakes. I can do very minimal env.py without class and inheritance. I\u0027m sure that we don\u0027t need even fixture. I\u0027ll try my guesses today.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":40,"context_line":"-------"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Default env.py configures itself logging instance. This action crashes existed"},{"line_number":43,"context_line":"projects logging object."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Templating"},{"line_number":46,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_486ccad0","line":43,"updated":"2014-10-15 15:58:37.000000000","message":"Can you describe how the existing logging is disrupted by this? Do you mean literally that something \"crashes\"?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"-------"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Default env.py configures itself logging instance. This action crashes existed"},{"line_number":43,"context_line":"projects logging object."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Templating"},{"line_number":46,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_3766eced","line":43,"in_reply_to":"baa201ad_486ccad0","updated":"2014-10-16 10:11:54.000000000","message":"Described.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":49,"context_line":"including `env.py`, generated when `init` shell command called. An OpenStack"},{"line_number":50,"context_line":"projects can have different migration directories arrangement. Most of"},{"line_number":51,"context_line":"potential arrangements which differs from default can\u0027t be handled by default"},{"line_number":52,"context_line":"`env.py`."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Sharing context"},{"line_number":55,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_88b07244","line":52,"updated":"2014-10-15 15:58:37.000000000","message":"I don\u0027t think we want to support them having different arrangements. We want the projects to standardize. Is there a reason they are not all the same now?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"including `env.py`, generated when `init` shell command called. An OpenStack"},{"line_number":50,"context_line":"projects can have different migration directories arrangement. Most of"},{"line_number":51,"context_line":"potential arrangements which differs from default can\u0027t be handled by default"},{"line_number":52,"context_line":"`env.py`."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Sharing context"},{"line_number":55,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_17c5688d","line":52,"in_reply_to":"baa201ad_88b07244","updated":"2014-10-16 10:11:54.000000000","message":"No reasons. I agree with you about migrations standardizing.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Purposed change"},{"line_number":62,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Make :mod:`sqlalchemy.alembic_env` with :class:`Env`. `Env` is a base"},{"line_number":65,"context_line":"environment runner class. `Env` provides basic functionality to configure"},{"line_number":66,"context_line":"environment and run revision scripts. Project can use `Env` class as is, if"},{"line_number":67,"context_line":"it much project\u0027s purposes. Otherwise project can inherit the class end"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_28c14654","line":64,"updated":"2014-10-15 15:58:37.000000000","message":"Now that I\u0027ve had more time to look at the proposal more closely, I wonder if this is really something that alembic needs to support or if we can do it in oslo.db. The fact that we have to run our migrations to build the database before running any tests seems like a problem with the way we\u0027ve used the migrations in our code, and not something alembic wants to encourage in other projects.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c91f6d100f00a4c4b9a9a17d5e2fd5b4c5a79a8e","unresolved":false,"context_lines":[{"line_number":74,"context_line":":method __init__: takes `metadata` shared between tests and environment."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":":method get_engine: engine preparation. Required to share an engine between"},{"line_number":77,"context_line":"                    tests and environment."},{"line_number":78,"context_line":":method set_config: config is binded to an instance of the class. It can be any"},{"line_number":79,"context_line":"                    kind of config. By default it is `alembic.context.config`"},{"line_number":80,"context_line":"                    shared between tests and environment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_12658f1d","line":77,"updated":"2014-10-15 15:14:20.000000000","message":"why does the env.py need the engine?  oslo.db knows how to get the engine, creating it and passing it to run migrations should be outside.   if the consuming project needs to specify options, that can be distinct from the actual creation of the engine.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":74,"context_line":":method __init__: takes `metadata` shared between tests and environment."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":":method get_engine: engine preparation. Required to share an engine between"},{"line_number":77,"context_line":"                    tests and environment."},{"line_number":78,"context_line":":method set_config: config is binded to an instance of the class. It can be any"},{"line_number":79,"context_line":"                    kind of config. By default it is `alembic.context.config`"},{"line_number":80,"context_line":"                    shared between tests and environment."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_17cf2880","line":77,"in_reply_to":"baa201ad_12658f1d","updated":"2014-10-16 10:11:54.000000000","message":"Agree. If want to reduce class and inheritance so we don\u0027t need this method.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c91f6d100f00a4c4b9a9a17d5e2fd5b4c5a79a8e","unresolved":false,"context_lines":[{"line_number":76,"context_line":":method get_engine: engine preparation. Required to share an engine between"},{"line_number":77,"context_line":"                    tests and environment."},{"line_number":78,"context_line":":method set_config: config is binded to an instance of the class. It can be any"},{"line_number":79,"context_line":"                    kind of config. By default it is `alembic.context.config`"},{"line_number":80,"context_line":"                    shared between tests and environment."},{"line_number":81,"context_line":":method configure_context: `alembic.context` must be configured with connection"},{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_5242b768","line":79,"updated":"2014-10-15 15:14:20.000000000","message":"why would a project need a custom config object?   would it be a subclass of alembic.config.Config?  Why can\u0027t we provide an existing Config object, and if the consuming project wants to change things, they can call set_main_option() / set_section_option() ?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":76,"context_line":":method get_engine: engine preparation. Required to share an engine between"},{"line_number":77,"context_line":"                    tests and environment."},{"line_number":78,"context_line":":method set_config: config is binded to an instance of the class. It can be any"},{"line_number":79,"context_line":"                    kind of config. By default it is `alembic.context.config`"},{"line_number":80,"context_line":"                    shared between tests and environment."},{"line_number":81,"context_line":":method configure_context: `alembic.context` must be configured with connection"},{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_d7a8408e","line":79,"in_reply_to":"baa201ad_5242b768","updated":"2014-10-16 10:11:54.000000000","message":"I agree with this point too.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c91f6d100f00a4c4b9a9a17d5e2fd5b4c5a79a8e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    shared between tests and environment."},{"line_number":81,"context_line":":method configure_context: `alembic.context` must be configured with connection"},{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"},{"line_number":83,"context_line":"                           modified."},{"line_number":84,"context_line":":method run_migrations: the main environment method. Can be customized"},{"line_number":85,"context_line":"                        accordingly to a project migrations arrangement."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_b25cc34c","line":83,"updated":"2014-10-15 15:14:20.000000000","message":"what are the cases where it *does* need to be modified, and if there aren\u0027t any, lets leave this out","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    shared between tests and environment."},{"line_number":81,"context_line":":method configure_context: `alembic.context` must be configured with connection"},{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"},{"line_number":83,"context_line":"                           modified."},{"line_number":84,"context_line":":method run_migrations: the main environment method. Can be customized"},{"line_number":85,"context_line":"                        accordingly to a project migrations arrangement."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_37f6ec8f","line":83,"in_reply_to":"baa201ad_b25cc34c","updated":"2014-10-16 10:11:54.000000000","message":"It seems that it can be implemented just with standard configuration using connection.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c91f6d100f00a4c4b9a9a17d5e2fd5b4c5a79a8e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"},{"line_number":83,"context_line":"                           modified."},{"line_number":84,"context_line":":method run_migrations: the main environment method. Can be customized"},{"line_number":85,"context_line":"                        accordingly to a project migrations arrangement."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_f252cb33","line":85,"updated":"2014-10-15 15:14:20.000000000","message":"what is the API of this?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                           and metadata. In most of cases shouldn\u0027t be"},{"line_number":83,"context_line":"                           modified."},{"line_number":84,"context_line":":method run_migrations: the main environment method. Can be customized"},{"line_number":85,"context_line":"                        accordingly to a project migrations arrangement."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_577450fd","line":85,"in_reply_to":"baa201ad_f252cb33","updated":"2014-10-16 10:11:54.000000000","message":"This is the same method as `run_migrations_online` in Alembic. I think it can hardly be called api.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c91f6d100f00a4c4b9a9a17d5e2fd5b4c5a79a8e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"We can use custom :mod:`env` module for every particular project. It will"},{"line_number":92,"context_line":"cause much of overhead incompatible code."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Impact on Existing APIs"},{"line_number":95,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_2da238fd","line":92,"updated":"2014-10-15 15:14:20.000000000","message":"alternative: we use a single, simple function that only allows for those features that are actually needed, right now:\n\n\t# project/env.py, default case\n\t##############################\n\n\tfrom oslo.db.sqlalchemy import alembic_env\n\n\talembic_env.run()\n\n\n\t# project/env.py, custom case\n\t#############################\n\n\tfrom oslo.db.sqlalchemy import alembic_env\n\n\twith alembic_env.configure(\n\t\talembic_option\u003d\u0027foo\u0027,\n\t\tengine_option\u003d\u0027bar\u0027,\n\t) as env:\n\t\tenv.run()\n\n\n\nwithout specific information what is needed beyond the above, I have no idea why we need the complexity of custom classes and subclassing.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"We can use custom :mod:`env` module for every particular project. It will"},{"line_number":92,"context_line":"cause much of overhead incompatible code."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Impact on Existing APIs"},{"line_number":95,"context_line":"-----------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_f7d384d2","line":92,"in_reply_to":"baa201ad_2da238fd","updated":"2014-10-16 10:11:54.000000000","message":"I came to the same conclusion during this discussion.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":99,"context_line":"projects will have totally new functionality to run alembic revisions."},{"line_number":100,"context_line":"Things are different for projects which already use Alembic. In most of cases,"},{"line_number":101,"context_line":"modules use alembic must configure `alembic.config.Config` object with two"},{"line_number":102,"context_line":"options: \"script_location\" and \"sqlalchemy.url\". If an API uses alembic with"},{"line_number":103,"context_line":"the provided common env runner it should ensure that it has an engine connected"},{"line_number":104,"context_line":"to the same database as `Env.get_engine` provides."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_28c306ee","line":102,"updated":"2014-10-15 15:58:37.000000000","message":"This last sentence seems important.\n\nWhat API are you talking about here? An application?\n\nWe want to make sure that we build the apps tied to oslo.db, rather than to alembic. Consider the trouble we\u0027ve had moving from sqlalchemy-migrate to alembic -- let\u0027s avoid that if we decide to change again later.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"projects will have totally new functionality to run alembic revisions."},{"line_number":100,"context_line":"Things are different for projects which already use Alembic. In most of cases,"},{"line_number":101,"context_line":"modules use alembic must configure `alembic.config.Config` object with two"},{"line_number":102,"context_line":"options: \"script_location\" and \"sqlalchemy.url\". If an API uses alembic with"},{"line_number":103,"context_line":"the provided common env runner it should ensure that it has an engine connected"},{"line_number":104,"context_line":"to the same database as `Env.get_engine` provides."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_82003802","line":102,"in_reply_to":"baa201ad_28c306ee","updated":"2014-10-16 10:11:54.000000000","message":"I mean oslo.db API which is base test case.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":"Ultimate project should provide :mod:`env` in a directory which contains"},{"line_number":136,"context_line":"revision scripts. Subclass of the `Env` class can override provided, it can"},{"line_number":137,"context_line":"add required extra methods. :mod:`env` must create an instance of an `Env`"},{"line_number":138,"context_line":"subclass and call migration scripts runner at execution, by default it is named"},{"line_number":139,"context_line":"`run_migrations`."},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_286a26ee","line":137,"updated":"2014-10-15 15:58:37.000000000","message":"I don\u0027t think we want subclasses to add features. That makes it harder to ensure the database migrations are handled in a standard way across projects.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"^^^^^^^^^^^^^^^^^^"},{"line_number":135,"context_line":"Ultimate project should provide :mod:`env` in a directory which contains"},{"line_number":136,"context_line":"revision scripts. Subclass of the `Env` class can override provided, it can"},{"line_number":137,"context_line":"add required extra methods. :mod:`env` must create an instance of an `Env`"},{"line_number":138,"context_line":"subclass and call migration scripts runner at execution, by default it is named"},{"line_number":139,"context_line":"`run_migrations`."},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_22114c52","line":137,"in_reply_to":"baa201ad_286a26ee","updated":"2014-10-16 10:11:54.000000000","message":"I got it now. I\u0027m going to make it today.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1015cde1ecfc291258a1d12578f120b61ad70c76","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Different projects can have different demands to the functionality, so we need"},{"line_number":210,"context_line":"to take into account all the projects needs. So it can be unstable with"},{"line_number":211,"context_line":"different projects immediately after implementation."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Documentation Impact"},{"line_number":214,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_6847ce77","line":211,"updated":"2014-10-15 15:58:37.000000000","message":"Can you provide examples of how the projects will want to treat migrations differently based on what they are doing now?","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f67fee54560ce5a030d3a71d418ce44f6ce7df9c","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Different projects can have different demands to the functionality, so we need"},{"line_number":210,"context_line":"to take into account all the projects needs. So it can be unstable with"},{"line_number":211,"context_line":"different projects immediately after implementation."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Documentation Impact"},{"line_number":214,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa201ad_8283d854","line":211,"in_reply_to":"baa201ad_6847ce77","updated":"2014-10-16 10:11:54.000000000","message":"Now I understood that we need the very standard way of treating migrations. So if we will ever hit something nonstandard we should fix it.","commit_id":"13dd5d79aa92d480241462be10384dfb1d59663a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08c9cb8654859253f795755f6504c36f92dfa4a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"we need to have access from a tests module to the same database as it has"},{"line_number":35,"context_line":"run env.py. This means we need shared connection url through a test module"},{"line_number":36,"context_line":"and env.py. We need to get an engine in the same way in the test module and in"},{"line_number":37,"context_line":"the env.py. Default env.py does not much this purpose perfectly."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Logging"},{"line_number":40,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aa7fdbe_1fdffdd6","line":37,"updated":"2014-10-28 17:19:49.000000000","message":"If we need to allow tests to access migrations and control the environment, we should consider whether we need one or more new test fixture classes to go along with this work. I\u0027m still not 100% clear on what problem is being solved by this spec, though, and the test configuration seems like only one part?","commit_id":"7a57f8c64c6213a43024ddd394979a64d0dfc52a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08c9cb8654859253f795755f6504c36f92dfa4a0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Logging"},{"line_number":40,"context_line":"-------"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Default env.py configures itself logging instance. This action crashes existed"},{"line_number":43,"context_line":"projects logging object."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Templating"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aa7fdbe_bf8b51c1","line":42,"updated":"2014-10-28 17:19:49.000000000","message":"When you say \"crashes\", do you mean literally that the program dies because logging is configured incorrectly or twice or whatever?","commit_id":"7a57f8c64c6213a43024ddd394979a64d0dfc52a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08c9cb8654859253f795755f6504c36f92dfa4a0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"including `env.py`, generated when `init` shell command called. An OpenStack"},{"line_number":50,"context_line":"projects can have different migration directories arrangement. Most of"},{"line_number":51,"context_line":"potential arrangements which differs from default can\u0027t be handled by default"},{"line_number":52,"context_line":"`env.py`."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Sharing context"},{"line_number":55,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aa7fdbe_7f98096a","line":52,"updated":"2014-10-28 17:19:49.000000000","message":"OK, that\u0027s not really a problem in my mind. We don\u0027t want every project making up their own way to create migrations. We want to provide a single way to do it that all projects can use.","commit_id":"7a57f8c64c6213a43024ddd394979a64d0dfc52a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08c9cb8654859253f795755f6504c36f92dfa4a0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"it much project\u0027s purposes. Otherwise project can inherit the class end"},{"line_number":68,"context_line":"override a methods. `Env` contains same functionality as default env.py"},{"line_number":69,"context_line":"module, but it is decomposed into several methods, intended to configure"},{"line_number":70,"context_line":"different objects needed by an environment."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Provided API:"},{"line_number":73,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aa7fdbe_fff07992","line":70,"updated":"2014-10-28 17:19:49.000000000","message":"I tend to agree with Mike\u0027s comments from earlier that we should not guess about what flexibility is needed. We do not want every project to make up its own way of doing migrations. We want just enough flexibility to support the requirements of current projects, while strongly encouraging them to standardize so deployers have consistent behavior.","commit_id":"7a57f8c64c6213a43024ddd394979a64d0dfc52a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08c9cb8654859253f795755f6504c36f92dfa4a0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"module, but it is decomposed into several methods, intended to configure"},{"line_number":70,"context_line":"different objects needed by an environment."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Provided API:"},{"line_number":73,"context_line":"-------------"},{"line_number":74,"context_line":":method __init__: takes `metadata` shared between tests and environment."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aa7fdbe_7f82c9c8","line":72,"updated":"2014-10-28 17:19:49.000000000","message":"Can you provide an example or two of why each of these methods might need to be overridden in a project? Are there a lot of cases, or can we design an API to meet the needs we know about without requiring subclassing?","commit_id":"7a57f8c64c6213a43024ddd394979a64d0dfc52a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"967215cb546116b39c135da015574c3083ba32e8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"-------------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":":func: `run_migrations`. Function doesn\u0027t take any parameters. Run migrations"},{"line_number":41,"context_line":"        on given connection."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Alternatives"},{"line_number":44,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5a890539_aeda0115","line":41,"updated":"2014-11-19 22:06:49.000000000","message":"If the function takes no parameters, how do we give it a connection to use? Or does it get one from calling another function?","commit_id":"51f130f2979adf596269e22f81e59306871072a5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e1214796c9f0d88f03c010c30648387bf9083aa4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"-------------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":":func: `run_migrations`. Function doesn\u0027t take any parameters. Run migrations"},{"line_number":41,"context_line":"        on given connection."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Alternatives"},{"line_number":44,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5a890539_316bec20","line":41,"in_reply_to":"5a890539_aeda0115","updated":"2014-12-03 13:04:33.000000000","message":"An engine instance provided by oslo.db EngineFacade fablic class. I\u0027ll describe it in the spec.","commit_id":"51f130f2979adf596269e22f81e59306871072a5"}],"specs/kilo/common-alembic-env.rst":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"77614ccc07a2092ec1b93e53ca5070cc635870fb","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Please note, due to Alembic deletes an environment module from `sys.modules`"},{"line_number":101,"context_line":"and `hacking.checks.imports` checks for existence of the module in"},{"line_number":102,"context_line":"`sys.modules` to verify that the module was imported, we need to skip pep8"},{"line_number":103,"context_line":"import check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Implementation"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a961159_4f90d4ec","line":103,"updated":"2014-12-08 15:06:49.000000000","message":"The new version of hacking should be able to find that env exists even if it is not in sys.modules. If not, we should fix hacking.","commit_id":"c1f6c2d66a7a7bad2e9c8c62c6b972d78c583a11"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"d425cf0215a7c61f90f1074a31bf443bbad54612","unresolved":false,"context_lines":[{"line_number":100,"context_line":"Please note, due to Alembic deletes an environment module from `sys.modules`"},{"line_number":101,"context_line":"and `hacking.checks.imports` checks for existence of the module in"},{"line_number":102,"context_line":"`sys.modules` to verify that the module was imported, we need to skip pep8"},{"line_number":103,"context_line":"import check."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Implementation"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3a961159_76eb76b0","line":103,"in_reply_to":"3a961159_4f90d4ec","updated":"2014-12-09 18:03:00.000000000","message":"I\u0027ll remove this note. If the bug raise again I\u0027ll file the bug for hacking.","commit_id":"c1f6c2d66a7a7bad2e9c8c62c6b972d78c583a11"}]}
