1. I always expected that, with any reasonably non-trivial app, I would 
inevitably need to fall back to using their env.py. My hope was that for 
simpler cases, since this is a testing tool, there would be a way to not 
require any changes to their env.py by default. Ultimately I can document 
what the recommended changes to a typical env.py would be, and that's not 
the end of the world.

2. I did try to change version_locations, but unless I'm mistaken what I'm 
asking for maybe seems like an unsupported usecase. Attempting to target 
the library env with "script_location" and the local versions/ with 
"version_locations" still seems to look at the wrong location. Given how 
ScriptDirectory is constructed and and then `run_env` directly looks for 
"env.py", it seems like what im asking for is just not an expected usecase.

On Thursday, March 5, 2020 at 12:21:54 PM UTC-5, Mike Bayer wrote:
>
>
>
> On Thu, Mar 5, 2020, at 12:02 PM, Daniel Cardin wrote:
>
> So, yes I mean "commands" as in `alembic.command.upgrade()`.
>
> The idea would be that the library defines an env.py (e.g. the important 
> portion of which would look something like:)
> ...
>
> connectable = context.config.attributes.get("connection", None)
> with self.connection.connect() as connection:
>     alembic.context.configure(connection=connection)
>
>     with alembic.context.begin_transaction():
>         alembic.context.run_migrations()
>
> which lives at `src/library/foo/env.py`. If the migrations were colocated 
> with the env.py, then afaik setting "script_location" to "library:foo" 
> would enable me to run `alembic.command.upgrade()` and it would just work. 
> However in this case (if possible), the migrations/versions/* would live at 
> an arbitrary other location (e.g. the code which has installed this 
> library).
>
>
> Ok two thoughts on that:
>
> 1. usually the way this goes is that the project that has the migrations 
> does everything normally, it has its own env.py, and inside that env.py, 
> that's where it imports *your* env.py.  that is, instaed of having the 
> usual env.py it would only have:
>
> # env.py
>
> from daniel_cardins.library.env import run_migrations
>
> run_migrations(<important arguments>)
>
> 2. the locations of the version files vs. the env.py script are actually 
> separate in the config.    there is a script_location that it uses to find 
> the home base where env.py is, however there is also a version_locations 
> config that can have any number of other directories in it and these 
> supersede script_location for the version files themselves.
>
>
>
> I think in general, if the end-user has a bunch of version files set up, 
> it's probably not a big deal that they have a stub "env.py" right there 
> that just calls out to your library.  that's something very clear that 
> people looking at a project that uses your library can understand quickly 
> if they already know alembic.
>
>
>
>
>
> General workflow:
> * person working on project "foo" invokes some cli/command/whatever which 
> requests an upgrade
> * library does whatever requisite setup
> * library invokes `alembic.command.upgrade()`
> * upgrade() ends up routing the code through the library's `env.py`
> * the context of the migration command is targeting the project "foo"'s 
> local migrations/versions folder
>
> The specifics of the above are just based on my knowledge of alembic, so 
> if there's another process i could be doing where env.py isn't "invoked" so 
> much as the above code block is just called normally, then that's ideal.
>
> On Thursday, March 5, 2020 at 9:36:09 AM UTC-5, Mike Bayer wrote:
>
>
>
> On Thu, Mar 5, 2020, at 8:08 AM, Daniel Cardin wrote:
>
> I am attempting to write a library which invokes alembic commands, while 
> referencing the migrations of a separate package which has installed said 
> library.
>
> The intent here, is for the library to invoke the alembic commands with an 
> env.py defined in that package. This seems to work through 
> config.get("script_location", "package_name:foldername")
> but then obviously expects the actual migrations to be colocated at the 
> same location.
>
> My guess would be, if this is possible at all, that there'd be something I 
> could put in the env.py which would reconfigure it to execute the 
> `context.run_migrations()` migration context (and therefore search path, 
> back at the original call site.
>
> I realize that this won't always work, given that env.py is often likely 
> customized enough such that a generic one wouldn't be able to execute them, 
> but per your cookbook suggestions about programmatic invocation of 
> commands, this sort of thing requires the user to opt into changing their 
> env.py to use
> connectable = context.config.attributes.get("connection", None)
> in order to make use of a connection handed to it.
>
>
> I'm not following all the moving pieces here, like when you say 
> "commands", i assume you mean the commands in alembic.command, , like 
> alembic.command.upgrade().   when you say "an env.py defined in that 
> package", I guess you mean in the separate package that is using your 
> library.      
>
> this doesn't seem different from what Alembic itself does, "that package" 
> would have a directory where the env.py and its migration files are 
> present?       So... I'm not really sure what you're trying to do beyond 
> call an Alembic command that is against a particular directory.
>
> if OTOH by "commands" you mean migration operations, like you want to call 
> op.create_table() yourself, OK, but I don't really understand enough to 
> formulate an answer for you.
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy-alembic" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy-alembic+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy-alembic/5612f1d1-9e93-46ed-9be7-0db362b815a8%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy-alembic/5612f1d1-9e93-46ed-9be7-0db362b815a8%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy-alembic" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy-alembic+unsubscr...@googlegroups.com <javascript:>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy-alembic/598f480c-e977-4ce2-a315-8563aa9944fc%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy-alembic/598f480c-e977-4ce2-a315-8563aa9944fc%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy-alembic" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy-alembic+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy-alembic/99a77147-76da-490a-944d-7f2f40f42fd3%40googlegroups.com.

Reply via email to