diff --git a/autorest/code_generator.py b/autorest/code_generator.py index a4a1c0674b1..acd149d178a 100644 --- a/autorest/code_generator.py +++ b/autorest/code_generator.py @@ -273,7 +273,15 @@ def process(self) -> bool: # convert the names to python names NameConverter.convert_yaml_names(yaml_code_model) - options = {'azure_arm': azure_arm, 'credential': azure_arm or self._autorestapi.get_boolean_value("add-credentials") or self._autorestapi.get_boolean_value('add-credential')} + credential_scopes = self._autorestapi.get_value('credential-scopes') + if not credential_scopes and azure_arm: + credential_scopes = "https://management.azure.com/.default" + + options = { + 'azure_arm': azure_arm, + 'credential': azure_arm or self._autorestapi.get_boolean_value("add-credentials") or self._autorestapi.get_boolean_value('add-credential'), + "credential_scopes": credential_scopes.split(",") if credential_scopes else None + } # save a new copy for debug #self._autorestapi.write_file("code-model-v4-no-tags-python.yaml", yaml.safe_dump(yaml_code_model)) @@ -312,4 +320,4 @@ def main(yaml_model_file): raise SystemExit("Process didn't finish gracefully") if __name__ == "__main__": - main(sys.argv[1]) \ No newline at end of file + main(sys.argv[1]) diff --git a/autorest/templates/config.py.jinja2 b/autorest/templates/config.py.jinja2 index b2404546ad3..eb6290919ca 100644 --- a/autorest/templates/config.py.jinja2 +++ b/autorest/templates/config.py.jinja2 @@ -1,6 +1,7 @@ {% set version_import = ".._version" if async_mode else "._version" %} {% set async_prefix = "Async" if async_mode else "" %} {% set method_signature = code_model.global_parameters|join(', ', attribute='serialized_name') ~ (", " if code_model.global_parameters else "") %} +{% set credential_scopes = "*self.credential_scopes, " if code_model.options['credential_scopes'] else "" %} {# actual template starts here #} # coding=utf-8 # -------------------------------------------------------------------------- @@ -42,6 +43,9 @@ class {{ code_model.class_name }}Configuration(Configuration): {% for parameter in code_model.global_parameters %} self.{{ parameter.serialized_name }} = {{ parameter.serialized_name }} {% endfor %} + {% if code_model.options['credential_scopes'] %} + self.credential_scopes = {{ code_model.options['credential_scopes'] }} + {% endif %} self._configure(**kwargs) self.user_agent_policy.add_user_agent('azsdk-python-{{ code_model.class_name|lower }}/{}'.format(VERSION)) @@ -60,5 +64,5 @@ class {{ code_model.class_name }}Configuration(Configuration): self.authentication_policy = kwargs.get('authentication_policy') {% if code_model.options['credential'] %} if self.credential and not self.authentication_policy: - self.authentication_policy = policies.{{ async_prefix }}BearerTokenCredentialPolicy(self.credential, **kwargs) + self.authentication_policy = policies.{{ async_prefix }}BearerTokenCredentialPolicy(self.credential, {{ credential_scopes }}**kwargs) {% endif %}