pulumi/sdk/python
Justin Van Patten 3027d01f25
Enable output values by default (#8014)
* Enable output values by default

Enable output values by default in the resource monitor and change the polarity of the envvar from `PULUMI_ENABLE_OUTPUT_VALUES` to `PULUMI_DISABLE_OUTPUT_VALUES`.

* Marshal unknown as unknown string when `!KeepOutputValues`

Marshal all unknown output values as `resource.MakeComputed(resource.NewStringProperty(""))` when not keeping output values, which is consistent with what the SDKs do.

Otherwise, when `v.OutputValue().Element` is nil, `resource.MakeComputed(v.OutputValue().Element)` will be marshaled as a null value rather than as an unknown sentinel.

* Add MarshalOptions.DontSkipOutputs and use where needed

Before we expanded the meaning of `resource.Output`, `MarshalProperties` always skipped output values:

```go
if v.IsOutput() {
    logging.V(9).Infof("Skipping output property for RPC[%s]: %v", opts.Label, key)
}
```

As part of expanding the meaning of `resource.Output`, I'd adjusted `MarshalProperties` to only skip output values when the value was unknown and when not keeping output values:

```go
if v.IsOutput() && !v.OutputValue().Known && !opts.KeepOutputValues {
    logging.V(9).Infof("Skipping output property for RPC[%s]: %v", opts.Label, key)
}
```

However, this doesn't work the way we want when marshaling properties that include unknown output values to a provider that does not accept outputs. In that case, `opts.KeepOutputValues` will be `false` because we want the marshaler to fall back to returning non-output-values (e.g. unknown sentinel value for unknown output values), but instead of getting the intended fallback values, the unknown output values are skipped (not what we want).

I suspect we may be able to delete the output value skipping in `MarshalProperties` altogether (it's odd that it is skipping `resource.Output` but not `resource.Computed`), but to avoid any unintended side effects of doing that, instead, this commit introduces a new `MarshalOptions.DontSkipOutputs` option that can be set to `true` to opt-in to not skipping output values when marshaling. The check in `MarshalProperties` now looks like this:

```go
if !opts.DontSkipOutputs && v.IsOutput() && !v.OutputValue().Known {
    logging.V(9).Infof("Skipping output property for RPC[%s]: %v", opts.Label, key)
}
```

`opts.DontSkipOutputs` is set to `true` when marshaling properties for calls to a provider's `Construct` and `Call`.

* [sdk/nodejs] Deserialize output values

This commit adds support for deserializing output values, which is needed in some cases when serialized inputs are returned as outputs in the SDK.

* [sdk/python] Deserialize output values

This commit adds support for deserializing output values, which is needed in some cases when serialized inputs are returned as outputs in the SDK.
2021-09-24 08:57:04 -07:00
..
cmd Avoid repeatedly invoking `pip show` in Python lang host (#7831) 2021-08-25 11:40:58 -04:00
dist Fix windows build 2020-12-07 15:58:30 -08:00
lib Enable output values by default (#8014) 2021-09-24 08:57:04 -07:00
stubs Fix bug in semver usage by enabling typechecking (#6833) 2021-04-21 15:48:57 -04:00
.gitignore add .venv/ to python .gitignore to ignore when using PIPENV_VENV_IN_PROJECT=1 2019-06-19 12:43:04 -07:00
.pylintrc Support remote components in Python (#5375) 2020-09-30 14:09:20 -07:00
Makefile [automation-api] Exclude tests from test_fast. (#7986) 2021-09-16 17:33:33 -07:00
Pipfile [automation-api] Exclude tests from test_fast. (#7986) 2021-09-16 17:33:33 -07:00
mypy.ini Fix bug in semver usage by enabling typechecking (#6833) 2021-04-21 15:48:57 -04:00
python.go Include package host version in about 2021-08-20 19:38:51 -07:00
python_test.go Update pip/setuptools/wheel in virtual environment (#5042) 2020-07-23 13:33:09 -07:00
shim_unix.go Fix lint (#7915) 2021-09-07 16:41:17 -04:00
shim_windows.go Add copyright notice 2020-12-07 14:17:45 -08:00