# Write File that Contains Secret
#
# Create or update a file that contains information contains within Avendesora.
# License {{{1
# Copyright (C) 2016-2024 Kenneth S. Kundert
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see http://www.gnu.org/licenses/.
# Imports {{{1
from .error import PasswordError
from .shlib import to_path
from inform import os_error
# WriteFile {{{1
[docs]
class WriteFile():
"""Write a text file containing a secret.
Args:
path (str):
A path to the file that is to be written.
contents (str or secret):
The desired contents of the file.
"""
def __init__(self, path, contents, mode=0o0600):
self.path = path
self.contents = contents
self.mode = mode
def render(self):
try:
contents = self.contents.render()
except AttributeError:
contents = self.contents
try:
path = to_path(self.path)
path.write_text(contents)
path.chmod(self.mode)
except OSError as e:
raise PasswordError(os_error(e))
return 'Contents written to {}.'.format(str(path))
# __repr__() {{{2
def __repr__(self):
return "WriteFile('{!s}', contents={!r})".format(
self.path, self.contents
)
# __str__() {{{2
def __str__(self):
return self.render()