# -*- coding: utf-8 -*-
#
# 2010-2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2012-2017 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist 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.
#
# cdist 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 cdist. If not, see .
#
#
import os
import hashlib
import cdist.log
import cdist.version
VERSION = cdist.version.VERSION
BANNER = """
.. . .x+=:. s
dF @88> z` ^% :8
'88bu. %8P . 0:
# output.append(label)
# output.append('{0:-^50}'.format(label.center(len(label)+2)))
output.append('{0:-<{1}}'.format(label, self.line_length))
with open(stderr_path, 'r') as fd:
output.append(fd.read())
return '\n'.join(output)
def __str__(self):
output = []
output.append(self.message)
output.append('''{label:-<{length}}
name: {o.name}
path: {o.absolute_path}
source: {o.source}
type: {o.cdist_type.absolute_path}'''.format(
label='---- object ',
length=self.line_length,
o=self.cdist_object)
)
output.append(self.stderr)
return '\n'.join(output)
class InitialManifestError(Error):
"""Something went wrong while executing initial manifest"""
def __init__(self, initial_manifest, stdout_path, stderr_path, subject=''):
self.initial_manifest = initial_manifest
self.stdout_path = stdout_path
self.stderr_path = stderr_path
if isinstance(subject, Error):
self.original_error = subject
else:
self.original_error = None
self.message = str(subject)
self.line_length = 74
@property
def stderr(self):
output = []
if os.path.getsize(self.stderr_path) > 0:
label = "init" + ':stderr '
output.append('{0:-<{1}}'.format(label, self.line_length))
with open(self.stderr_path, 'r') as fd:
output.append(fd.read())
return '\n'.join(output)
def __str__(self):
output = []
output.append(self.message)
output.append('''{label:-<{length}}
path: {im}'''.format(
label='---- initial manifest ',
length=self.line_length,
im=self.initial_manifest)
)
output.append(self.stderr)
return '\n'.join(output)
def file_to_list(filename):
"""Return list from \n seperated file"""
if os.path.isfile(filename):
file_fd = open(filename, "r")
lines = file_fd.readlines()
file_fd.close()
# Remove \n from all lines
lines = map(lambda s: s.strip(), lines)
else:
lines = []
return lines
def str_hash(s):
"""Return hash of string s"""
if isinstance(s, str):
return hashlib.md5(s.encode('utf-8')).hexdigest()
else:
raise Error("Param should be string")
def home_dir():
if 'HOME' in os.environ:
return os.path.join(os.environ['HOME'], ".cdist")
else:
return None