aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generat3d/dbz.py3
-rw-r--r--tests/test_dbz.py9
2 files changed, 12 insertions, 0 deletions
diff --git a/generat3d/dbz.py b/generat3d/dbz.py
index e5b1aea..ac244d5 100644
--- a/generat3d/dbz.py
+++ b/generat3d/dbz.py
@@ -78,6 +78,9 @@ def write(doc, out):
fd, tmp = tempfile.mkstemp(dir=out.parent, prefix=out.name, suffix=".tmp")
with os.fdopen(fd, "wb") as f:
f.write(gzip.compress(json.dumps(doc).encode()))
+ m = os.umask(0)
+ os.umask(m)
+ os.chmod(tmp, 0o666 & ~m) # mkstemp makes 0600
os.replace(tmp, out)
except BaseException as e:
if tmp is not None:
diff --git a/tests/test_dbz.py b/tests/test_dbz.py
index 2e5ffe8..3fbd7dc 100644
--- a/tests/test_dbz.py
+++ b/tests/test_dbz.py
@@ -20,6 +20,7 @@ import gzip
import io
import json
import math
+import os
import tempfile
import unittest
from pathlib import Path
@@ -94,3 +95,11 @@ class DbzTest(unittest.TestCase):
doc = build(load(duf, Library([DATA / "lib"])), [DATA / "lib"])
fig = doc["figures"][0]
self.assertEqual((fig["name"], fig["label"], fig["id"]), ("Alice", "Alice Label", "Fig"))
+
+ def test_write_mode_follows_umask(self):
+ with tempfile.TemporaryDirectory() as d:
+ out = Path(d) / "s.dbz"
+ write(self.doc, out)
+ m = os.umask(0)
+ os.umask(m)
+ self.assertEqual(out.stat().st_mode & 0o777, 0o666 & ~m)