-
Notifications
You must be signed in to change notification settings - Fork 289
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rearrange PyPI projects, break out adapters #1386
Comments
Are we imagining all the packages (OpenTimelineIO umbrella, OTIO-core, and other adapters) would live in the same, existing repo? Or do we want them each split out into their own git repositories? |
I'd be in favour of splitting them into their own repos. |
The adapters should definitely go into separate repos (one per adapter) so that experts in each one can be given ownership over them. As for the core and the umbrella, I don't know. Is there a tradeoff worth considering? I can sort of imagine what a separate umbrella repo would look like, but I'm unclear on the details. What would it look like to have them together in one repo? |
Is checkbox number two in the list the GitHub project itself or the project on pypi? So when Would it make sense to follow the
I'm not sure if this is possible though, as I don't have enough experience with setting such a structure up. The contrib key might be tricky to update without releasing new main packages? And I agree about splitting adapters to separate repos |
I would see the "core" as a separate package (but still in the opentimelineio repo),
If the core and the meta package (the umbrella) live in different repos, I think it could make it confusing to users. Our main repo would be named One thing that we might want to consider is versioning and version constraints and how we will want to bundle things. Will the meta package define its dependencies with lower bound versions or without constraints at all? What happens when new features are added to OTIO (or breaking changes)? Should adapters be compatible with multiple versions of OTIO? In that same line of thought, should they use lower bound constraint (>=0.14)) on OTIO version or both lower and upper bounds (>=0.14, <=1.17)? (specifying a maximum would probably cause problem down the line). |
@mikemahony and I made this empty repo for experimentation. We can sketch this out and see how it fits before deciding on the final layout: https://github.com/OpenTimelineIO/otio-umbrella I agree that having the repos and the pypi packages with clear names is important. The version history of a separate umbrella repo seems appealing too, but not essential. |
Note that there are a few explicit references to the contrib package in the code:
Search for "contrib" in manifest.py. I see some in the autogen documentation as well, might be some others: OpenTimelineIO/src/py-opentimelineio/opentimelineio/console/autogen_plugin_documentation.py Line 348 in 5e27e78
I added a todo list item to remove these references. |
Putting these here for something to look at:
|
After discussing at the 11/10/2022 TSC meeting, the consensus is to try Option B and see how it works out. |
@apetrynet, your name came up the other day - would you be interested and available to create repositories here for the individual contrib adapters? Perhaps even just placeholders/stubs with just enough to be able to be deployed to https://test.pypi.org? |
I added another todo list item based on the TSC discussion that a pinning strategy should be documented for the core, umbrella, and adapter repositories. |
@mikemahony, Yes, I can look at this. |
@markreidvfx, do you feel like https://github.com/OpenTimelineIO/otio-aaf-adapter is ready enough to be deployed to test.pypi.org? |
@mikemahony yes, I think it is in a good enough state to start testing that. I've been tracking that here and additional tasks here |
@mikemahony are the any docs or examples you know of on how your suppose to use test.pypi.org vs the regular pypi? |
@markreidvfx you can add |
thanks @JeanChristopheMorinPerso. I think I get it now. I created the initial pypi project |
Hi! |
You can start with the non-contrib ones, so we can demonstrate that this all works before deciding about each contrib adatper. |
I've created a branch called "extract_adapters" where we can safely remove adapters and use for testing the extracted plugins. |
Just transferred the burnins adapter |
Updated title and comment to reflect what I see in the branch. |
Pinging this thread as we've updated this issue following conversation today. Comments welcome. |
OK, I took some time to read the new proposal. Here are some thoughts:
These are the questions/comments I came up with when reading the new proposal. I think it's heading in the right direction, but some clarification will help us have a clearer idea. We've come a long way already and I'm excited to see this effort getting closer and closer to completion! |
The main difference I see in the revised proposal is: So there are still the same packages (umbrella = core + many plugins), but their names are different, such that "opentimelineio" is just the core rather than the umbrella. Am I understanding that right? My only concern with that is that folks who are already using "pip install opentimelineio" will upgrade and lose their adapter plugins, get confused, and then discover that they need to "pip install opentimelineio-plugins" to get back to the functionality they had. For casual users this may be confusing and disruptive. Can you clarify the intent of the revision? I missed the discussion on this. |
Thanks for the good questions!
That would be fine. I suspect that this package won't change all that much, since a change would be a plugin being added or removed, or the main repo being releasing a new version.
One repo/project is named
I don't think we had something specific in mind. There was some concern about preventing conflicting version pinning (one plugin needs > some version, some other plugin hasn't been updated and says <= some version). I'm sure there is wisdom and experience in this space that we can draw on and if you have a perspective, I'd love to hear it!
In the release system for OTIO there is a script that handles freezing and unfreezing various versions. If we're going to freeze the
You might be right! This was trying to tie a set of plugins to a "known compatible" version of OTIO. If you need adapter X and it is in the plugin set for OTIO v0.15 you can roll back or target a version of opentimelineio for interchange that has the adapter support you need.
Our discussion was to document and promote
Answering these two together. This is definitely an issue with this approach, but our thought was the long term benefit of this strategy is worth it.
|
Thanks for the clarifications. Maybe we could mitigate the confusion/disruption of missing plugins by having the adapter system print a helpful message when an unsupported format is encountered: "No adapter plugin for format 'xyz' was found. Try 'pip install opentimelineio-plugins' and/or see https://.../adapters for details." |
Regarding pinning to versions... We should consider whether the opentimelineio-plugins package is responsible for vetting the dependent plugins at all. If we leave it completely unpinned, then a change to any of the plugins which introduces a security problem, or needs a new/old version of the OTIO core, could cause problems. Maybe a minimal test case for each adapter, and dependabot could provide a minimal vetting, and a mechanism for knowing if/when changes occur? |
This should be fairly easy to implement. There's already an error message we can update right? |
Upper bounds (
I don't think this will be necessary for the plugins. Baking is handy when something is compiled, etc, but for pure python packages it probably just adds unnecessary overhead.
"pain" was a typo, in case it matters. I wanted to say "main". But I see you point. In all cases, the
Works for me. Should an item be added in the issue description?
I think it's a totally valid concern @jminor. But I think a good deal of documentation, a section in the release notes and good communication (in the release announcements, etc) should solve that concern IMO, or at least help. |
With help from @JeanChristopheMorinPerso and @timlehr we were able to:
Next Steps:
This should make it easy for users to test things out and give feedback. |
Once we land the "extract_adapters" branch we need to update each adapters "ci.yaml" file to run tests against the main and tagged branches. |
The work for this ticket is done, any further work can be handled in follow-on issues. |
Overview
The goal of this issue is to refactor the PyPI projects for OpenTimelineIO into two pypi projects from the current one:
OpenTimelineIO
+ a curated set of pluginsOpenTimelineIO
releasesPlugins
project will be in its own repository, with a README that describes briefly some criteria that the TSC is looking for when assessing whether to include a project or notOpenTimelineIO-Plugins
may still be present on pip. Users may install extra plugins through pip that aren't included in theOpenTimelineIO-Plugins
project.Outstanding tasks:
OpenTimelineIO-Plugins
OpenTimeilneIO-Plugins
OpenTimelineIO-Plugins
Plugins
repoCI integration for checking new versions ofWe'll leave this to adapter repo maintainers to do if they see fitOpenTimelineIO
from thePlugins
repoadd version freezing to release script for parent projectsNo Longer needed, we'll allow leaf adapter projects to set version constraints when neededCONTRIBUTING.md
or the main documentation)-Plugins
project)otiopluginfo
command outputOpenTimelineIO>=0.17.0.dev1
OpenTimelineIO>=0.17.0
Versioning strategy
OpenTimelineIO-Plugins
project pins to a specificOpenTimelineIO
project, corresponding to the current release, using the==
constraintOpenTimelineIO
version number-Plugins
project depends on a set of adapters in a floating way, which lets the adapter repos individually deal with their dependency on the coreOpenTimelineIO-Plugins
gets versioned only when plugins get added or removed, or the pinned version ofOpenTimelineIO
is updatedWhy the OpenTimelineIO Does Not Include The Plugins ("OpenTimelineIO-core vs OpenTimelineIO-
Currently, if you
pip install opentimelineio
you get the contrib adapters + the core library. This suggestion switches that around such thatpip install opentimelineio
is only the core without the contrib adapters. We decided to make this shift for several reasons:OpenTimelineIO
package without the plugins being updated if there is a compability issueQuestion
Plugins
repo?The text was updated successfully, but these errors were encountered: