pulumi/tests/integration/types/python/simple/__main__.py
Justin Van Patten cd9fae599d
Python SDK changes to support input/output classes (#5033)
Python SDK changes to support strongly-typed input/output "dataclasses".
2020-08-19 01:15:56 -07:00

62 lines
2.3 KiB
Python

# Copyright 2016-2020, Pulumi Corporation. All rights reserved.
from typing import Optional
from pulumi import Input, InputType, Output, export, input_type, output_type, property
from pulumi.dynamic import Resource, ResourceProvider, CreateResult
@input_type
class AdditionalArgs:
first_value: Input[str] = property("firstValue")
second_value: Optional[Input[float]] = property("secondValue", default=None)
@output_type
class Additional(dict):
first_value: str = property("firstValue")
second_value: Optional[float] = property("secondValue", default=None)
current_id = 0
class MyResourceProvider(ResourceProvider):
def create(self, inputs):
global current_id
current_id += 1
return CreateResult(str(current_id), {"additional": inputs["additional"]})
class MyResource(Resource):
additional: Output[Additional]
def __init__(self, name: str, additional: InputType[AdditionalArgs]):
super().__init__(MyResourceProvider(), name, {"additional": additional})
# Create a resource with input object.
res = MyResource("testres", additional=AdditionalArgs(first_value="hello", second_value=42))
# Create a resource using the output object of another resource.
res2 = MyResource("testres2", additional=AdditionalArgs(
first_value=res.additional.first_value,
second_value=res.additional.second_value))
# Create a resource using the output object of another resource, accessing the output as a dict.
res3 = MyResource("testres3", additional=AdditionalArgs(
first_value=res.additional["first_value"],
second_value=res.additional["second_value"]))
# Create a resource using a dict as the input.
# Note: These are camel case (not snake_case) since the resource does not do any translation of
# property names.
res4 = MyResource("testres4", additional={
"firstValue": "hello",
"secondValue": 42,
})
export("res_first_value", res.additional.first_value)
export("res_second_value", res.additional.second_value)
export("res2_first_value", res2.additional.first_value)
export("res2_second_value", res2.additional.second_value)
export("res3_first_value", res3.additional.first_value)
export("res3_second_value", res3.additional.second_value)
export("res4_first_value", res4.additional.first_value)
export("res4_second_value", res4.additional.second_value)