Return fully functional GridFSFile objects from getFileList methods #48
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
At the moment DBObjects returned by GridFS.getFileList methods can be casted to GridFSFiles, but input/output with them fails as _fs instance variable has not been properly initialized using _fix method in GridFS class.
This effectively prevents one to execute "cursor queries" (with limit, skip etc) and still use the returned objects for input/output. Only way to circumvent this is to use find() instead of getFiles(), but it does not provide any API to e.g. limit the resultset and thus in many cases ends up using unnecessary I/O.
This commit wraps DBCursor returned from getFileList with GridFSCursor that uses _fix to inject GridFS instance into GridFSFiles returned when calling next(). This allows one to cast returned DBObjects into GridFSFiles and make I/O operations with them successfully.
I'm not sure if this kind of approach is an appropriate one and would very much like to hear any better suggestions to solve the same problem!