-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Labels
Proposal: AcceptedAccepted proposal for new RFCAccepted proposal for new RFC
Description
Motivation
The current implementation of invenio-files-rest is in places confusing to follow and doesn't provide an easy-to-use Python API or allow for easy extensibility to support multiple storage backends in one system.
See also related discussion on inveniosoftware/invenio-files-rest#255.
Summary
Proposed changes
- Storage backends are registered using entry points, and a(n overridable) name→class mapping added to config
FileInstance.storage_class
is migrated fromString(1)
to a larger string, and used to point to the storage backend entry point name used for the file. It is currently unused.- A new storage factory is created that uses
FileInstance.storage_class
to mediate access to stored files based on.storage_class
- The new storage factory is the default for new cookiecutters, but the old pyfs storage factory remains with the old behaviour and a DeprecationWarning, to provide a migration path
- The new storage factory can be overridden to use another way to determine storage class for both existing files and new files. I expect to make this a class-based factory, with obviously overrideable methods.
- An alembic migration that ALTERs
FileInstance.storage_class
to extend its length and populates it with according to some (yet to be determined) heuristic FileInstance.storage(**kwargs)
has its**kwargs
deprecated. Possibly deprecate in favour of a (cached)file
property, for a cleaner interface. New interface is e.g.with file_instance.file.open() as f:
- Update documentation to reflect changes
- Updates to invenio-s3 to use the new storage framework implementation
Resources
Cottage Labs is offering 2 days a week of developer effort that could be spent on this. I haven't yet estimated the amount of effort required.
lnielsen
Metadata
Metadata
Assignees
Labels
Proposal: AcceptedAccepted proposal for new RFCAccepted proposal for new RFC