diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 32b00c08c..baefaa6f1 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -17,5 +17,8 @@ [#7865](https://github.com/pulumi/pulumi/pull/7865) ### Bug Fixes + +- [sdk/python] Fix a regression in Python dynamic providers introduced in #7755. + - [automation/go] Fix loading of stack settings/configs from yaml files. [#pulumi-kubernetes-operator/183](https://github.com/pulumi/pulumi-kubernetes-operator/issues/183) diff --git a/sdk/python/lib/pulumi/dynamic/dynamic.py b/sdk/python/lib/pulumi/dynamic/dynamic.py index 6f4b6bbd1..10573c80d 100644 --- a/sdk/python/lib/pulumi/dynamic/dynamic.py +++ b/sdk/python/lib/pulumi/dynamic/dynamic.py @@ -222,18 +222,10 @@ def serialize_provider(provider: ResourceProvider) -> str: pickle.Pickler.save_dict = save_dict_sorted # Use dill to recursively pickle the provider and store base64 encoded form - pty = type(provider) - oldptymod = pty.__module__ try: - # TODO[uqfoundation/dill#424]: Dill currently only serializes classes by value when they are in `__main__`. - # Since we need to ensure classes are serialized by value for dynamic provider serialization to work, we - # for now will overwrite the `__module__` to be `__main__` on the provider class. When uqfoundation/dill#424 - # is addressed, we may be able to accomplish the desired results in a less invasive way. - pty.__module__ = '__main__' byts = dill.dumps(provider, protocol=pickle.DEFAULT_PROTOCOL, recurse=True) return base64.b64encode(byts).decode('utf-8') finally: - pty.__module__ = oldptymod # Restore the original pickler pickle.Pickler = old_pickler diff --git a/tests/integration/dynamic/python-non-main/.gitignore b/tests/integration/dynamic/python-non-main/.gitignore deleted file mode 100644 index 110fbfe3b..000000000 --- a/tests/integration/dynamic/python-non-main/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pyc -/.pulumi/ -/dist/ -/*.egg-info diff --git a/tests/integration/dynamic/python-non-main/Pulumi.yaml b/tests/integration/dynamic/python-non-main/Pulumi.yaml deleted file mode 100644 index 64e6d7cb6..000000000 --- a/tests/integration/dynamic/python-non-main/Pulumi.yaml +++ /dev/null @@ -1,3 +0,0 @@ -name: dynamic_py -description: A simple Python program that uses dynamic providers. -runtime: python diff --git a/tests/integration/dynamic/python-non-main/__main__.py b/tests/integration/dynamic/python-non-main/__main__.py deleted file mode 100644 index b8c36b510..000000000 --- a/tests/integration/dynamic/python-non-main/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright 2016-2021, Pulumi Corporation. All rights reserved. - -from pulumi import export -from other import r - -export("random_id", r.id) -export("random_val", r.val) diff --git a/tests/integration/dynamic/python-non-main/other.py b/tests/integration/dynamic/python-non-main/other.py deleted file mode 100644 index 2a132bc8a..000000000 --- a/tests/integration/dynamic/python-non-main/other.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2016-2021, Pulumi Corporation. All rights reserved. - -import binascii -import os -from pulumi.dynamic import Resource, ResourceProvider, CreateResult - -# Define the dynamic provider and create the dynamic provider resource from a -# file that is not `__main__` per pulumi/pulumi#7453. - -class RandomResourceProvider(ResourceProvider): - def create(self, props): - val = binascii.b2a_hex(os.urandom(15)).decode("ascii") - return CreateResult(val, { "val": val }) - -class Random(Resource): - val: str - def __init__(self, name, opts = None): - super().__init__(RandomResourceProvider(), name, {"val": ""}, opts) - -r = Random("foo") \ No newline at end of file diff --git a/tests/integration/dynamic/python-non-main/requirements.txt b/tests/integration/dynamic/python-non-main/requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/integration/integration_python_test.go b/tests/integration/integration_python_test.go index 4b0e59f63..e5584ec60 100644 --- a/tests/integration/integration_python_test.go +++ b/tests/integration/integration_python_test.go @@ -407,15 +407,6 @@ func TestDynamicPython(t *testing.T) { }) } -func TestDynamicPythonNonMain(t *testing.T) { - integration.ProgramTest(t, &integration.ProgramTestOptions{ - Dir: filepath.Join("dynamic", "python-non-main"), - Dependencies: []string{ - filepath.Join("..", "..", "sdk", "python", "env", "src"), - }, - }) -} - // Tests custom resource type name of dynamic provider in Python. func TestCustomResourceTypeNameDynamicPython(t *testing.T) { integration.ProgramTest(t, &integration.ProgramTestOptions{