Fix a few issues with resource references. (#5804)

- Differentiate between resource references that have no ID (i.e. because
  the referenced resource is not a CustomResource) and resource references
  that have IDs that are not known. This is necessary for proper
  backwards-compatible serialization of resource references.
- Fix the key that stores a resource reference's package version in the
  .NET, NodeJS, and Python SDKs.
- Ensure that the resource monitor's marshalling/unmarshalling  of inputs
  and outputs to/from calls to `Construct` retain resource references as
  appropriate.
- Fix serialization behavior for resources -> resource references in the
  Go SDK: if a resource's ID is unknown, it should still be serialized
  as a resource reference, albeit a reference with an unknown ID.
This commit is contained in:
Pat Gavlin 2020-11-23 11:15:10 -08:00 committed by GitHub
parent 8df7d24523
commit 807b09d6a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 161 additions and 95 deletions

View file

@ -5540,7 +5540,7 @@ func TestResourceReferences(t *testing.T) {
if urn.Name() == "resB" {
propA, ok := news["resA"]
assert.True(t, ok)
assert.Equal(t, resource.MakeResourceReference(urnA, idA, ""), propA)
assert.Equal(t, resource.MakeResourceReference(urnA, idA, true, ""), propA)
}
return "created-id", news, resource.StatusOK, nil
@ -5560,7 +5560,7 @@ func TestResourceReferences(t *testing.T) {
assert.NoError(t, err)
ins := resource.PropertyMap{
"resA": resource.MakeResourceReference(urnA, idA, ""),
"resA": resource.MakeResourceReference(urnA, idA, true, ""),
}
_, _, props, err := monitor.RegisterResource("pkgA:m:typA", "resB", true, deploytest.ResourceOptions{
Inputs: ins,
@ -5718,7 +5718,7 @@ func TestSingleComponentGetResourceDefaultProviderLifecycle(t *testing.T) {
URN: urn,
Outputs: resource.PropertyMap{
"foo": resource.NewStringProperty("bar"),
"res": resource.MakeResourceReference(urnB, idB, ""),
"res": resource.MakeResourceReference(urnB, idB, true, ""),
},
}, nil
}
@ -5744,7 +5744,7 @@ func TestSingleComponentGetResourceDefaultProviderLifecycle(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, resource.PropertyMap{
"foo": resource.NewStringProperty("bar"),
"res": resource.MakeResourceReference(urnB, idB, ""),
"res": resource.MakeResourceReference(urnB, idB, true, ""),
}, state)
result, _, err := monitor.Invoke("pulumi:pulumi:getResource", resource.PropertyMap{

View file

@ -561,13 +561,13 @@ func DeserializePropertyValue(v interface{}, dec config.Decrypter,
}
urn := resource.URN(urnStr)
var id resource.ID
id, hasID := resource.ID(""), false
if idV, ok := objmap["id"]; ok {
idStr, ok := idV.(string)
if !ok {
return resource.PropertyValue{}, errors.New("malformed resource value: id must be a string")
}
id = resource.ID(idStr)
id, hasID = resource.ID(idStr), true
}
var packageVersion string
@ -579,7 +579,7 @@ func DeserializePropertyValue(v interface{}, dec config.Decrypter,
}
}
return resource.MakeResourceReference(urn, id, packageVersion), nil
return resource.MakeResourceReference(urn, id, hasID, packageVersion), nil
default:
return resource.PropertyValue{}, errors.Errorf("unrecognized signature '%v' in property map", sig)
}

View file

@ -43,7 +43,7 @@ namespace Pulumi.Serialization
public const string AssetOrArchiveUriName = "uri";
public const string ResourceUrnName = "urn";
public const string ResourceVersionName = "version";
public const string ResourceVersionName = "packageVersion";
public const string IdPropertyName = "id";
public const string UrnPropertyName = "urn";

View file

@ -225,9 +225,8 @@ namespace Pulumi.Serialization
}
string? version;
if (!TryGetStringValue(value.StructValue.Fields, Constants.ResourceVersionName, out version))
{
throw new InvalidOperationException("Value was marked as a Resource, but did not conform to required shape.");
if (!TryGetStringValue(value.StructValue.Fields, Constants.ResourceVersionName, out version)) {
version = "";
}
var urnParts = urn.Split("::");

View file

@ -1042,9 +1042,10 @@ func (p *provider) Construct(info ConstructInfo, typ tokens.Type, name tokens.QN
// Marshal the input properties.
minputs, err := MarshalProperties(inputs, MarshalOptions{
Label: fmt.Sprintf("%s.inputs", label),
KeepUnknowns: true,
KeepSecrets: p.acceptSecrets,
Label: fmt.Sprintf("%s.inputs", label),
KeepUnknowns: true,
KeepSecrets: p.acceptSecrets,
KeepResources: p.acceptResources,
})
if err != nil {
return ConstructResult{}, err
@ -1100,9 +1101,10 @@ func (p *provider) Construct(info ConstructInfo, typ tokens.Type, name tokens.QN
}
outputs, err := UnmarshalProperties(resp.GetState(), MarshalOptions{
Label: fmt.Sprintf("%s.outputs", label),
KeepUnknowns: info.DryRun,
KeepSecrets: true,
Label: fmt.Sprintf("%s.outputs", label),
KeepUnknowns: info.DryRun,
KeepSecrets: true,
KeepResources: true,
})
if err != nil {
return ConstructResult{}, err

View file

@ -176,7 +176,7 @@ func MarshalPropertyValue(v resource.PropertyValue, opts MarshalOptions) (*struc
resource.SigKey: resource.NewStringProperty(resource.ResourceReferenceSig),
"urn": resource.NewStringProperty(string(ref.URN)),
}
if ref.ID != "" {
if ref.HasID {
m["id"] = resource.NewStringProperty(string(ref.ID))
}
if ref.PackageVersion != "" {
@ -376,12 +376,17 @@ func UnmarshalPropertyValue(v *structpb.Value, opts MarshalOptions) (*resource.P
return nil, errors.New("malformed resource reference: urn not a string")
}
var id string
id, hasID := "", false
if idProp, ok := obj["id"]; ok {
if !idProp.IsString() {
hasID = true
switch {
case idProp.IsString():
id = idProp.StringValue()
case idProp.IsComputed():
// Leave the ID empty to indicate that it is unknown.
default:
return nil, errors.New("malformed resource reference: id not a string")
}
id = idProp.StringValue()
}
var packageVersion string
@ -401,7 +406,7 @@ func UnmarshalPropertyValue(v *structpb.Value, opts MarshalOptions) (*resource.P
return &r, nil
}
r := resource.MakeResourceReference(resource.URN(urn.StringValue()), resource.ID(id), packageVersion)
r := resource.MakeResourceReference(resource.URN(urn.StringValue()), resource.ID(id), hasID, packageVersion)
return &r, nil
default:
return nil, errors.Errorf("unrecognized signature '%v' in property map", sig)

View file

@ -289,7 +289,7 @@ func TestSkipInternalKeys(t *testing.T) {
func TestResourceReference(t *testing.T) {
// Test round-trip
opts := MarshalOptions{KeepResources: true}
rawProp := resource.MakeResourceReference("fakeURN", "fakeID", "fakeVersion")
rawProp := resource.MakeResourceReference("fakeURN", "fakeID", true, "fakeVersion")
prop, err := MarshalPropertyValue(rawProp, opts)
assert.NoError(t, err)
actual, err := UnmarshalPropertyValue(prop, opts)
@ -311,7 +311,7 @@ func TestResourceReference(t *testing.T) {
assert.Equal(t, resource.NewStringProperty(string(rawProp.ResourceReferenceValue().ID)), *actual)
// Test unmarshaling as a URN
rawProp = resource.MakeResourceReference("fakeURN", "", "fakeVersion")
rawProp = resource.MakeResourceReference("fakeURN", "", false, "fakeVersion")
prop, err = MarshalPropertyValue(rawProp, opts)
assert.NoError(t, err)
opts.KeepResources = false

View file

@ -97,12 +97,14 @@ type Secret struct {
}
// ResourceReference is a property value that represents a reference to a Resource. The reference captures the
// resource's URN, ID, and the version of its containing package.
// resource's URN, ID, and the version of its containing package. Note that the resource ID may be unknown, in which
// case HasID will be true and ID will be the empty string.
//
//nolint: golint
type ResourceReference struct {
URN URN
ID ID
HasID bool
PackageVersion string
}
@ -213,8 +215,13 @@ func MakeSecret(v PropertyValue) PropertyValue {
return NewSecretProperty(&Secret{Element: v})
}
func MakeResourceReference(urn URN, id ID, packageVersion string) PropertyValue {
return NewResourceReferenceProperty(ResourceReference{URN: urn, ID: id, PackageVersion: packageVersion})
func MakeResourceReference(urn URN, id ID, hasID bool, packageVersion string) PropertyValue {
return NewResourceReferenceProperty(ResourceReference{
URN: urn,
ID: id,
HasID: hasID,
PackageVersion: packageVersion,
})
}
// NewPropertyValue turns a value into a property value, provided it is of a legal "JSON-like" kind.

View file

@ -266,20 +266,18 @@ func marshalInputAndDetermineSecret(v interface{},
contract.Assert(known)
contract.Assert(!secretURN)
var id ID
id, hasID := ID(""), false
if custom, ok := v.(CustomResource); ok {
resID, known, secretID, err := custom.ID().awaitID(context.Background())
resID, _, secretID, err := custom.ID().awaitID(context.Background())
if err != nil {
return resource.PropertyValue{}, nil, false, err
}
contract.Assert(!secretID)
if !known {
return resource.MakeComputed(resource.NewStringProperty("")), deps, secret, nil
}
id = resID
id, hasID = resID, true
}
return resource.MakeResourceReference(resource.URN(urn), resource.ID(id), ""), deps, secret, nil
return resource.MakeResourceReference(resource.URN(urn), resource.ID(id), hasID, ""), deps, secret, nil
}
contract.Assertf(valueType.AssignableTo(destType) || valueType.ConvertibleTo(destType),

View file

@ -512,7 +512,7 @@ export function deserializeProperty(prop: any): any {
case specialResourceSig:
// Deserialize the resource into a live Resource reference
const urn = prop["urn"];
const version = prop["version"];
const version = prop["packageVersion"];
const urnParts = urn.split("::");
const qualifiedType = urnParts[2];

173
sdk/python/Pipfile.lock generated
View file

@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "8f39c345effaa48064d02b8c1b617359571fa9d1d3577fa86e82a2692d233481"
"sha256": "3b7dc22140f5503eebf92f8736423441b156e5fcfb4b2ad5289e84f3b43a1022"
},
"pipfile-spec": 6,
"requires": {},
@ -24,79 +24,79 @@
},
"grpcio": {
"hashes": [
"sha256:7744468ee48be3265db798f27e66e118c324d7831a34fd39d5775bcd5a70a2c4",
"sha256:0cebba3907441d5c620f7b491a780ed155140fbd590da0886ecfb1df6ad947b9",
"sha256:b581ddb8df619402c377c81f186ad7f5e2726ad9f8d57047144b352f83f37522",
"sha256:8cf67b8493bff50fa12b4bc30ab40ce1f1f216eb54145962b525852959b0ab3d",
"sha256:4bb771c4c2411196b778871b519c7e12e87f3fa72b0517b22f952c64ead07958",
"sha256:6a1b5b7e47600edcaeaa42983b1c19e7a5892c6b98bcde32ae2aa509a99e0436",
"sha256:0aeed3558a0eec0b31700af6072f1c90e8fd5701427849e76bc469554a14b4f5",
"sha256:4cef3eb2df338abd9b6164427ede961d351c6bf39b4a01448a65f9e795f56575",
"sha256:592656b10528aa327058d2007f7ab175dc9eb3754b289e24cac36e09129a2f6b",
"sha256:289671cfe441069f617bf23c41b1fa07053a31ff64de918d1016ac73adda2f73",
"sha256:c5030be8a60fb18de1fc8d93d130d57e4296c02f229200df814f6578da00429e",
"sha256:7fda62846ef8d86caf06bd1ecfddcae2c7e59479a4ee28808120e170064d36cc",
"sha256:3ac453387add933b6cfbc67cc8635f91ff9895299130fc612c3c4b904e91d82a",
"sha256:fa78bd55ec652d4a88ba254c8dae623c9992e2ce647bd17ba1a37ca2b7b42222",
"sha256:56e2a985efdba8e2282e856470b684e83a3cadd920f04fcd360b4b826ced0dd3",
"sha256:7c1ea6ea6daa82031af6eb5b7d1ab56b1193840389ea7cf46d80e98636f8aff5",
"sha256:a8c84db387907e8d800c383e4c92f39996343adedf635ae5206a684f94df8311",
"sha256:62ce7e86f11e8c4ff772e63c282fb5a7904274258be0034adf37aa679cf96ba0",
"sha256:7f727b8b6d9f92fcab19dbc62ec956d8352c6767b97b8ab18754b2dfa84d784f",
"sha256:02a4a637a774382d6ac8e65c0a7af4f7f4b9704c980a0a9f4f7bbc1e97c5b733",
"sha256:abaf30d18874310d4439a23a0afb6e4b5709c4266966401de7c4ae345cc810ee",
"sha256:08b6a58c8a83e71af5650f8f879fe14b7b84dce0c4969f3817b42c72989dacf0",
"sha256:407b4d869ce5c6a20af5b96bb885e3ecaf383e3fb008375919eb26cf8f10d9cd",
"sha256:dd47fac2878f6102efa211461eb6fa0a6dd7b4899cd1ade6cdcb9fa9748363eb",
"sha256:d51ddfb3d481a6a3439db09d4b08447fb9f6b60d862ab301238f37bea8f60a6d",
"sha256:bf7de9e847d2d14a0efcd48b290ee181fdbffb2ae54dfa2ec2a935a093730bac",
"sha256:ffec0b854d2ed6ee98776c7168c778cdd18503642a68d36c00ba0f96d4ccff7c",
"sha256:7d292dabf7ded9c062357f8207e20e94095a397d487ffd25aa213a2c3dff0ab4",
"sha256:2d5124284f9d29e4f06f674a12ebeb23fc16ce0f96f78a80a6036930642ae5ab",
"sha256:0aeed3558a0eec0b31700af6072f1c90e8fd5701427849e76bc469554a14b4f5",
"sha256:0cebba3907441d5c620f7b491a780ed155140fbd590da0886ecfb1df6ad947b9",
"sha256:143b4fe72c01000fc0667bf62ace402a6518939b3511b3c2bec04d44b1d7591c",
"sha256:f2673c51e8535401c68806d331faba614bcff3ee16373481158a2e74f510b7f6",
"sha256:affbb739fde390710190e3540acc9f3e65df25bd192cc0aa554f368288ee0ea2",
"sha256:5b21d3de520a699cb631cfd3a773a57debeb36b131be366bf832153405cc5404",
"sha256:514b4a6790d6597fc95608f49f2f13fe38329b2058538095f0502b734b98ffd2",
"sha256:65b06fa2db2edd1b779f9b256e270f7a58d60e40121660d8b5fd6e8b88f122ed",
"sha256:52143467237bfa77331ed1979dc3e203a1c12511ee37b3ddd9ff41b05804fb10",
"sha256:85e56ab125b35b1373205b3802f58119e70ffedfe0d7e2821999126058f7c44f",
"sha256:21265511880056d19ce4f809ce3fbe2a3fa98ec1fc7167dbdf30a80d3276202e",
"sha256:b412f43c99ca72769306293ba83811b241d41b62ca8f358e47e0fdaf7b6fbbd7",
"sha256:289671cfe441069f617bf23c41b1fa07053a31ff64de918d1016ac73adda2f73",
"sha256:2d5124284f9d29e4f06f674a12ebeb23fc16ce0f96f78a80a6036930642ae5ab",
"sha256:2f2eabfd514af8945ee415083a0f849eea6cb3af444999453bb6666fadc10f54",
"sha256:c89510381cbf8c8317e14e747a8b53988ad226f0ed240824064a9297b65f921d",
"sha256:eff55d318a114742ed2a06972f5daacfe3d5ad0c0c0d9146bcaf10acb427e6be",
"sha256:89add4f4cda9546f61cb8a6988bc5b22101dd8ca4af610dff6f28105d1f78695",
"sha256:3ac453387add933b6cfbc67cc8635f91ff9895299130fc612c3c4b904e91d82a",
"sha256:407b4d869ce5c6a20af5b96bb885e3ecaf383e3fb008375919eb26cf8f10d9cd",
"sha256:4bb771c4c2411196b778871b519c7e12e87f3fa72b0517b22f952c64ead07958",
"sha256:4cef3eb2df338abd9b6164427ede961d351c6bf39b4a01448a65f9e795f56575",
"sha256:514b4a6790d6597fc95608f49f2f13fe38329b2058538095f0502b734b98ffd2",
"sha256:52143467237bfa77331ed1979dc3e203a1c12511ee37b3ddd9ff41b05804fb10",
"sha256:56e2a985efdba8e2282e856470b684e83a3cadd920f04fcd360b4b826ced0dd3",
"sha256:592656b10528aa327058d2007f7ab175dc9eb3754b289e24cac36e09129a2f6b",
"sha256:5b21d3de520a699cb631cfd3a773a57debeb36b131be366bf832153405cc5404",
"sha256:62ce7e86f11e8c4ff772e63c282fb5a7904274258be0034adf37aa679cf96ba0",
"sha256:65b06fa2db2edd1b779f9b256e270f7a58d60e40121660d8b5fd6e8b88f122ed",
"sha256:6a1b5b7e47600edcaeaa42983b1c19e7a5892c6b98bcde32ae2aa509a99e0436",
"sha256:703da25278ee7318acb766be1c6d3b67d392920d002b2d0304e7f3431b74f6c1",
"sha256:7744468ee48be3265db798f27e66e118c324d7831a34fd39d5775bcd5a70a2c4",
"sha256:7c1ea6ea6daa82031af6eb5b7d1ab56b1193840389ea7cf46d80e98636f8aff5",
"sha256:7d292dabf7ded9c062357f8207e20e94095a397d487ffd25aa213a2c3dff0ab4",
"sha256:7f727b8b6d9f92fcab19dbc62ec956d8352c6767b97b8ab18754b2dfa84d784f",
"sha256:7fda62846ef8d86caf06bd1ecfddcae2c7e59479a4ee28808120e170064d36cc",
"sha256:85e56ab125b35b1373205b3802f58119e70ffedfe0d7e2821999126058f7c44f",
"sha256:88f2a102cbc67e91f42b4323cec13348bf6255b25f80426088079872bd4f3c5c",
"sha256:89add4f4cda9546f61cb8a6988bc5b22101dd8ca4af610dff6f28105d1f78695",
"sha256:8cf67b8493bff50fa12b4bc30ab40ce1f1f216eb54145962b525852959b0ab3d",
"sha256:a8c84db387907e8d800c383e4c92f39996343adedf635ae5206a684f94df8311",
"sha256:abaf30d18874310d4439a23a0afb6e4b5709c4266966401de7c4ae345cc810ee",
"sha256:affbb739fde390710190e3540acc9f3e65df25bd192cc0aa554f368288ee0ea2",
"sha256:b412f43c99ca72769306293ba83811b241d41b62ca8f358e47e0fdaf7b6fbbd7",
"sha256:b581ddb8df619402c377c81f186ad7f5e2726ad9f8d57047144b352f83f37522",
"sha256:bf7de9e847d2d14a0efcd48b290ee181fdbffb2ae54dfa2ec2a935a093730bac",
"sha256:c5030be8a60fb18de1fc8d93d130d57e4296c02f229200df814f6578da00429e",
"sha256:c89510381cbf8c8317e14e747a8b53988ad226f0ed240824064a9297b65f921d",
"sha256:d386630af995fd4de225d550b6806507ca09f5a650f227fddb29299335cda55e",
"sha256:703da25278ee7318acb766be1c6d3b67d392920d002b2d0304e7f3431b74f6c1"
"sha256:d51ddfb3d481a6a3439db09d4b08447fb9f6b60d862ab301238f37bea8f60a6d",
"sha256:dd47fac2878f6102efa211461eb6fa0a6dd7b4899cd1ade6cdcb9fa9748363eb",
"sha256:eff55d318a114742ed2a06972f5daacfe3d5ad0c0c0d9146bcaf10acb427e6be",
"sha256:f2673c51e8535401c68806d331faba614bcff3ee16373481158a2e74f510b7f6",
"sha256:fa78bd55ec652d4a88ba254c8dae623c9992e2ce647bd17ba1a37ca2b7b42222",
"sha256:ffec0b854d2ed6ee98776c7168c778cdd18503642a68d36c00ba0f96d4ccff7c"
],
"index": "pypi",
"version": "==1.33.2"
},
"protobuf": {
"hashes": [
"sha256:0bba42f439bf45c0f600c3c5993666fcb88e8441d011fad80a11df6f324eef33",
"sha256:1e834076dfef9e585815757a2c7e4560c7ccc5962b9d09f831214c693a91b463",
"sha256:339c3a003e3c797bc84499fa32e0aac83c768e67b3de4a5d7a5a9aa3b0da634c",
"sha256:361acd76f0ad38c6e38f14d08775514fbd241316cce08deb2ce914c7dfa1184a",
"sha256:3dee442884a18c16d023e52e32dd34a8930a889e511af493f6dc7d4d9bf12e4f",
"sha256:4d1174c9ed303070ad59553f435846a2f877598f59f9afc1b89757bdf846f2a7",
"sha256:5db9d3e12b6ede5e601b8d8684a7f9d90581882925c96acf8495957b4f1b204b",
"sha256:6a82e0c8bb2bf58f606040cc5814e07715b2094caeba281e2e7d0b0e2e397db5",
"sha256:8c35bcbed1c0d29b127c886790e9d37e845ffc2725cc1db4bd06d70f4e8359f4",
"sha256:91c2d897da84c62816e2f473ece60ebfeab024a16c1751aaf31100127ccd93ec",
"sha256:9c2e63c1743cba12737169c447374fab3dfeb18111a460a8c1a000e35836b18c",
"sha256:9edfdc679a3669988ec55a989ff62449f670dfa7018df6ad7f04e8dbacb10630",
"sha256:c0c5ab9c4b1eac0a9b838f1e46038c3175a95b0f2d944385884af72876bd6bc7",
"sha256:c8abd7605185836f6f11f97b21200f8a864f9cb078a193fe3c9e235711d3ff1e",
"sha256:d69697acac76d9f250ab745b46c725edf3e98ac24763990b24d58c16c642947a",
"sha256:df3932e1834a64b46ebc262e951cd82c3cf0fa936a154f0a42231140d8237060",
"sha256:e7662437ca1e0c51b93cadb988f9b353fa6b8013c0385d63a70c8a77d84da5f9",
"sha256:f68eb9d03c7d84bd01c790948320b768de8559761897763731294e3bc316decb"
"sha256:0e247612fadda953047f53301a7b0407cb0c3cb4ae25a6fde661597a04039b3c",
"sha256:0fc96785262042e4863b3f3b5c429d4636f10d90061e1840fce1baaf59b1a836",
"sha256:1c51fda1bbc9634246e7be6016d860be01747354ed7015ebe38acf4452f470d2",
"sha256:1d63eb389347293d8915fb47bee0951c7b5dab522a4a60118b9a18f33e21f8ce",
"sha256:22bcd2e284b3b1d969c12e84dc9b9a71701ec82d8ce975fdda19712e1cfd4e00",
"sha256:2a7e2fe101a7ace75e9327b9c946d247749e564a267b0515cf41dfe450b69bac",
"sha256:43b554b9e73a07ba84ed6cf25db0ff88b1e06be610b37656e292e3cbb5437472",
"sha256:4b74301b30513b1a7494d3055d95c714b560fbb630d8fb9956b6f27992c9f980",
"sha256:4e75105c9dfe13719b7293f75bd53033108f4ba03d44e71db0ec2a0e8401eafd",
"sha256:5b7a637212cc9b2bcf85dd828b1178d19efdf74dbfe1ddf8cd1b8e01fdaaa7f5",
"sha256:5e9806a43232a1fa0c9cf5da8dc06f6910d53e4390be1fa06f06454d888a9142",
"sha256:629b03fd3caae7f815b0c66b41273f6b1900a579e2ccb41ef4493a4f5fb84f3a",
"sha256:72230ed56f026dd664c21d73c5db73ebba50d924d7ba6b7c0d81a121e390406e",
"sha256:86a75477addde4918e9a1904e5c6af8d7b691f2a3f65587d73b16100fbe4c3b2",
"sha256:8971c421dbd7aad930c9bd2694122f332350b6ccb5202a8b7b06f3f1a5c41ed5",
"sha256:9616f0b65a30851e62f1713336c931fcd32c057202b7ff2cfbfca0fc7d5e3043",
"sha256:b0d5d35faeb07e22a1ddf8dce620860c8fe145426c02d1a0ae2688c6e8ede36d",
"sha256:ecc33531a213eee22ad60e0e2aaea6c8ba0021f0cce35dbf0ab03dee6e2a23a1"
],
"index": "pypi",
"version": "==3.13.0"
"version": "==3.14.0"
},
"six": {
"hashes": [
@ -116,6 +116,21 @@
"markers": "python_version >= '3.5'",
"version": "==2.4.2"
},
"attrs": {
"hashes": [
"sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6",
"sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==20.3.0"
},
"iniconfig": {
"hashes": [
"sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
"sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"
],
"version": "==1.1.1"
},
"isort": {
"hashes": [
"sha256:dcab1d98b469a12a1a624ead220584391648790275560e1a43e54c5dceae65e7",
@ -185,6 +200,30 @@
],
"version": "==0.4.3"
},
"packaging": {
"hashes": [
"sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8",
"sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==20.4"
},
"pluggy": {
"hashes": [
"sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
"sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==0.13.1"
},
"py": {
"hashes": [
"sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2",
"sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.9.0"
},
"pylint": {
"hashes": [
"sha256:bb4a908c9dadbc3aac18860550e870f58e1a02c9f2c204fdf5693d73be061210",
@ -193,6 +232,22 @@
"index": "pypi",
"version": "==2.6.0"
},
"pyparsing": {
"hashes": [
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
],
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.4.7"
},
"pytest": {
"hashes": [
"sha256:4288fed0d9153d9646bfcdf0c0428197dba1ecb27a33bb6e031d002fa88653fe",
"sha256:c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e"
],
"index": "pypi",
"version": "==6.1.2"
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",

View file

@ -267,7 +267,7 @@ def deserialize_properties(props_struct: struct_pb2.Struct, keep_unknowns: Optio
return wrap_rpc_secret(deserialize_property(props_struct["value"]))
if props_struct[_special_sig_key] == _special_resource_sig:
urn = props_struct["urn"]
version = props_struct["version"]
version = props_struct["packageVersion"] if "packageVersion" in props_struct else ""
urn_parts = urn.split("::")
urn_name = urn_parts[3]