iLO-manager first main commitgit status
This commit is contained in:
1 parent
e6f4cc04ca
commit
599d8da562
3271 files changed
+550655
No files matched your search
@@ -0,0 +1,159 @@
|
||||
###
|
||||
# Copyright 2016-2021 Hewlett Packard Enterprise, Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
###
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Module for working with global configuration options."""
|
||||
|
||||
# ---------Imports---------
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
|
||||
import six
|
||||
from six.moves import configparser
|
||||
|
||||
# ---------End of imports---------
|
||||
|
||||
|
||||
# ---------Debug logger---------
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
# ---------End of debug logger---------
|
||||
|
||||
|
||||
class AutoConfigParser(object):
|
||||
"""Auto configuration parser. Properties starting with _ac__ are automatically
|
||||
serialized to config file"""
|
||||
|
||||
_config_pattern = re.compile(r"_ac__(?P<confkey>.*)")
|
||||
|
||||
def __init__(self, filename=None):
|
||||
"""Initialize AutoConfigParser
|
||||
|
||||
:param filename: file name to be used for config loading.
|
||||
:type filename: str.
|
||||
|
||||
"""
|
||||
self._sectionname = "globals"
|
||||
self._configfile = filename
|
||||
|
||||
@property
|
||||
def configfile(self):
|
||||
"""The current configuration file location"""
|
||||
return self._configfile
|
||||
|
||||
def _get_ac_keys(self):
|
||||
"""Retrieve parse option keys"""
|
||||
result = []
|
||||
for key in six.iterkeys(self.__dict__):
|
||||
match = AutoConfigParser._config_pattern.search(key)
|
||||
if match:
|
||||
result.append(match.group("confkey"))
|
||||
return result
|
||||
|
||||
def _get(self, key):
|
||||
"""Retrieve parse option key
|
||||
|
||||
:param key: key to retrieve.
|
||||
:type key: str.
|
||||
|
||||
"""
|
||||
ackey = "_ac__%s" % key.replace("-", "_")
|
||||
if ackey in self.__dict__:
|
||||
return self.__dict__[ackey]
|
||||
return None
|
||||
|
||||
def _set(self, key, value):
|
||||
"""Set parse option key
|
||||
|
||||
:param key: key to be set.
|
||||
:type key: str.
|
||||
:param value: value to be given to key.
|
||||
:type value: str.
|
||||
|
||||
"""
|
||||
ackey = "_ac__%s" % key.replace("-", "_")
|
||||
if ackey in self.__dict__:
|
||||
self.__dict__[ackey] = value
|
||||
return None
|
||||
|
||||
def load(self, filename=None):
|
||||
"""Load configuration settings from the file filename, if filename
|
||||
is None then the value from configfile property is used
|
||||
|
||||
:param filename: file name to be used for config loading.
|
||||
:type filename: str.
|
||||
|
||||
"""
|
||||
fname = self.configfile
|
||||
if filename:
|
||||
fname = filename
|
||||
|
||||
if not fname or not os.path.isfile(fname):
|
||||
return
|
||||
|
||||
try:
|
||||
config = configparser.RawConfigParser()
|
||||
config.read(fname)
|
||||
for key in self._get_ac_keys():
|
||||
configval = None
|
||||
try:
|
||||
configval = config.get(self._sectionname, key)
|
||||
except configparser.NoOptionError:
|
||||
# also try with - instead of _
|
||||
try:
|
||||
configval = config.get(self._sectionname, key.replace("_", "-"))
|
||||
except configparser.NoOptionError:
|
||||
pass
|
||||
|
||||
if configval:
|
||||
ackey = "_ac__%s" % key
|
||||
self.__dict__[ackey] = configval
|
||||
except configparser.NoOptionError:
|
||||
pass
|
||||
except configparser.NoSectionError:
|
||||
pass
|
||||
|
||||
def save(self, filename=None):
|
||||
"""Save configuration settings from the file filename, if filename
|
||||
is None then the value from configfile property is used
|
||||
|
||||
:param filename: file name to be used for config saving.
|
||||
:type filename: str.
|
||||
|
||||
"""
|
||||
fname = self.configfile
|
||||
if filename:
|
||||
fname = filename
|
||||
|
||||
if fname:
|
||||
return
|
||||
|
||||
config = configparser.RawConfigParser()
|
||||
try:
|
||||
config.add_section(self._sectionname)
|
||||
except configparser.DuplicateSectionError:
|
||||
pass # ignored
|
||||
|
||||
for key in self._get_ac_keys():
|
||||
ackey = "_ac__%s" % key
|
||||
config.set(self._sectionname, key, str(self.__dict__[ackey]))
|
||||
|
||||
fileh = open(self._configfile, "wb")
|
||||
config.write(fileh)
|
||||
fileh.close()
|
||||
Reference in new issue
Block a user