Контекстный менеджер внутри контекстного менеджера

У меня есть контекстный менеджер S3TempFile, который берет локальный файл, загружает его в s3, позволяет вам использовать файл s3 и при выходе удаляет файл из s3.

Я хочу создать еще один, S3TempRecordsFile, который берет список записей, обрабатывает их, выводит в локальный файл, загружает в s3, позволяет вам использовать файл s3, а при выходе удаляет файл из s3 и на локальном диске.

Как видите, второй делает кое-что дополнительно к тому, что делает S3TempFile. Я хочу повторно использовать код S3TempFile в S3TempRecordsFile. Как бы я это сделал? Я не могу использовать оператор with в S3TempRecordsFile для создания экземпляра S3TempFile, так как мы хотим выйти из него только при выходе из контекста S3TempRecordsFile.


person moinudin    schedule 27.03.2014    source источник
comment
Суп, чувак, я слышал, тебе нравятся контекстные менеджеры.   -  person BrenBarn    schedule 27.03.2014
comment
А если серьезно, не могли бы вы просто заставить S3TempRecordsFile наследоваться от S3TempFile и вызвать его унаследованные методы __enter__ и __exit__, чтобы повторно использовать его функциональность?   -  person BrenBarn    schedule 27.03.2014