Skip to content

Commit

Permalink
fix(python): classes do not correctly implement interfaces (#2809)
Browse files Browse the repository at this point in the history

Fixes  aws/aws-cdk#13474

---

By submitting this pull request, I confirm that my contribution is made under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0
  • Loading branch information
rectalogic authored May 26, 2021
1 parent b7b9e5f commit 0769347
Show file tree
Hide file tree
Showing 12 changed files with 2,036 additions and 309 deletions.
18 changes: 18 additions & 0 deletions packages/@jsii/python-runtime/tests/test_python.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import jsii
import pytest
from typing import Any, cast

from jsii.errors import JSIIError
import jsii_calc
from jsii_calc.module2702 import IVpc, Vpc, IBaz, Baz


class TestErrorHandling:
Expand All @@ -27,8 +29,24 @@ def test_descriptive_error_when_passing_function(self):
obj = jsii_calc.Calculator()

with pytest.raises(JSIIError, match="Cannot pass function as argument here.*"):
# types: ignore
obj.add(self.test_descriptive_error_when_passing_function)

def test_implements_interface(self) -> None:
"""Checks that jsii-generated classes correctly implement the relevant jsii-generated interfaces."""

def vpc_interface_func(v: IVpc) -> None:
assert v is not None

vpc = Vpc()
vpc_interface_func(vpc)

def baz_interface_func(b: IBaz) -> None:
assert b is not None

baz = Baz()
baz_interface_func(baz)


def find_struct_bases(x):
ret = []
Expand Down
42 changes: 42 additions & 0 deletions packages/jsii-calc/lib/module2702/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,45 @@ export class Class3 implements IBaseInterface {
export interface IFoo extends IBaseInterface {
readonly iBaseInterface: string;
}

// See https://github.com/aws/aws-cdk/issues/13474

export interface IConstruct {
constructMethod(): void;
}

export interface IResource extends IConstruct {
resourceMethod(): void;
}

export interface IVpc extends IResource {
vpcMethod(): void;
}

export class Construct implements IConstruct {
public constructMethod(): void {
return;
}
}

export abstract class Resource extends Construct implements IResource {
public resourceMethod(): void {
return;
}
}

export class Vpc extends Resource implements IVpc {
public vpcMethod(): void {
return;
}
}

export interface IBaz extends IBaseInterface {
bazMethod(): void;
}

export class Baz extends Class3 implements IBaz {
public bazMethod(): void {
return;
}
}
263 changes: 262 additions & 1 deletion packages/jsii-calc/test/assembly.jsii
Original file line number Diff line number Diff line change
Expand Up @@ -14968,6 +14968,42 @@
}
]
},
"jsii-calc.module2702.Baz": {
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Class3",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Baz",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IBaz"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 70
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 71
},
"name": "bazMethod",
"overrides": "jsii-calc.module2702.IBaz"
}
],
"name": "Baz",
"namespace": "module2702"
},
"jsii-calc.module2702.Class1": {
"assembly": "jsii-calc",
"base": "@scope/jsii-calc-base.Base",
Expand Down Expand Up @@ -15084,6 +15120,98 @@
"name": "Class3",
"namespace": "module2702"
},
"jsii-calc.module2702.Construct": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Construct",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IConstruct"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 48
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 49
},
"name": "constructMethod",
"overrides": "jsii-calc.module2702.IConstruct"
}
],
"name": "Construct",
"namespace": "module2702"
},
"jsii-calc.module2702.IBaz": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IBaz",
"interfaces": [
"@scope/jsii-calc-base.IBaseInterface"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 66
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 67
},
"name": "bazMethod"
}
],
"name": "IBaz",
"namespace": "module2702"
},
"jsii-calc.module2702.IConstruct": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IConstruct",
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 36
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 37
},
"name": "constructMethod"
}
],
"name": "IConstruct",
"namespace": "module2702"
},
"jsii-calc.module2702.IFoo": {
"assembly": "jsii-calc",
"docs": {
Expand Down Expand Up @@ -15118,6 +15246,139 @@
}
]
},
"jsii-calc.module2702.IResource": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IResource",
"interfaces": [
"jsii-calc.module2702.IConstruct"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 40
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 41
},
"name": "resourceMethod"
}
],
"name": "IResource",
"namespace": "module2702"
},
"jsii-calc.module2702.IVpc": {
"assembly": "jsii-calc",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.IVpc",
"interfaces": [
"jsii-calc.module2702.IResource"
],
"kind": "interface",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 44
},
"methods": [
{
"abstract": true,
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 45
},
"name": "vpcMethod"
}
],
"name": "IVpc",
"namespace": "module2702"
},
"jsii-calc.module2702.Resource": {
"abstract": true,
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Construct",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Resource",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IResource"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 54
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 55
},
"name": "resourceMethod",
"overrides": "jsii-calc.module2702.IResource"
}
],
"name": "Resource",
"namespace": "module2702"
},
"jsii-calc.module2702.Vpc": {
"assembly": "jsii-calc",
"base": "jsii-calc.module2702.Resource",
"docs": {
"stability": "stable"
},
"fqn": "jsii-calc.module2702.Vpc",
"initializer": {
"docs": {
"stability": "stable"
}
},
"interfaces": [
"jsii-calc.module2702.IVpc"
],
"kind": "class",
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 60
},
"methods": [
{
"docs": {
"stability": "stable"
},
"locationInModule": {
"filename": "lib/module2702/index.ts",
"line": 61
},
"name": "vpcMethod",
"overrides": "jsii-calc.module2702.IVpc"
}
],
"name": "Vpc",
"namespace": "module2702"
},
"jsii-calc.nodirect.sub1.TypeFromSub1": {
"assembly": "jsii-calc",
"docs": {
Expand Down Expand Up @@ -15874,5 +16135,5 @@
}
},
"version": "3.20.120",
"fingerprint": "ezY52AR44agRJClz62BLSJU4fF1Dhh+7vRL5LX9Fcgc="
"fingerprint": "Ouku0wagXKUVN9v9Ud7ocXYRaRl10KuCazRDvU/7iNk="
}
Loading

0 comments on commit 0769347

Please sign in to comment.