Skip to content

Commit

Permalink
Add function with TypedDict types
Browse files Browse the repository at this point in the history
  • Loading branch information
julienp committed May 6, 2024
1 parent 00e6fa0 commit 7138664
Show file tree
Hide file tree
Showing 6 changed files with 209 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
"pulumi_typedDictExample/_inputs.py",
"pulumi_typedDictExample/_utilities.py",
"pulumi_typedDictExample/component.py",
"pulumi_typedDictExample/my_function.py",
"pulumi_typedDictExample/outputs.py",
"pulumi_typedDictExample/provider.py",
"pulumi_typedDictExample/pulumi-plugin.json",
"pulumi_typedDictExample/py.typed",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import typing
# Export this package's modules as members:
from .component import *
from .my_function import *
from .provider import *
from ._inputs import *
from . import outputs
_utilities.register(
resource_modules="""
[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,57 @@
import pulumi_kubernetes

__all__ = [
'MyType',
'MyTypeDict',
'MyTypeArgs',
'MyTypeArgsDict',
]

class MyTypeDict(TypedDict):
my_prop: str
external_prop: NotRequired['pulumi_kubernetes.core.v1.PodArgs']
my_other_prop: NotRequired[float]

@pulumi.input_type
class MyType:
def __init__(__self__, *,
my_prop: str,
external_prop: Optional['pulumi_kubernetes.core.v1.PodArgs'] = None,
my_other_prop: Optional[float] = None):
pulumi.set(__self__, "my_prop", my_prop)
if external_prop is not None:
pulumi.set(__self__, "external_prop", external_prop)
if my_other_prop is not None:
pulumi.set(__self__, "my_other_prop", my_other_prop)

@property
@pulumi.getter(name="myProp")
def my_prop(self) -> str:
return pulumi.get(self, "my_prop")

@my_prop.setter
def my_prop(self, value: str):
pulumi.set(self, "my_prop", value)

@property
@pulumi.getter(name="externalProp")
def external_prop(self) -> Optional['pulumi_kubernetes.core.v1.PodArgs']:
return pulumi.get(self, "external_prop")

@external_prop.setter
def external_prop(self, value: Optional['pulumi_kubernetes.core.v1.PodArgs']):
pulumi.set(self, "external_prop", value)

@property
@pulumi.getter(name="myOtherProp")
def my_other_prop(self) -> Optional[float]:
return pulumi.get(self, "my_other_prop")

@my_other_prop.setter
def my_other_prop(self, value: Optional[float]):
pulumi.set(self, "my_other_prop", value)


class MyTypeArgsDict(TypedDict):
my_prop: pulumi.Input[str]
external_prop: NotRequired[pulumi.Input['pulumi_kubernetes.core.v1.PodArgs']]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# coding=utf-8
# *** WARNING: this file was generated by test. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
from typing import NotRequired, TypedDict
else:
from typing_extensions import NotRequired, TypedDict
from . import _utilities
from . import outputs
from ._inputs import *
import pulumi_kubernetes

__all__ = [
'MyFunctionResult',
'AwaitableMyFunctionResult',
'my_function',
'my_function_output',
]

@pulumi.output_type
class MyFunctionResult:
def __init__(__self__, my_output=None, simple_output=None):
if my_output and not isinstance(my_output, dict):
raise TypeError("Expected argument 'my_output' to be a dict")
pulumi.set(__self__, "my_output", my_output)
if simple_output and not isinstance(simple_output, str):
raise TypeError("Expected argument 'simple_output' to be a str")
pulumi.set(__self__, "simple_output", simple_output)

@property
@pulumi.getter(name="myOutput")
def my_output(self) -> 'outputs.MyOutputType':
return pulumi.get(self, "my_output")

@property
@pulumi.getter(name="simpleOutput")
def simple_output(self) -> str:
return pulumi.get(self, "simple_output")


class AwaitableMyFunctionResult(MyFunctionResult):
# pylint: disable=using-constant-test
def __await__(self):
if False:
yield self
return MyFunctionResult(
my_output=self.my_output,
simple_output=self.simple_output)


def my_function(my_type: Optional[Union['MyType', 'MyTypeDict']] = None,
simple_prop: Optional[str] = None,
opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableMyFunctionResult:
"""
Use this data source to access information about an existing resource.
"""
__args__ = dict()
__args__['myType'] = my_type
__args__['simpleProp'] = simple_prop
opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
__ret__ = pulumi.runtime.invoke('typedDictExample:index:MyFunction', __args__, opts=opts, typ=MyFunctionResult).value

return AwaitableMyFunctionResult(
my_output=pulumi.get(__ret__, 'my_output'),
simple_output=pulumi.get(__ret__, 'simple_output'))


@_utilities.lift_output_func(my_function)
def my_function_output(my_type: Optional[pulumi.Input[Union['MyType', 'MyTypeDict']]] = None,
simple_prop: Optional[pulumi.Input[Optional[str]]] = None,
opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[MyFunctionResult]:
"""
Use this data source to access information about an existing resource.
"""
...
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding=utf-8
# *** WARNING: this file was generated by test. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
from typing import NotRequired, TypedDict
else:
from typing_extensions import NotRequired, TypedDict
from . import _utilities

__all__ = [
'MyOutputType',
]

@pulumi.output_type
class MyOutputType(dict):
def __init__(__self__, *,
some_result: str):
pulumi.set(__self__, "some_result", some_result)

@property
@pulumi.getter(name="someResult")
def some_result(self) -> str:
return pulumi.get(self, "some_result")


44 changes: 44 additions & 0 deletions tests/testdata/codegen/python-typed-dict/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,50 @@
"myProp"
],
"type": "object"
},
"typedDictExample:index:MyOutputType": {
"properties": {
"someResult": {
"type": "string"
}
},
"required": [
"someResult"
],
"type": "object"
}
},
"functions": {
"typedDictExample:index:MyFunction": {
"inputs": {
"properties": {
"simpleProp": {
"type": "string"
},
"myType": {
"$ref": "#/types/typedDictExample:index:MyType"
}
},
"type": "object",
"required": [
"myType"
]
},
"outputs": {
"properties": {
"simpleOutput": {
"type": "string"
},
"myOutput": {
"$ref": "#/types/typedDictExample:index:MyOutputType"
}
},
"type": "object",
"required": [
"simpleOutput",
"myOutput"
]
}
}
},
"resources": {
Expand Down

0 comments on commit 7138664

Please sign in to comment.