From 072edd76f8c6d567561c81a19b55a001bb5ea416 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 10:44:25 +0100 Subject: Give .dbz files normal permissions Co-Authored-By: Claude Sonnet 5.5 --- generat3d/dbz.py | 3 +++ tests/test_dbz.py | 9 +++++++++ 2 files changed, 12 insertions(+) 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) -- cgit v1.2.3