Mise à jour de Monitor.py et autres scripts
This commit is contained in:
123
myenv/lib/python3.11/site-packages/ovh/config.py
Normal file
123
myenv/lib/python3.11/site-packages/ovh/config.py
Normal file
@@ -0,0 +1,123 @@
|
||||
# Copyright (c) 2013-2024, OVH SAS.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of OVH SAS nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY OVH SAS AND CONTRIBUTORS ````AS IS'' AND ANY
|
||||
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL OVH SAS AND CONTRIBUTORS BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
"""
|
||||
The straightforward way to use OVH's API keys is to embed them directly in the
|
||||
application code. While this is very convenient, it lacks of elegance and
|
||||
flexibility.
|
||||
|
||||
Alternatively it is suggested to use configuration files or environment
|
||||
variables so that the same code may run seamlessly in multiple environments.
|
||||
Production and development for instance.
|
||||
|
||||
This wrapper will first look for direct instantiation parameters then
|
||||
``OVH_ENDPOINT``, ``OVH_APPLICATION_KEY``, ``OVH_APPLICATION_SECRET`` and
|
||||
``OVH_CONSUMER_KEY`` environment variables. If either of these parameter is not
|
||||
provided, it will look for a configuration file of the form:
|
||||
|
||||
.. code:: ini
|
||||
|
||||
[default]
|
||||
; general configuration: default endpoint
|
||||
endpoint=ovh-eu
|
||||
|
||||
[ovh-eu]
|
||||
; configuration specific to 'ovh-eu' endpoint
|
||||
application_key=my_app_key
|
||||
application_secret=my_application_secret
|
||||
consumer_key=my_consumer_key
|
||||
client_id=my_client_id
|
||||
client_secret=my_client_secret
|
||||
|
||||
The client will successively attempt to locate this configuration file in
|
||||
|
||||
1. Current working directory: ``./ovh.conf``
|
||||
2. Current user's home directory ``~/.ovh.conf``
|
||||
3. System wide configuration ``/etc/ovh.conf``
|
||||
|
||||
This lookup mechanism makes it easy to overload credentials for a specific
|
||||
project or user.
|
||||
"""
|
||||
|
||||
from configparser import NoOptionError, NoSectionError, RawConfigParser
|
||||
import os
|
||||
|
||||
__all__ = ["config"]
|
||||
|
||||
#: Locations where to look for configuration file by *increasing* priority
|
||||
CONFIG_PATH = [
|
||||
"/etc/ovh.conf",
|
||||
os.path.expanduser("~/.ovh.conf"),
|
||||
os.path.realpath("./ovh.conf"),
|
||||
]
|
||||
|
||||
|
||||
class ConfigurationManager:
|
||||
"""
|
||||
Application wide configuration manager
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Create a config parser and load config from environment.
|
||||
"""
|
||||
# create config parser
|
||||
self.config = RawConfigParser()
|
||||
self.config.read(CONFIG_PATH)
|
||||
|
||||
def get(self, section, name):
|
||||
"""
|
||||
Load parameter ``name`` from configuration, respecting priority order.
|
||||
Most of the time, ``section`` will correspond to the current api
|
||||
``endpoint``. ``default`` section only contains ``endpoint`` and general
|
||||
configuration.
|
||||
|
||||
:param str section: configuration section or region name. Ignored when
|
||||
looking in environment
|
||||
:param str name: configuration parameter to lookup
|
||||
"""
|
||||
# 1/ try env
|
||||
try:
|
||||
return os.environ["OVH_" + name.upper()]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
# 2/ try from specified section/endpoint
|
||||
try:
|
||||
return self.config.get(section, name)
|
||||
except (NoSectionError, NoOptionError):
|
||||
pass
|
||||
|
||||
# not found, sorry
|
||||
return None
|
||||
|
||||
def read(self, config_file):
|
||||
# Read an other config file
|
||||
self.config.read(config_file)
|
||||
|
||||
|
||||
#: System wide instance :py:class:`ConfigurationManager` instance
|
||||
config = ConfigurationManager()
|
||||
Reference in New Issue
Block a user