fliu 85c6b91fbc
email: Code cleanup
- 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
2021-08-17 19:43:55 -07:00

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