On Tue, Sep 22, 2020 at 05:00:51PM -0400, John Snow wrote: > Make the file handling here just a tiny bit more idiomatic. > (I realize this is heavily subjective.) > > Use exist_ok=True for os.makedirs and remove the exception, > use fdopen() to wrap the file descriptor in a File-like object, > and use a context manager for managing the file pointer. > > Signed-off-by: John Snow <js...@redhat.com>
Reviewed-by: Eduardo Habkost <ehabk...@redhat.com> I really miss a comment below explaining why we use open(os.open(pathname, ...), ...) instead of open(pathname, ...). > --- > scripts/qapi/gen.py | 24 ++++++++++-------------- > 1 file changed, 10 insertions(+), 14 deletions(-) > > diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py > index ba32f776e6..cf340e66d4 100644 > --- a/scripts/qapi/gen.py > +++ b/scripts/qapi/gen.py > @@ -14,7 +14,6 @@ > # See the COPYING file in the top-level directory. > > from contextlib import contextmanager > -import errno > import os > import re > from typing import Dict, Generator, List, Optional, Tuple > @@ -64,21 +63,18 @@ def write(self, output_dir: str) -> None: > return > pathname = os.path.join(output_dir, self.fname) > odir = os.path.dirname(pathname) > + > if odir: > - try: > - os.makedirs(odir) > - except os.error as e: > - if e.errno != errno.EEXIST: > - raise > + os.makedirs(odir, exist_ok=True) > + > fd = os.open(pathname, os.O_RDWR | os.O_CREAT, 0o666) > - f = open(fd, 'r+', encoding='utf-8') > - text = self.get_content() > - oldtext = f.read(len(text) + 1) > - if text != oldtext: > - f.seek(0) > - f.truncate(0) > - f.write(text) > - f.close() > + with os.fdopen(fd, 'r+', encoding='utf-8') as fp: > + text = self.get_content() > + oldtext = fp.read(len(text) + 1) > + if text != oldtext: > + fp.seek(0) > + fp.truncate(0) > + fp.write(text) > > > def _wrap_ifcond(ifcond: List[str], before: str, after: str) -> str: > -- > 2.26.2 > -- Eduardo