示例#1
0
def _reload_config():
    if before_2_0_64:
        cli_ctx.config.config_parser.read(GLOBAL_CONFIG_PATH)
        return cli_ctx.config
    else:
        return CLIConfig(config_dir=GLOBAL_CONFIG_DIR,
                         config_env_var_prefix=ENV_VAR_PREFIX)
示例#2
0
文件: azure.py 项目: zang3tsu/dvc
    def _az_config(self):
        # NOTE: ideally we would've used get_default_cli().config from
        # azure.cli.core, but azure-cli-core has a lot of conflicts with other
        # dependencies. So instead we are just use knack directly
        from knack.config import CLIConfig

        config_dir = os.getenv("AZURE_CONFIG_DIR",
                               os.path.expanduser(os.path.join("~", ".azure")))
        return CLIConfig(config_dir=config_dir, config_env_var_prefix="AZURE")
示例#3
0
def get_state_path():
    """
    Returns the path of where the state file of sfctl is stored.
    :return: str
    """

    # This is the same as
    # self.config_path = os.path.join(self.config_dir, CLIConfig._CONFIG_FILE_NAME)
    return CLIConfig(SF_CLI_STATE_DIR, SF_CLI_NAME, 'state').config_path
示例#4
0
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import os
import traceback
import json
import re
import sys
import pkginfo

from azure.cli.core._config import GLOBAL_CONFIG_DIR, ENV_VAR_PREFIX
from distutils.sysconfig import get_python_lib
from knack.config import CLIConfig
from knack.log import get_logger

az_config = CLIConfig(config_dir=GLOBAL_CONFIG_DIR,
                      config_env_var_prefix=ENV_VAR_PREFIX)
_CUSTOM_EXT_DIR = az_config.get('extension', 'dir', None)
_DEV_EXTENSION_SOURCES = az_config.get('extension', 'dev_sources', None)
EXTENSIONS_DIR = os.path.expanduser(
    _CUSTOM_EXT_DIR) if _CUSTOM_EXT_DIR else os.path.join(
        GLOBAL_CONFIG_DIR, 'cliextensions')
DEV_EXTENSION_SOURCES = _DEV_EXTENSION_SOURCES.split(
    ',') if _DEV_EXTENSION_SOURCES else []
EXTENSIONS_SYS_DIR = os.path.join(
    get_python_lib(),
    'azure-cli-extensions') if sys.platform.startswith('linux') else ""

EXTENSIONS_MOD_PREFIX = 'azext_'

WHL_METADATA_FILENAME = 'metadata.json'
EGG_INFO_METADATA_FILE_NAME = 'PKG-INFO'  # used for dev packages
示例#5
0
def set_config_value(name, value):
    """Set a config by name to a value."""

    cli_config = CLIConfig(SF_CLI_CONFIG_DIR, SF_CLI_ENV_VAR_PREFIX)
    cli_config.set_value('servicefabric', name, value)
示例#6
0
def get_config_bool(name):
    """Checks if a config value is set to a valid bool value."""

    cli_config = CLIConfig(SF_CLI_CONFIG_DIR, SF_CLI_ENV_VAR_PREFIX)
    return cli_config.getboolean('servicefabric', name, False)
