Server IP : 85.214.239.14 / Your IP : 18.190.253.224 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /srv/modoboa/env/lib/python3.5/site-packages/ovh/ |
Upload File : |
# -*- encoding: utf-8 -*- # # Copyright (c) 2013-2018, 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 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. """ import os try: from ConfigParser import RawConfigParser, NoSectionError, NoOptionError except ImportError: # pragma: no cover # Python 3 from configparser import RawConfigParser, NoSectionError, NoOptionError __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(object): ''' 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()