Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
1fb2ae7
Provide support for reading a single parameter value from file
johanste Aug 24, 2016
f628853
Fix accidentally deleted space (which made pylint angry)
johanste Aug 24, 2016
007eefa
enable diagnostics and extensions in vmss profile (#737)
BurtBiel Aug 24, 2016
d3403dc
Expose generic update parameters on existing custom updates (#735)
tjprescott Aug 24, 2016
eabe4e8
Remove inline CliArgumentType(...) registrations (#744)
tjprescott Aug 24, 2016
f06c94f
Add NAT Rules to VMSS create that allow SSH/RDP by default (#743)
BurtBiel Aug 24, 2016
c00b7c1
Update regular expression to fix issue #147 (#747)
tjprescott Aug 25, 2016
bd4fe82
Support colored output on Windows (#756)
derekbekoe Aug 25, 2016
18a48e6
[Help] Help Fixes and Enhancements (#736)
tjprescott Aug 25, 2016
31bee99
Fix folded parameter logic to make new optional. Update existing uses…
tjprescott Aug 26, 2016
90c65f0
Treat CloudError like a CLIError (don't print stack trace) (#759)
tjprescott Aug 26, 2016
7e2b7f8
'az configure' experience (default output format) (#739)
derekbekoe Aug 26, 2016
975904d
Table format revisions (#748)
derekbekoe Aug 26, 2016
8000d63
Remove 'starting' message for long running operations (#767)
derekbekoe Aug 26, 2016
df80c14
Catch EOF to minimize stack trace craziness. (#768)
tjprescott Aug 26, 2016
154c701
Change simple_output_query to be table_transformer (#771)
derekbekoe Aug 26, 2016
2eb14a3
[Resource] Resource Tag Fix (issue 763) (#765)
tjprescott Aug 27, 2016
6a2b2a3
Only delete certain files in yml output folder during Document CI (#762)
formulahendry Aug 29, 2016
1a53b14
Update README Docker instructions. (#776)
tjprescott Aug 29, 2016
a7a8234
Fixes #772 (#779)
derekbekoe Aug 29, 2016
a0f1f85
Handle BrokenPipeError (#775)
tjprescott Aug 29, 2016
4d52914
update a few command descriptions (#781)
yugangw-msft Aug 29, 2016
7faaaf5
VM issue: fix #749, #753, #575 (#778)
yugangw-msft Aug 29, 2016
451fede
Add commands for Azure IoT (#730)
xscript Aug 30, 2016
13fbf8f
[Document CI] Handle Robocopy exit code (#786)
formulahendry Aug 30, 2016
ab63040
Generic Update enhancements. (#740)
tjprescott Aug 30, 2016
e4727d8
Fix Error if Non-existent Storage Account Specified (#787)
tjprescott Aug 30, 2016
30a6e2f
vm: enable autoUpgradeMinorVersion by default (#791)
yugangw-msft Aug 30, 2016
2eeb87a
cmd: use plurals for list-* command naming (#792)
yugangw-msft Aug 30, 2016
1e3d164
Ensure docstring help with unrecognized unicode characters still disp…
tjprescott Aug 30, 2016
88ae64b
Provide support for reading a single parameter value from file
johanste Aug 24, 2016
8519dde
Fix accidentally deleted space (which made pylint angry)
johanste Aug 24, 2016
e4dd3ba
Merge upstream
johanste Aug 31, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Then:

Alternatively:
+ Run :code:`docker pull azuresdk/azure-cli-python:latest`
+ Run :code:`alias az='docker run --rm -v ~/.azure:/root/.azure azuresdk/azure-cli-python az'`
+ Run :code:`alias az='docker run --rm -i -t -v ~/.azure:/root/.azure azuresdk/azure-cli-python az'`
+ Then run :code:`az` as normal. e.g. :code:`az account login`

Usage
Expand Down
4 changes: 2 additions & 2 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ on_success:
- git config --global user.email "%GIT_USER_EMAIL%"
- git config --global user.name "%GIT_USER_NAME%"
- git clone --depth 5 -q --branch=%TARGET_BRANCH% %GIT_CONTENT_REPO_URL% %TEMP%\azure-cli-content
- if exist %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER% ((cd %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER%) & (del %FILES_TO_DELETE% /f /q) & (for /d %%p IN (*) do rmdir "%%p" /s /q))
- cd %TEMP%\azure-cli-content
- if exist %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER% rmdir /s /q %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER%
- SETLOCAL EnableDelayedExpansion & robocopy %TEMP%\azure-cli-xml2yml\yml-output %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER% /e & IF !ERRORLEVEL! EQU 1 (exit 0) ELSE (exit 1)
- SETLOCAL EnableDelayedExpansion & robocopy %TEMP%\azure-cli-xml2yml\yml-output %TEMP%\azure-cli-content\%YML_OUTPUT_FOLDER% /e & IF !ERRORLEVEL! EQU 1 (exit 0) ELSE (IF !ERRORLEVEL! EQU 3 (exit 0) ELSE (exit 1))
- git add -A
- git diff --quiet --exit-code --cached || git commit -m "Update Document Content" && git push origin %TARGET_BRANCH% && appveyor AddMessage "Document Updated"
91 changes: 91 additions & 0 deletions azure-cli.pyproj
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,73 @@
<Compile Include="command_modules\azure-cli-feedback\azure\__init__.py" />
<Compile Include="command_modules\azure-cli-feedback\setup.py" />
<Compile Include="azure\cli\utils\vcr_test_base.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\custom.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\generated.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\credentials.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\exceptions.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\iot_hub_client.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\cloud_to_device_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\error_details.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\event_hub_consumer_group_info.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\event_hub_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\export_devices_request.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\feedback_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\import_devices_request.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_capacity.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_client_enums.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_description.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_description_paged.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_name_availability_info.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_quota_metric_info.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_quota_metric_info_paged.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_sku_description.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_sku_description_paged.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\iot_hub_sku_info.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\job_response.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\job_response_paged.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\messaging_endpoint_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\operations_monitoring_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\operation_inputs.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\registry_statistics.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\resource.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\shared_access_authorization_rule.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\shared_access_signature_authorization_rule.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\shared_access_signature_authorization_rule_list_result.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\storage_endpoint_properties.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\str_paged.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\operations\iot_hub_resource_operations.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\operations\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\version.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\credentials.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\exceptions.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\iot_hub_device_client.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\authentication.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\create_device_request.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\device_description.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\error_details.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\symmetric_key.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\operations\iot_hub_devices_operations.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\operations\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\version.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\sas_token_auth.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\test_iot_commands.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\test_sas_token_auth.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\_factory.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\_help.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\_params.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\command_modules\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\cli\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\azure\__init__.py" />
<Compile Include="command_modules\azure-cli-iot\setup.py" />
<Compile Include="command_modules\azure-cli-keyvault\azure\cli\command_modules\keyvault\custom.py" />
<Compile Include="command_modules\azure-cli-keyvault\azure\cli\command_modules\keyvault\generated.py" />
<Compile Include="command_modules\azure-cli-keyvault\azure\cli\command_modules\keyvault\tests\test_keyvault_commands.py" />
Expand Down Expand Up @@ -635,6 +702,21 @@
<Folder Include="command_modules\azure-cli-feedback\azure\cli\" />
<Folder Include="command_modules\azure-cli-feedback\azure\cli\command_modules\" />
<Folder Include="command_modules\azure-cli-feedback\azure\cli\command_modules\feedback\" />
<Folder Include="command_modules\azure-cli-iot\" />
<Folder Include="command_modules\azure-cli-iot\azure\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\models\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\lib\operations\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\models\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\lib\operations\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\" />
<Folder Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\recordings\" />
<Folder Include="command_modules\azure-cli-keyvault\" />
<Folder Include="command_modules\azure-cli-keyvault\azure\" />
<Folder Include="command_modules\azure-cli-keyvault\azure\cli\" />
Expand Down Expand Up @@ -758,6 +840,7 @@
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\lib\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\lib\models\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\lib\operations\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\nested_templates\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vm\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vm\lib\" />
<Folder Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vm\lib\models\" />
Expand All @@ -779,6 +862,12 @@
</ItemGroup>
<ItemGroup>
<Content Include="command_modules\azure-cli-component\requirements.txt" />
<Content Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub\swagger_iot_hub_resource_provider.json" />
<Content Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\mgmt_iot_hub_device\swagger_iot_hub_device_identity.json" />
<Content Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\recordings\test_iot_device_create.yaml" />
<Content Include="command_modules\azure-cli-iot\azure\cli\command_modules\iot\tests\recordings\test_iot_hub_create.yaml" />
<Content Include="command_modules\azure-cli-iot\README.rst" />
<Content Include="command_modules\azure-cli-iot\requirements.txt" />
<Content Include="command_modules\azure-cli-keyvault\azure\cli\command_modules\keyvault\tests\recordings\test_key_vault_mgmt.yaml" />
<Content Include="command_modules\azure-cli-keyvault\azure\cli\command_modules\keyvault\tests\__pycache__\test_keyvault_commands.cpython-35.pyc" />
<Content Include="command_modules\azure-cli-keyvault\README.rst" />
Expand Down Expand Up @@ -846,6 +935,8 @@
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_avail_set\swagger_create_avail_set.json" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\azuredeploy.json" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\azuredeploy_test.md" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\nested_templates\nat_rules_new.json" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\nested_templates\nat_rules_none.json" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vm\azuredeploy_test.md" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vmss\swagger_create_vmss.json" />
<Content Include="command_modules\azure-cli-vm\azure\cli\command_modules\vm\mgmt_vm\azuredeploy.json" />
Expand Down
6 changes: 3 additions & 3 deletions doc/authoring_command_modules/authoring_commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ from azure.cli.commands import cli_command

The signature of this method is
```Python
def cli_command(name, operation, client_factory=None, transform=None, simple_output_query=None):
def cli_command(name, operation, client_factory=None, transform=None, table_transformer=None):
```
You will generally only specify `name`, `operation` and possibly `simple_output_query`.
You will generally only specify `name`, `operation` and possibly `table_transformer`.
- `name` - String uniquely naming your command and placing it within the command hierachy. It will be the string that you would type at the command line, omitting `az` (ex: access your command at `az mypackage mycommand` using a name of `mypackage mycommand`).
- `operation` - Your function's name.
- `simple_output_query` (optional) - Supply a JMESPath projection string to enable the table output type for your command. This is most applicable to list-type commands. See www.jmespath.org for guidance on creating JMESPath queries. Alternatively, you can supply a callable that takes, transforms and returns a result. This is appropriate when the structure of the server response makes JMESPath querying difficult.
- `table_transformer` (optional) - Supply a callable that takes, transforms and returns a result for table output.

At this point, you should be able to access your command using `az [name]` and access the built-in help with `az [name] -h/--help`. Your command will automatically be 'wired up' with the global parameters.

Expand Down
4 changes: 3 additions & 1 deletion doc/preview_instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@ The Project AZ team is excited to offer a preview build for members of the GitHu
Installation via CURL
-----------------

To install via cURL on Linux, Unix and OS X, type:
To install via cURL on Linux and OS X, type:

curl -L https://aka.ms/ProjectAzInstall | bash

If you chose to enable tab completion, type `exec -l $SHELL` to restart your shell.

Note: This will install the latest verified nightly builds. You may re-run this script later to safely update to the latest version.

For more detailed information on installing the preview, please visit the [Preview Install Guide](https://github.com/Azure/azure-cli/blob/master/doc/preview_install_guide.md) page.

Example Demo Script
-------------------

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ pylint==1.5.4
pyyaml==3.11
requests==2.9.1
six==1.10.0
tabulate==0.7.5
vcrpy==1.7.4
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
'pyyaml',
'requests',
'six',
'tabulate',
]

if sys.version_info < (3, 4):
Expand Down
55 changes: 55 additions & 0 deletions src/azure/cli/_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#---------------------------------------------------------------------------------------------
import os
from six.moves import configparser

GLOBAL_CONFIG_PATH = os.path.expanduser(os.path.join('~', '.azure', 'config'))
ACTIVE_ENV_CONFIG_PATH = os.path.expanduser(os.path.join('~', '.azure', 'env_config', 'default'))
ENV_VAR_PREFIX = 'AZURE_'

_UNSET = object()
_ENV_VAR_FORMAT = ENV_VAR_PREFIX+'{section}_{option}'

class AzConfig(object):
_BOOLEAN_STATES = {'1': True, 'yes': True, 'true': True, 'on': True,
'0': False, 'no': False, 'false': False, 'off': False}

def __init__(self):
self.config_parser = configparser.SafeConfigParser()

@staticmethod
def env_var_name(section, option):
return _ENV_VAR_FORMAT.format(section=section.upper(),
option=option.upper())

def has_option(self, section, option):
if AzConfig.env_var_name(section, option) in os.environ:
return True
return self.config_parser.has_option(section, option)

def get(self, section, option, fallback=_UNSET):
try:
env = AzConfig.env_var_name(section, option)
return os.environ[env] if env in os.environ else self.config_parser.get(section, option)
except (configparser.NoSectionError, configparser.NoOptionError):
if fallback is _UNSET:
raise
else:
return fallback

def getint(self, section, option, fallback=_UNSET):
return int(self.get(section, option, fallback))

def getfloat(self, section, option, fallback=_UNSET):
return float(self.get(section, option, fallback))

def getboolean(self, section, option, fallback=_UNSET):
val = self.get(section, option, fallback)
if val.lower() not in AzConfig._BOOLEAN_STATES: #pylint: disable=E1101
raise ValueError('Not a boolean: {}'.format(val))
return AzConfig._BOOLEAN_STATES[val.lower()] #pylint: disable=E1101

az_config = AzConfig()
az_config.config_parser.read([GLOBAL_CONFIG_PATH, ACTIVE_ENV_CONFIG_PATH])
Loading