示例#7
0
class TestCLIConfig(unittest.TestCase):
    def setUp(self):
        self.cli_config = CLIConfig(config_dir=new_temp_folder())
        # In case the previous test is stopped and doesn't clean up
        clean_local_temp_folder()

    def tearDown(self):
        clean_local_temp_folder()

    def test_has_option(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env(self):
        with mock.patch.dict(
                'os.environ',
            {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'
             }):
            section = 'MySection'
            option = 'myoption'
            self.assertTrue(self.cli_config.has_option(section, option))
            self.cli_config.set_to_use_local_config(True)
            self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env_no(self):
        section = 'MySection'
        option = 'myoption'
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertFalse(self.cli_config.has_option(section, option))

    def test_get(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_env(self):
        with mock.patch.dict(
                'os.environ',
            {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'
             }):
            section = 'MySection'
            option = 'myoption'
            value = 'myvalue'
            self.assertEqual(self.cli_config.get(section, option), value)
            self.cli_config.set_to_use_local_config(True)
            self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_not_found_section(self):
        section = 'MySection'
        option = 'myoption'
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)

    def test_get_not_found_option(self):
        section = 'MySection'
        option = 'myoption'
        option_other = 'option'
        value = 'myvalue'
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)

    def test_get_fallback(self):
        section = 'MySection'
        option = 'myoption'
        self.assertEqual(
            self.cli_config.get(section, option, fallback='fallback'),
            'fallback')
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(
            self.cli_config.get(section, option, fallback='fallback'),
            'fallback')

    def test_getint(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getint_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_an_int'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)

    def test_getfloat(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))

    def test_getfloat_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_float'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)

    def test_getboolean(self):
        section = 'MySection'
        option = 'myoption'
        value = 'true'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.getboolean(section, option))

    def test_getboolean_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_boolean'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)

    def test_items(self):
        file_section = "MySection"
        file_value = 'file_value'
        env_value = 'env_value'

        # Test file-only options are listed
        file_only_option = 'file_only_option'
        self.cli_config.set_value(file_section, file_only_option, file_value)
        items_result = self.cli_config.items(file_section)
        self.assertEqual(len(items_result), 1)
        self.assertEqual(items_result[0]['name'], file_only_option)
        self.assertEqual(items_result[0]['value'], file_value)
        self.cli_config.remove_option(file_section, file_only_option)

        # Test env-only options are listed
        with mock.patch.dict('os.environ',
                             {'CLI_MYSECTION_ENV_ONLY_OPTION': env_value}):
            items_result = self.cli_config.items(file_section)
            self.assertEqual(len(items_result), 1)
            self.assertEqual(items_result[0]['name'], 'env_only_option')
            self.assertEqual(items_result[0]['value'], env_value)

        # Test file options are overridden by env options, for both single-word and multi-word options
        test_options = [
            # file_option, file_value, env_name, env_value
            # Test single-word option
            ('optionsingle', 'file_value_single', 'CLI_MYSECTION_OPTIONSINGLE',
             'env_value_single'),
            # Test multi-word option
            ('option_multiple', 'file_value_multiple',
             'CLI_MYSECTION_OPTION_MULTIPLE', 'env_value_multiple')
        ]
        for file_option, file_value, env_name, env_value in test_options:
            self.cli_config.set_value(file_section, file_option, file_value)
            items_result = self.cli_config.items(file_section)
            self.assertEqual(len(items_result), 1)
            self.assertEqual(items_result[0]['value'], file_value)

            with mock.patch.dict('os.environ', {env_name: env_value}):
                items_result = self.cli_config.items(file_section)
                self.assertEqual(len(items_result), 1)
                self.assertEqual(items_result[0]['value'], env_value)

            self.cli_config.remove_option(file_section, file_option)

        # Test Invalid_Env_Var is not accepted on Linux
        # Windows' env var is case-insensitive, so skip
        import platform
        if platform.system() != 'Windows':
            # Not shown
            with mock.patch.dict('os.environ',
                                 {'CLI_MYSECTION_Test_Option': env_value}):
                items_result = self.cli_config.items(file_section)
                self.assertEqual(len(items_result), 0)

            # No overriding
            self.cli_config.set_value(file_section, 'test_option', file_value)
            with mock.patch.dict('os.environ',
                                 {'CLI_MYSECTION_Test_Option': env_value}):
                items_result = self.cli_config.items(file_section)
                self.assertEqual(len(items_result), 1)
                self.assertEqual(items_result[0]['value'], file_value)

    def test_set_config_value(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        config = configparser.ConfigParser()
        config.read(self.cli_config.config_path)
        self.assertEqual(config.get('test_section', 'test_option'), 'a_value')

    def test_set_config_value_duplicate_section_ok(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')

    def test_set_config_value_not_string(self):
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)

    def test_set_config_value_file_permissions(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        file_mode = os.stat(self.cli_config.config_path).st_mode
        self.assertTrue(bool(file_mode & stat.S_IRUSR))
        self.assertTrue(bool(file_mode & stat.S_IWUSR))
        # only S_IRUSR and S_IWUSR are supported on Windows: https://docs.python.org/3.8/library/os.html#os.chmod
        if os.name != 'nt':
            self.assertFalse(bool(file_mode & stat.S_IXUSR))
            self.assertFalse(bool(file_mode & stat.S_IRGRP))
            self.assertFalse(bool(file_mode & stat.S_IWGRP))
            self.assertFalse(bool(file_mode & stat.S_IXGRP))
            self.assertFalse(bool(file_mode & stat.S_IROTH))
            self.assertFalse(bool(file_mode & stat.S_IWOTH))
            self.assertFalse(bool(file_mode & stat.S_IXOTH))

    def test_has_option_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_get_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        local_value = 'localvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.get(section, option), local_value)
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_getint_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        local_value = '1234'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getint(section, option),
                         int(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getfloat_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        local_value = '1234.56'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))

    def test_getboolean_local(self):
        section = 'MySection'
        option = 'myoption'
        local_value = 'true'
        value = 'false'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertFalse(self.cli_config.getboolean(section, option))

    def test_set_config_value_duplicate_section_ok_local(self):
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(
            self.cli_config.has_option('test_section', 'test_option'))
        self.assertFalse(
            self.cli_config.has_option('test_section', 'test_option_another'))
示例#8
0
def get_azure_config():
    return CLIConfig(config_dir=get_azure_config_dir(), config_env_var_prefix='AZURE')
示例#9
0
 def setUp(self):
     self.cli_config = CLIConfig(config_dir=tempfile.mkdtemp())
示例#10
0
class TestCLIConfig(unittest.TestCase):

    def setUp(self):
        self.cli_config = CLIConfig(config_dir=tempfile.mkdtemp())

    def test_has_option(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env(self):
        with mock.patch.dict('os.environ', {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'}):
            section = 'MySection'
            option = 'myoption'
            self.assertTrue(self.cli_config.has_option(section, option))
            self.cli_config.set_to_use_local_config(True)
            self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env_no(self):
        section = 'MySection'
        option = 'myoption'
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertFalse(self.cli_config.has_option(section, option))

    def test_get(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_env(self):
        with mock.patch.dict('os.environ', {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'}):
            section = 'MySection'
            option = 'myoption'
            value = 'myvalue'
            self.assertEqual(self.cli_config.get(section, option), value)
            self.cli_config.set_to_use_local_config(True)
            self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_not_found_section(self):
        section = 'MySection'
        option = 'myoption'
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)

    def test_get_not_found_option(self):
        section = 'MySection'
        option = 'myoption'
        option_other = 'option'
        value = 'myvalue'
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)

    def test_get_fallback(self):
        section = 'MySection'
        option = 'myoption'
        self.assertEqual(self.cli_config.get(section, option, fallback='fallback'), 'fallback')
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.get(section, option, fallback='fallback'), 'fallback')

    def test_getint(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getint_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_an_int'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)

    def test_getfloat(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option), float(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getfloat(section, option), float(value))

    def test_getfloat_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_float'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)

    def test_getboolean(self):
        section = 'MySection'
        option = 'myoption'
        value = 'true'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.getboolean(section, option))

    def test_getboolean_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_boolean'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)

    def test_set_config_value(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        config = get_config_parser()
        config.read(self.cli_config.config_path)
        self.assertEqual(config.get('test_section', 'test_option'), 'a_value')

    def test_set_config_value_duplicate_section_ok(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another', 'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'), 'a_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option_another'), 'another_value')
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another', 'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'), 'a_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option_another'), 'another_value')

    def test_set_config_value_not_string(self):
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)

    def test_set_config_value_file_permissions(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        file_mode = os.stat(self.cli_config.config_path).st_mode
        self.assertTrue(bool(file_mode & stat.S_IRUSR))
        self.assertTrue(bool(file_mode & stat.S_IWUSR))
        self.assertFalse(bool(file_mode & stat.S_IXUSR))
        self.assertFalse(bool(file_mode & stat.S_IRGRP))
        self.assertFalse(bool(file_mode & stat.S_IWGRP))
        self.assertFalse(bool(file_mode & stat.S_IXGRP))
        self.assertFalse(bool(file_mode & stat.S_IROTH))
        self.assertFalse(bool(file_mode & stat.S_IWOTH))
        self.assertFalse(bool(file_mode & stat.S_IXOTH))

    def test_has_option_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_get_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        local_value = 'localvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.get(section, option), local_value)
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_getint_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        local_value = '1234'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getint(section, option), int(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getfloat_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        local_value = '1234.56'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getfloat(section, option), float(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option), float(value))

    def test_getboolean_local(self):
        section = 'MySection'
        option = 'myoption'
        local_value = 'true'
        value = 'false'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertFalse(self.cli_config.getboolean(section, option))

    def test_set_config_value_duplicate_section_ok_local(self):
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another', 'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'), 'a_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option_another'), 'another_value')
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option('test_section', 'test_option'))
        self.assertFalse(self.cli_config.has_option('test_section', 'test_option_another'))
示例#11
0
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import os
import traceback
import json
import re

from azure.cli.core._config import GLOBAL_CONFIG_DIR, ENV_VAR_PREFIX

from knack.config import CLIConfig
from knack.log import get_logger

az_config = CLIConfig(config_dir=GLOBAL_CONFIG_DIR, config_env_var_prefix=ENV_VAR_PREFIX)
_CUSTOM_EXT_DIR = az_config.get('extension', 'dir', None)
_DEV_EXTENSION_SOURCES = az_config.get('extension', 'dev_sources', None)
EXTENSIONS_DIR = os.path.expanduser(_CUSTOM_EXT_DIR) if _CUSTOM_EXT_DIR else os.path.join(GLOBAL_CONFIG_DIR,
                                                                                          'cliextensions')
DEV_EXTENSION_SOURCES = _DEV_EXTENSION_SOURCES.split(',') if _DEV_EXTENSION_SOURCES else []

EXTENSIONS_MOD_PREFIX = 'azext_'

WHL_METADATA_FILENAME = 'metadata.json'
EGG_INFO_METADATA_FILE_NAME = 'PKG-INFO'  # used for dev packages
AZEXT_METADATA_FILENAME = 'azext_metadata.json'

EXT_METADATA_MINCLICOREVERSION = 'azext.minCliCoreVersion'
EXT_METADATA_MAXCLICOREVERSION = 'azext.maxCliCoreVersion'
EXT_METADATA_ISPREVIEW = 'azext.isPreview'
示例#12
0
# --------------------------------------------------------------------------------------------

import random
import os
from knack.config import CLIConfig
from azure.cli.core.commands import LongRunningOperation, _is_poller

CONFIG_DIR = os.path.expanduser(os.path.join('~', '.azext_db_up'))
ENV_VAR_PREFIX = 'AZEXT'
MYSQL_CONFIG_SECTION = 'mysql_up'
POSTGRES_CONFIG_SECTION = 'postgres_up'
CONFIG_MAP = {
    'mysql': MYSQL_CONFIG_SECTION,
    'postgres': POSTGRES_CONFIG_SECTION
}
DB_CONFIG = CLIConfig(config_dir=CONFIG_DIR,
                      config_env_var_prefix=ENV_VAR_PREFIX)


def create_random_resource_name(prefix='azure', length=15):
    append_length = length - len(prefix)
    digits = [str(random.randrange(10)) for i in range(append_length)]
    return prefix + ''.join(digits)


def get_config_value(db_type, option, fallback='_fallback_none'):
    config_section = CONFIG_MAP[db_type]
    if fallback == '_fallback_none':
        return DB_CONFIG.get(config_section, option)
    return DB_CONFIG.get(config_section, option, fallback=fallback)

示例#13
0
from azure.cli.command_modules.iot.mgmt_iot_hub_device.lib.iot_hub_device_client import IotHubDeviceClient
from azure.cli.command_modules.iot.mgmt_iot_hub_device.lib.models.authentication import Authentication
from azure.cli.command_modules.iot.mgmt_iot_hub_device.lib.models.device_description import DeviceDescription
from azure.cli.command_modules.iot.mgmt_iot_hub_device.lib.models.x509_thumbprint import X509Thumbprint
from azure.cli.command_modules.iot.sas_token_auth import SasTokenAuthentication
from azure.cli.core.extension import extension_exists
from azure.cli.core._environment import get_config_dir

from ._client_factory import resource_service_factory
from ._utils import create_self_signed_certificate, open_certificate

logger = get_logger(__name__)

# IoT Extension run once awareness
if not extension_exists('azure_cli_iot_ext'):
    config = CLIConfig(get_config_dir())
    ran_before = config.getboolean('iot', 'first_run', fallback=False)
    if not ran_before:
        extension_text = """
                         Comprehensive IoT data-plane functionality is available
                         in the Azure IoT CLI Extension. For more info and install guide
                         go to https://github.com/Azure/azure-iot-cli-extension
                         """
        logger.warning(extension_text)
        config.set_value('iot', 'first_run', 'yes')


# CUSTOM TYPE
class KeyType(Enum):
    primary = 'primary'
    secondary = 'secondary'
示例#14
0
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import os
import traceback
import json

from knack.config import CLIConfig
from knack.log import get_logger

from azure.cli.core._config import GLOBAL_CONFIG_DIR, ENV_VAR_PREFIX

az_config = CLIConfig(config_dir=GLOBAL_CONFIG_DIR,
                      config_env_var_prefix=ENV_VAR_PREFIX)
_CUSTOM_EXT_DIR = az_config.get('extension', 'dir', None)
EXTENSIONS_DIR = os.path.expanduser(
    _CUSTOM_EXT_DIR) if _CUSTOM_EXT_DIR else os.path.join(
        GLOBAL_CONFIG_DIR, 'cliextensions')

EXTENSIONS_MOD_PREFIX = 'azext_'

WHL_METADATA_FILENAME = 'metadata.json'
AZEXT_METADATA_FILENAME = 'azext_metadata.json'

EXT_METADATA_MINCLICOREVERSION = 'azext.minCliCoreVersion'
EXT_METADATA_MAXCLICOREVERSION = 'azext.maxCliCoreVersion'
EXT_METADATA_ISPREVIEW = 'azext.isPreview'

logger = get_logger(__name__)
示例#15
0
class TestCLIConfig(unittest.TestCase):
    def setUp(self):
        self.cli_config = CLIConfig(config_dir=new_temp_folder())
        # In case the previous test is stopped and doesn't clean up
        clean_local_temp_folder()

    def tearDown(self):
        clean_local_temp_folder()

    def test_has_option(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env(self):
        with mock.patch.dict(
                'os.environ',
            {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'
             }):
            section = 'MySection'
            option = 'myoption'
            self.assertTrue(self.cli_config.has_option(section, option))
            self.cli_config.set_to_use_local_config(True)
            self.assertTrue(self.cli_config.has_option(section, option))

    def test_has_option_env_no(self):
        section = 'MySection'
        option = 'myoption'
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertFalse(self.cli_config.has_option(section, option))

    def test_get(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_env(self):
        with mock.patch.dict(
                'os.environ',
            {self.cli_config.env_var_name('MySection', 'myoption'): 'myvalue'
             }):
            section = 'MySection'
            option = 'myoption'
            value = 'myvalue'
            self.assertEqual(self.cli_config.get(section, option), value)
            self.cli_config.set_to_use_local_config(True)
            self.assertEqual(self.cli_config.get(section, option), value)

    def test_get_not_found_section(self):
        section = 'MySection'
        option = 'myoption'
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(configparser.NoSectionError):
            self.cli_config.get(section, option)

    def test_get_not_found_option(self):
        section = 'MySection'
        option = 'myoption'
        option_other = 'option'
        value = 'myvalue'
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option_other, value)
        with self.assertRaises(configparser.NoOptionError):
            self.cli_config.get(section, option)

    def test_get_fallback(self):
        section = 'MySection'
        option = 'myoption'
        self.assertEqual(
            self.cli_config.get(section, option, fallback='fallback'),
            'fallback')
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(
            self.cli_config.get(section, option, fallback='fallback'),
            'fallback')

    def test_getint(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getint_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_an_int'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getint(section, option)

    def test_getfloat(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))
        self.cli_config.set_to_use_local_config(True)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))

    def test_getfloat_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_float'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getfloat(section, option)

    def test_getboolean(self):
        section = 'MySection'
        option = 'myoption'
        value = 'true'
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        self.cli_config.set_to_use_local_config(True)
        self.assertTrue(self.cli_config.getboolean(section, option))

    def test_getboolean_error(self):
        section = 'MySection'
        option = 'myoption'
        value = 'not_a_boolean'
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        with self.assertRaises(ValueError):
            self.cli_config.getboolean(section, option)

    def test_set_config_value(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        config = configparser.ConfigParser()
        config.read(self.cli_config.config_path)
        self.assertEqual(config.get('test_section', 'test_option'), 'a_value')

    def test_set_config_value_duplicate_section_ok(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')

    def test_set_config_value_not_string(self):
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)
        self.cli_config.set_to_use_local_config(True)
        with self.assertRaises(TypeError):
            self.cli_config.set_value('test_section', 'test_option', False)

    def test_set_config_value_file_permissions(self):
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        file_mode = os.stat(self.cli_config.config_path).st_mode
        self.assertTrue(bool(file_mode & stat.S_IRUSR))
        self.assertTrue(bool(file_mode & stat.S_IWUSR))
        # only S_IRUSR and S_IWUSR are supported on Windows: https://docs.python.org/3.8/library/os.html#os.chmod
        if os.name != 'nt':
            self.assertFalse(bool(file_mode & stat.S_IXUSR))
            self.assertFalse(bool(file_mode & stat.S_IRGRP))
            self.assertFalse(bool(file_mode & stat.S_IWGRP))
            self.assertFalse(bool(file_mode & stat.S_IXGRP))
            self.assertFalse(bool(file_mode & stat.S_IROTH))
            self.assertFalse(bool(file_mode & stat.S_IWOTH))
            self.assertFalse(bool(file_mode & stat.S_IXOTH))

    def test_has_option_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertTrue(self.cli_config.has_option(section, option))

    def test_get_local(self):
        section = 'MySection'
        option = 'myoption'
        value = 'myvalue'
        local_value = 'localvalue'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.get(section, option), local_value)
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.get(section, option), value)

    def test_getint_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123'
        local_value = '1234'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getint(section, option),
                         int(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getint(section, option), int(value))

    def test_getfloat_local(self):
        section = 'MySection'
        option = 'myoption'
        value = '123.456'
        local_value = '1234.56'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(local_value))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertEqual(self.cli_config.getfloat(section, option),
                         float(value))

    def test_getboolean_local(self):
        section = 'MySection'
        option = 'myoption'
        local_value = 'true'
        value = 'false'
        # check local config
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value(section, option, local_value)
        self.assertTrue(self.cli_config.getboolean(section, option))
        # check default config
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(self.cli_config.has_option(section, option))
        self.cli_config.set_value(section, option, value)
        self.assertFalse(self.cli_config.getboolean(section, option))

    def test_set_config_value_duplicate_section_ok_local(self):
        self.cli_config.set_to_use_local_config(True)
        self.cli_config.set_value('test_section', 'test_option', 'a_value')
        self.cli_config.set_value('test_section', 'test_option_another',
                                  'another_value')
        self.assertEqual(self.cli_config.get('test_section', 'test_option'),
                         'a_value')
        self.assertEqual(
            self.cli_config.get('test_section', 'test_option_another'),
            'another_value')
        self.cli_config.set_to_use_local_config(False)
        self.assertFalse(
            self.cli_config.has_option('test_section', 'test_option'))
        self.assertFalse(
            self.cli_config.has_option('test_section', 'test_option_another'))
示例#16
0
 def setUp(self):
     self.cli_config = CLIConfig(config_dir=new_temp_folder())
     # In case the previous test is stopped and doesn't clean up
     clean_local_temp_folder()
示例#17
0
def get_azdev_config():
    return CLIConfig(config_dir=get_azdev_config_dir(), config_env_var_prefix='AZDEV')