python-neo icon indicating copy to clipboard operation
python-neo copied to clipboard

IO classes as context managers

Open toddrjen opened this issue 11 years ago • 7 comments

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 avatar Jul 21 '14 11:07 toddrjen

+1, this would be great.

tbekolay avatar Jul 21 '14 13:07 tbekolay

It sounds good.

samuelgarcia avatar Jul 21 '14 13:07 samuelgarcia

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().

rproepp avatar Jul 22 '14 09:07 rproepp

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

toddrjen avatar Jul 25 '14 10:07 toddrjen

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.

rproepp avatar Jul 25 '14 14:07 rproepp

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

JuliaSprenger avatar Jan 08 '19 12:01 JuliaSprenger

I think yes. Let see after #461

samuelgarcia avatar Jan 08 '19 12:01 samuelgarcia