mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
- Move render_tabs into plinth.views - Move admin_tabs and user_tabs into the class - New interproc module contains inter-process functions - New helper methods in TabMixin
40 lines
901 B
Python
40 lines
901 B
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import contextlib
|
|
import logging
|
|
import os
|
|
import uuid
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def log_subprocess(result):
|
|
logger.critical('Subprocess returned %d', result.returncode)
|
|
logger.critical('Stdout: %r', result.stdout)
|
|
logger.critical('Stderr: %r', result.stderr)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def atomically_rewrite(filepath):
|
|
successful = False
|
|
tmp = '%s.%s.plinth-tmp' % (filepath, uuid.uuid4().hex)
|
|
fd = open(tmp, 'x')
|
|
|
|
try:
|
|
# Let client write to a temporary file
|
|
yield fd
|
|
successful = True
|
|
finally:
|
|
fd.close()
|
|
|
|
try:
|
|
if successful:
|
|
# Invoke rename(2) to atomically replace the original
|
|
os.rename(tmp, filepath)
|
|
finally:
|
|
# Delete temp file
|
|
try:
|
|
os.unlink(tmp)
|
|
except FileNotFoundError:
|
|
pass
|