Skip to content

Commit 5d2e6b4

Browse files
committed
FIX: Use pathlib instead of os for managing filesystem paths.
1 parent dbf5cfa commit 5d2e6b4

File tree

7 files changed

+25
-31
lines changed

7 files changed

+25
-31
lines changed

pylith/meshio/DataWriter.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# See https://mit-license.org/ and LICENSE.md and for license information.
99
# =================================================================================================
1010

11-
import os
11+
import pathlib
1212

1313
from pylith.utils.PetscComponent import PetscComponent
1414

@@ -29,23 +29,21 @@ def preinitialize(self):
2929
self._createModuleObj()
3030

3131
@staticmethod
32-
def mkfilename(outputDir, simName, label, suffix):
32+
def makeFilename(outputDir, simName, label, suffix):
3333
"""Create filename from output directory, simulation name, label, and filename suffix.
3434
"""
35-
filename = os.path.join(outputDir, "{}-{}.{}".format(simName, label, suffix))
36-
return filename
35+
return pathlib.Path(outputDir) / f"{simName}-{label}.{suffix}"
3736

38-
def mkpath(self, filename):
37+
def makePath(self, filename):
3938
"""Create path for output file.
4039
"""
4140
from pylith.mpi.Communicator import mpi_is_root
4241
isRoot = mpi_is_root()
4342
if isRoot:
4443
self._info.log("Creating path for output file '{}'".format(filename))
45-
relpath = os.path.dirname(filename)
46-
47-
if relpath and not os.path.exists(relpath) and isRoot:
48-
os.makedirs(relpath)
44+
relpath = pathlib.Path(filename).parent.resolve()
45+
if isRoot:
46+
relpath.mkdir(exist_ok=True, parents=True)
4947

5048
def verifyConfiguration(self):
5149
"""Verify compatibility of configuration.

pylith/meshio/DataWriterHDF5.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ def setFilename(self, outputDir, simName, label):
4646
"""Set filename from default options and inventory. If filename is given in inventory, use it,
4747
otherwise create filename from default options.
4848
"""
49-
filename = self.filename or DataWriter.mkfilename(outputDir, simName, label, "h5")
50-
self.mkpath(filename)
51-
ModuleDataWriterHDF5.filename(self, filename)
49+
filename = self.filename or DataWriter.makeFilename(outputDir, simName, label, "h5")
50+
self.makePath(filename)
51+
ModuleDataWriterHDF5.filename(self, str(filename))
5252

5353
def _createModuleObj(self):
5454
"""Create handle to C++ object."""

pylith/meshio/DataWriterHDF5Ext.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def setFilename(self, outputDir, simName, label):
4444
"""Set filename from default options and inventory. If filename is given in inventory, use it,
4545
otherwise create filename from default options.
4646
"""
47-
filename = self.filename or DataWriter.mkfilename(outputDir, simName, label, "h5")
48-
self.mkpath(filename)
49-
ModuleDataWriterHDF5Ext.filename(self, filename)
47+
filename = self.filename or DataWriter.makeFilename(outputDir, simName, label, "h5")
48+
self.makePath(filename)
49+
ModuleDataWriterHDF5Ext.filename(self, str(filename))
5050

5151
def close(self):
5252
"""Close writer.

pylith/meshio/DataWriterVTK.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ def setFilename(self, outputDir, simName, label):
6262
"""Set filename from default options and inventory. If filename is given in inventory, use it,
6363
otherwise create filename from default options.
6464
"""
65-
filename = self.filename or DataWriter.mkfilename(outputDir, simName, label, "vtk")
66-
self.mkpath(filename)
67-
ModuleDataWriterVTK.filename(self, filename)
65+
filename = self.filename or DataWriter.makeFilename(outputDir, simName, label, "vtk")
66+
self.makePath(filename)
67+
ModuleDataWriterVTK.filename(self, str(filename))
6868

6969
def _configure(self):
7070
"""Configure object.

pylith/problems/ProgressMonitor.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,12 @@ def preinitialize(self, defaults):
4444
def _createPath(self):
4545
"""Create path for filename if it doesn't exist.
4646
"""
47-
import os
47+
import pathlib
4848
import pylith.mpi.mpi as mpi
4949

50-
relpath = os.path.dirname(self.filename)
51-
if relpath and not os.path.exists(relpath):
52-
# Only create directory on master
53-
isMaster = 0 == mpi.rank()
54-
if isMaster:
55-
os.makedirs(relpath)
50+
relpath = pathlib.Path(self.filename).parent.resolve()
51+
if 0 == mpi.rank(mpi.petsc_comm_world()):
52+
relpath.mkdir(exist_ok=True, parents=True)
5653

5754
def _createModuleObj(self):
5855
"""Create handle to corresponding C++ object.

pylith/utils/DumpParameters.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,8 @@ def _createPath(self, filename):
122122
"""
123123
import pathlib
124124

125-
parentDir = pathlib.Path(filename).parent
126-
if parentDir:
127-
parentDir.mkdir(exist_ok=True)
125+
parentDir = pathlib.Path(filename).parent.resolve()
126+
parentDir.mkdir(exist_ok=True, parents=True)
128127

129128

130129
# End of file

tests/pytests/meshio/TestDataWriter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ class TestDataWriter(TestAbstractComponent):
1919
"""
2020
_class = DataWriter
2121

22-
def test_mkfilename(self):
22+
def test_makeFilename(self):
2323
writer = DataWriter()
24-
filename = writer.mkfilename(outputDir="abc", simName="defg", label="hijkl", suffix="hx3")
25-
self.assertEqual("abc/defg-hijkl.hx3", filename)
24+
filename = writer.makeFilename(outputDir="abc", simName="defg", label="hijkl", suffix="hx3")
25+
self.assertEqual("abc/defg-hijkl.hx3", str(filename))
2626

2727

2828
def load_tests(loader, tests, pattern):

0 commit comments

Comments
 (0)