Skip to content

Commit

Permalink
mark function invokes in python with Awaitable[None] when they don't …
Browse files Browse the repository at this point in the history
…have outputs
  • Loading branch information
Zaid-Ajaj committed Dec 9, 2022
1 parent aa8dfab commit 98068fb
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 24 deletions.
59 changes: 43 additions & 16 deletions pkg/codegen/python/gen.go
Expand Up @@ -357,27 +357,52 @@ func genStandardHeader(w io.Writer, tool string) {
fmt.Fprintf(w, "# *** Do not edit by hand unless you're certain you know what you are doing! ***\n\n")
}

func typingImports() []string {
return []string{
"Any",
"Mapping",
"Optional",
"Sequence",
"Union",
"overload",
}
}

func (mod *modContext) generateCommonImports(w io.Writer, imports imports, typingImports []string) {
rel, err := filepath.Rel(mod.mod, "")
contract.Assert(err == nil)
relRoot := path.Dir(rel)
relImport := relPathToRelImport(relRoot)

fmt.Fprintf(w, "import copy\n")
fmt.Fprintf(w, "import warnings\n")
fmt.Fprintf(w, "import pulumi\n")
fmt.Fprintf(w, "import pulumi.runtime\n")
fmt.Fprintf(w, "from typing import %s\n", strings.Join(typingImports, ", "))
fmt.Fprintf(w, "from %s import _utilities\n", relImport)
for _, imp := range imports.strings() {
fmt.Fprintf(w, "%s\n", imp)
}
fmt.Fprintf(w, "\n")
}

func (mod *modContext) genHeader(w io.Writer, needsSDK bool, imports imports) {
genStandardHeader(w, mod.tool)

// If needed, emit the standard Pulumi SDK import statement.
if needsSDK {
rel, err := filepath.Rel(mod.mod, "")
contract.Assert(err == nil)
relRoot := path.Dir(rel)
relImport := relPathToRelImport(relRoot)

fmt.Fprintf(w, "import copy\n")
fmt.Fprintf(w, "import warnings\n")
fmt.Fprintf(w, "import pulumi\n")
fmt.Fprintf(w, "import pulumi.runtime\n")
fmt.Fprintf(w, "from typing import Any, Mapping, Optional, Sequence, Union, overload\n")
fmt.Fprintf(w, "from %s import _utilities\n", relImport)
for _, imp := range imports.strings() {
fmt.Fprintf(w, "%s\n", imp)
}
fmt.Fprintf(w, "\n")
typings := typingImports()
mod.generateCommonImports(w, imports, typings)
}
}

func (mod *modContext) genFunctionHeader(w io.Writer, function *schema.Function, imports imports) {
genStandardHeader(w, mod.tool)
typings := typingImports()
if function.Outputs == nil || len(function.Outputs.Properties) == 0 {
typings = append(typings, "Awaitable")
}
mod.generateCommonImports(w, imports, typings)
}

func relPathToRelImport(relPath string) string {
Expand Down Expand Up @@ -1671,7 +1696,7 @@ func (mod *modContext) genFunction(fun *schema.Function) (string, error) {
mod.collectImports(fun.Outputs.Properties, imports, false)
}

mod.genHeader(w, true /*needsSDK*/, imports)
mod.genFunctionHeader(w, fun, imports)

var baseName, awaitableName string
if fun.Outputs != nil && len(fun.Outputs.Properties) > 0 {
Expand Down Expand Up @@ -1702,6 +1727,8 @@ func (mod *modContext) genFunction(fun *schema.Function) (string, error) {
if fun.Outputs != nil && len(fun.Outputs.Properties) > 0 {
retTypeName, rets = mod.genAwaitableType(w, fun.Outputs), fun.Outputs.Properties
fmt.Fprintf(w, "\n\n")
} else {
retTypeName = "Awaitable[None]"
}

var args []*schema.Property
Expand Down
Expand Up @@ -6,15 +6,15 @@
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from typing import Any, Mapping, Optional, Sequence, Union, overload, Awaitable
from . import _utilities

__all__ = [
'func_with_const_input',
]

def func_with_const_input(plain_input: Optional[str] = None,
opts: Optional[pulumi.InvokeOptions] = None):
opts: Optional[pulumi.InvokeOptions] = None) -> Awaitable[None]:
"""
Codegen demo with const inputs
"""
Expand Down
Expand Up @@ -6,15 +6,15 @@
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from typing import Any, Mapping, Optional, Sequence, Union, overload, Awaitable
from . import _utilities

__all__ = [
'func_with_empty_outputs',
]

def func_with_empty_outputs(name: Optional[str] = None,
opts: Optional[pulumi.InvokeOptions] = None):
opts: Optional[pulumi.InvokeOptions] = None) -> Awaitable[None]:
"""
n/a
Expand Down
Expand Up @@ -6,7 +6,7 @@
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from typing import Any, Mapping, Optional, Sequence, Union, overload, Awaitable
from . import _utilities
from ._enums import *

Expand All @@ -15,7 +15,7 @@
]

def example_func(enums: Optional[Sequence[Union[str, 'MyEnum']]] = None,
opts: Optional[pulumi.InvokeOptions] = None):
opts: Optional[pulumi.InvokeOptions] = None) -> Awaitable[None]:
"""
Use this data source to access information about an existing resource.
"""
Expand Down
Expand Up @@ -6,7 +6,7 @@
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from typing import Any, Mapping, Optional, Sequence, Union, overload, Awaitable
from . import _utilities
from ._inputs import *

Expand All @@ -15,7 +15,7 @@
]

def do_foo(foo: Optional[pulumi.InputType['Foo']] = None,
opts: Optional[pulumi.InvokeOptions] = None):
opts: Optional[pulumi.InvokeOptions] = None) -> Awaitable[None]:
"""
Use this data source to access information about an existing resource.
"""
Expand Down

0 comments on commit 98068fb

Please sign in to comment.