Skip to content
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

IO classes as context managers #175

Open
toddrjen opened this issue Jul 21, 2014 · 7 comments
Open

IO classes as context managers #175

toddrjen opened this issue Jul 21, 2014 · 7 comments

Comments

@toddrjen
Copy link
Contributor

For those who don't know, context managers are classes that can be used with python with statements. I think it would be beneficial for IO classes to be able to be used as context managers. This would provide a safe way to handle cleanup operations after running.

To create a context manager, you need two methods, __enter__ and __exit__. For us, __enter__ would probably open the file, while __exit__ would close it.

So I suggest that at the BaseIO level we implement abstract open and close methods that subclasses could re-implement to handle any cleanup. Then BaseIO would implement __enter__ and __exit__ methods that just call open and close, respectively.

So someone could just do this:

with ExampleIO(fname) as ioobj:
    data = ioobj.read()

People wouldn't need to know or care about specific cleanup operations they need to do with particular IO classes.

@toddrjen toddrjen added IO and removed question labels Jul 21, 2014
@tbekolay
Copy link

+1, this would be great.

@samuelgarcia
Copy link
Contributor

It sounds good.

@rproepp
Copy link
Member

rproepp commented Jul 22, 2014

Sure, we can do it in the next round of IO changes.

But it will change the way IOs are used: Currently IOs open and close files automatically. So existing code would not work anymore because it doesn't call open() and it would not clean up because it doesn't call close().

@toddrjen
Copy link
Contributor Author

That would be necessary anyway if we are going to support iteration as in #177.

@rproepp
Copy link
Member

rproepp commented Jul 25, 2014

True. I think there is consensus since we are changing the API anyway. We can include it in the next round of IO changes. There are only two IOs left for this round, so we could start with that soon.

@apdavison apdavison added this to the 0.4 milestone Feb 5, 2015
@apdavison apdavison modified the milestones: 0.6, 0.4 Jul 4, 2016
@JuliaSprenger
Copy link
Member

Can this be implemented in the basefromrawio so all IOs can be used as context managers? Currently only the NixIO has this feature.

@samuelgarcia
Copy link
Contributor

I think yes.
Let see after #461

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants