@alloy-js/python 0.5.0-dev.0 → 0.5.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/src/builtins/python.js +46 -0
- package/dist/dev/src/builtins/python.js.map +1 -1
- package/dist/dev/src/components/ClassDeclaration.js +19 -10
- package/dist/dev/src/components/ClassDeclaration.js.map +1 -1
- package/dist/dev/src/components/ClassMethodDeclaration.js +20 -5
- package/dist/dev/src/components/ClassMethodDeclaration.js.map +1 -1
- package/dist/dev/src/components/DataclassDeclaration.js +14 -12
- package/dist/dev/src/components/DataclassDeclaration.js.map +1 -1
- package/dist/dev/src/components/DecoratorList.js +55 -0
- package/dist/dev/src/components/DecoratorList.js.map +1 -0
- package/dist/dev/src/components/EnumDeclaration.js +21 -12
- package/dist/dev/src/components/EnumDeclaration.js.map +1 -1
- package/dist/dev/src/components/FunctionBase.js +21 -10
- package/dist/dev/src/components/FunctionBase.js.map +1 -1
- package/dist/dev/src/components/FutureStatement.js +1 -1
- package/dist/dev/src/components/MethodBase.js +16 -4
- package/dist/dev/src/components/MethodBase.js.map +1 -1
- package/dist/dev/src/components/PropertyDeclaration.js +68 -17
- package/dist/dev/src/components/PropertyDeclaration.js.map +1 -1
- package/dist/dev/src/components/PydanticClassDeclaration.js +136 -0
- package/dist/dev/src/components/PydanticClassDeclaration.js.map +1 -0
- package/dist/dev/src/components/SourceFile.js +44 -32
- package/dist/dev/src/components/SourceFile.js.map +1 -1
- package/dist/dev/src/components/StaticMethodDeclaration.js +19 -5
- package/dist/dev/src/components/StaticMethodDeclaration.js.map +1 -1
- package/dist/dev/src/components/index.js +1 -0
- package/dist/dev/src/components/index.js.map +1 -1
- package/dist/dev/test/callsignatures.test.js +471 -297
- package/dist/dev/test/callsignatures.test.js.map +1 -1
- package/dist/dev/test/class-method-declaration.test.js +21 -10
- package/dist/dev/test/class-method-declaration.test.js.map +1 -1
- package/dist/dev/test/classdeclarations.test.js +480 -381
- package/dist/dev/test/classdeclarations.test.js.map +1 -1
- package/dist/dev/test/classinstantiations.test.js +201 -168
- package/dist/dev/test/classinstantiations.test.js.map +1 -1
- package/dist/dev/test/constructordeclaration.test.js +22 -11
- package/dist/dev/test/constructordeclaration.test.js.map +1 -1
- package/dist/dev/test/dataclassdeclarations.test.js +345 -358
- package/dist/dev/test/dataclassdeclarations.test.js.map +1 -1
- package/dist/dev/test/decoratorlist.test.js +131 -0
- package/dist/dev/test/decoratorlist.test.js.map +1 -0
- package/dist/dev/test/dundermethoddeclaration.test.js +22 -11
- package/dist/dev/test/dundermethoddeclaration.test.js.map +1 -1
- package/dist/dev/test/enums.test.js +231 -166
- package/dist/dev/test/enums.test.js.map +1 -1
- package/dist/dev/test/externals.test.js +57 -45
- package/dist/dev/test/externals.test.js.map +1 -1
- package/dist/dev/test/factories.test.js +124 -50
- package/dist/dev/test/factories.test.js.map +1 -1
- package/dist/dev/test/functioncallexpressions.test.js +199 -164
- package/dist/dev/test/functioncallexpressions.test.js.map +1 -1
- package/dist/dev/test/functiondeclaration.test.js +452 -265
- package/dist/dev/test/functiondeclaration.test.js.map +1 -1
- package/dist/dev/test/imports.test.js +273 -221
- package/dist/dev/test/imports.test.js.map +1 -1
- package/dist/dev/test/memberexpressions.test.js +1237 -972
- package/dist/dev/test/memberexpressions.test.js.map +1 -1
- package/dist/dev/test/methoddeclaration.test.js +200 -45
- package/dist/dev/test/methoddeclaration.test.js.map +1 -1
- package/dist/dev/test/namepolicies.test.js +130 -94
- package/dist/dev/test/namepolicies.test.js.map +1 -1
- package/dist/dev/test/propertydeclaration.test.js +177 -46
- package/dist/dev/test/propertydeclaration.test.js.map +1 -1
- package/dist/dev/test/pydanticclassdeclarations.test.js +1089 -0
- package/dist/dev/test/pydanticclassdeclarations.test.js.map +1 -0
- package/dist/dev/test/pydocs.test.js +888 -715
- package/dist/dev/test/pydocs.test.js.map +1 -1
- package/dist/dev/test/references.test.js +42 -35
- package/dist/dev/test/references.test.js.map +1 -1
- package/dist/dev/test/sourcefiles.test.js +1109 -841
- package/dist/dev/test/sourcefiles.test.js.map +1 -1
- package/dist/dev/test/staticmethoddeclaration.test.js +21 -10
- package/dist/dev/test/staticmethoddeclaration.test.js.map +1 -1
- package/dist/dev/test/type-checking-imports.test.js +408 -359
- package/dist/dev/test/type-checking-imports.test.js.map +1 -1
- package/dist/dev/test/typereference.test.js +55 -40
- package/dist/dev/test/typereference.test.js.map +1 -1
- package/dist/dev/test/uniontypeexpression.test.js +222 -146
- package/dist/dev/test/uniontypeexpression.test.js.map +1 -1
- package/dist/dev/test/utils.js +39 -77
- package/dist/dev/test/utils.js.map +1 -1
- package/dist/dev/test/values.test.js +237 -101
- package/dist/dev/test/values.test.js.map +1 -1
- package/dist/dev/test/variables.test.js +321 -203
- package/dist/dev/test/variables.test.js.map +1 -1
- package/dist/dev/test/vitest.setup.js +2 -0
- package/dist/dev/test/vitest.setup.js.map +1 -0
- package/dist/src/builtins/python.d.ts +30 -0
- package/dist/src/builtins/python.d.ts.map +1 -1
- package/dist/src/builtins/python.js +46 -0
- package/dist/src/builtins/python.js.map +1 -1
- package/dist/src/components/ClassDeclaration.d.ts +21 -0
- package/dist/src/components/ClassDeclaration.d.ts.map +1 -1
- package/dist/src/components/ClassDeclaration.js +6 -1
- package/dist/src/components/ClassDeclaration.js.map +1 -1
- package/dist/src/components/ClassMethodDeclaration.d.ts +5 -1
- package/dist/src/components/ClassMethodDeclaration.d.ts.map +1 -1
- package/dist/src/components/ClassMethodDeclaration.js +14 -3
- package/dist/src/components/ClassMethodDeclaration.js.map +1 -1
- package/dist/src/components/DataclassDeclaration.d.ts.map +1 -1
- package/dist/src/components/DataclassDeclaration.js +10 -4
- package/dist/src/components/DataclassDeclaration.js.map +1 -1
- package/dist/src/components/DecoratorList.d.ts +43 -0
- package/dist/src/components/DecoratorList.d.ts.map +1 -0
- package/dist/src/components/DecoratorList.js +47 -0
- package/dist/src/components/DecoratorList.js.map +1 -0
- package/dist/src/components/EnumDeclaration.d.ts +9 -0
- package/dist/src/components/EnumDeclaration.d.ts.map +1 -1
- package/dist/src/components/EnumDeclaration.js +6 -1
- package/dist/src/components/EnumDeclaration.js.map +1 -1
- package/dist/src/components/FunctionBase.d.ts +31 -1
- package/dist/src/components/FunctionBase.d.ts.map +1 -1
- package/dist/src/components/FunctionBase.js +9 -2
- package/dist/src/components/FunctionBase.js.map +1 -1
- package/dist/src/components/FutureStatement.d.ts +1 -1
- package/dist/src/components/FutureStatement.js +1 -1
- package/dist/src/components/MethodBase.d.ts.map +1 -1
- package/dist/src/components/MethodBase.js +10 -2
- package/dist/src/components/MethodBase.js.map +1 -1
- package/dist/src/components/PropertyDeclaration.d.ts +29 -0
- package/dist/src/components/PropertyDeclaration.d.ts.map +1 -1
- package/dist/src/components/PropertyDeclaration.js +48 -1
- package/dist/src/components/PropertyDeclaration.js.map +1 -1
- package/dist/src/components/PydanticClassDeclaration.d.ts +120 -0
- package/dist/src/components/PydanticClassDeclaration.d.ts.map +1 -0
- package/dist/src/components/PydanticClassDeclaration.js +116 -0
- package/dist/src/components/PydanticClassDeclaration.js.map +1 -0
- package/dist/src/components/SourceFile.d.ts +2 -2
- package/dist/src/components/SourceFile.d.ts.map +1 -1
- package/dist/src/components/SourceFile.js +12 -0
- package/dist/src/components/SourceFile.js.map +1 -1
- package/dist/src/components/StaticMethodDeclaration.d.ts +3 -0
- package/dist/src/components/StaticMethodDeclaration.d.ts.map +1 -1
- package/dist/src/components/StaticMethodDeclaration.js +13 -3
- package/dist/src/components/StaticMethodDeclaration.js.map +1 -1
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +1 -0
- package/dist/src/components/index.js.map +1 -1
- package/dist/test/callsignatures.test.js +346 -272
- package/dist/test/callsignatures.test.js.map +1 -1
- package/dist/test/class-method-declaration.test.js +7 -4
- package/dist/test/class-method-declaration.test.js.map +1 -1
- package/dist/test/classdeclarations.test.js +316 -277
- package/dist/test/classdeclarations.test.js.map +1 -1
- package/dist/test/classinstantiations.test.js +112 -103
- package/dist/test/classinstantiations.test.js.map +1 -1
- package/dist/test/constructordeclaration.test.js +7 -4
- package/dist/test/constructordeclaration.test.js.map +1 -1
- package/dist/test/dataclassdeclarations.test.js +153 -178
- package/dist/test/dataclassdeclarations.test.js.map +1 -1
- package/dist/test/decoratorlist.test.d.ts +2 -0
- package/dist/test/decoratorlist.test.d.ts.map +1 -0
- package/dist/test/decoratorlist.test.js +83 -0
- package/dist/test/decoratorlist.test.js.map +1 -0
- package/dist/test/dundermethoddeclaration.test.js +7 -4
- package/dist/test/dundermethoddeclaration.test.js.map +1 -1
- package/dist/test/enums.test.js +172 -143
- package/dist/test/enums.test.js.map +1 -1
- package/dist/test/externals.test.js +24 -24
- package/dist/test/externals.test.js.map +1 -1
- package/dist/test/factories.test.js +75 -33
- package/dist/test/factories.test.js.map +1 -1
- package/dist/test/functioncallexpressions.test.js +117 -106
- package/dist/test/functioncallexpressions.test.js.map +1 -1
- package/dist/test/functiondeclaration.test.js +256 -173
- package/dist/test/functiondeclaration.test.js.map +1 -1
- package/dist/test/imports.test.js +171 -143
- package/dist/test/imports.test.js.map +1 -1
- package/dist/test/memberexpressions.test.js +582 -453
- package/dist/test/memberexpressions.test.js.map +1 -1
- package/dist/test/methoddeclaration.test.js +106 -19
- package/dist/test/methoddeclaration.test.js.map +1 -1
- package/dist/test/namepolicies.test.js +90 -78
- package/dist/test/namepolicies.test.js.map +1 -1
- package/dist/test/propertydeclaration.test.js +90 -15
- package/dist/test/propertydeclaration.test.js.map +1 -1
- package/dist/test/pydanticclassdeclarations.test.d.ts +2 -0
- package/dist/test/pydanticclassdeclarations.test.d.ts.map +1 -0
- package/dist/test/pydanticclassdeclarations.test.js +773 -0
- package/dist/test/pydanticclassdeclarations.test.js.map +1 -0
- package/dist/test/pydocs.test.js +573 -532
- package/dist/test/pydocs.test.js.map +1 -1
- package/dist/test/references.test.js +31 -28
- package/dist/test/references.test.js.map +1 -1
- package/dist/test/sourcefiles.test.js +700 -580
- package/dist/test/sourcefiles.test.js.map +1 -1
- package/dist/test/staticmethoddeclaration.test.js +7 -4
- package/dist/test/staticmethoddeclaration.test.js.map +1 -1
- package/dist/test/type-checking-imports.test.js +297 -284
- package/dist/test/type-checking-imports.test.js.map +1 -1
- package/dist/test/typereference.test.js +29 -22
- package/dist/test/typereference.test.js.map +1 -1
- package/dist/test/uniontypeexpression.test.js +124 -88
- package/dist/test/uniontypeexpression.test.js.map +1 -1
- package/dist/test/utils.d.ts +10 -17
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +32 -74
- package/dist/test/utils.js.map +1 -1
- package/dist/test/values.test.js +135 -67
- package/dist/test/values.test.js.map +1 -1
- package/dist/test/variables.test.js +201 -151
- package/dist/test/variables.test.js.map +1 -1
- package/dist/test/vitest.setup.d.ts +2 -0
- package/dist/test/vitest.setup.d.ts.map +1 -0
- package/dist/test/vitest.setup.js +2 -0
- package/dist/test/vitest.setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/api/components/ClassDeclaration.md +10 -7
- package/docs/api/components/ClassEnumDeclaration.md +9 -6
- package/docs/api/components/ClassMethodDeclaration.md +7 -5
- package/docs/api/components/DataclassDeclaration.md +9 -5
- package/docs/api/components/DunderMethodDeclaration.md +7 -5
- package/docs/api/components/FunctionDeclaration.md +9 -5
- package/docs/api/components/FutureStatement.md +1 -1
- package/docs/api/components/MethodDeclaration.md +11 -6
- package/docs/api/components/PropertyDeclaration.md +11 -8
- package/docs/api/components/PydanticClassDeclaration.md +146 -0
- package/docs/api/components/SourceFile.md +20 -8
- package/docs/api/components/StaticMethodDeclaration.md +7 -5
- package/docs/api/components/index.md +1 -0
- package/docs/api/index.md +3 -3
- package/docs/api/types/CommonFunctionProps.md +4 -3
- package/docs/api/types/PydanticModelConfigDictProps.md +32 -0
- package/docs/api/types/index.md +1 -0
- package/docs/api/variables/index.md +3 -0
- package/docs/api/variables/pydanticModule.md +27 -0
- package/docs/api/variables/pydanticSettingsModule.md +7 -0
- package/docs/api/variables/typingModule.md +9 -0
- package/package.json +4 -4
- package/src/builtins/python.ts +539 -1
- package/src/components/ClassDeclaration.tsx +23 -0
- package/src/components/ClassMethodDeclaration.tsx +9 -1
- package/src/components/DataclassDeclaration.tsx +18 -11
- package/src/components/DecoratorList.tsx +50 -0
- package/src/components/EnumDeclaration.tsx +11 -0
- package/src/components/FunctionBase.tsx +34 -3
- package/src/components/FutureStatement.tsx +1 -1
- package/src/components/MethodBase.tsx +6 -2
- package/src/components/PropertyDeclaration.tsx +48 -1
- package/src/components/PydanticClassDeclaration.tsx +222 -0
- package/src/components/SourceFile.tsx +6 -1
- package/src/components/StaticMethodDeclaration.tsx +7 -1
- package/src/components/index.ts +1 -0
- package/temp/api.json +1158 -86
- package/test/callsignatures.test.tsx +309 -283
- package/test/class-method-declaration.test.tsx +3 -4
- package/test/classdeclarations.test.tsx +277 -235
- package/test/classinstantiations.test.tsx +115 -109
- package/test/constructordeclaration.test.tsx +9 -6
- package/test/dataclassdeclarations.test.tsx +256 -349
- package/test/decoratorlist.test.tsx +114 -0
- package/test/dundermethoddeclaration.test.tsx +3 -4
- package/test/enums.test.tsx +84 -71
- package/test/externals.test.tsx +25 -25
- package/test/factories.test.tsx +64 -22
- package/test/functioncallexpressions.test.tsx +123 -109
- package/test/functiondeclaration.test.tsx +218 -140
- package/test/imports.test.tsx +119 -91
- package/test/memberexpressions.test.tsx +265 -207
- package/test/methoddeclaration.test.tsx +115 -24
- package/test/namepolicies.test.tsx +69 -69
- package/test/propertydeclaration.test.tsx +71 -7
- package/test/pydanticclassdeclarations.test.tsx +704 -0
- package/test/pydocs.test.tsx +531 -579
- package/test/references.test.tsx +24 -23
- package/test/sourcefiles.test.tsx +527 -492
- package/test/staticmethoddeclaration.test.tsx +3 -4
- package/test/type-checking-imports.test.tsx +206 -218
- package/test/typereference.test.tsx +15 -12
- package/test/uniontypeexpression.test.tsx +74 -61
- package/test/utils.tsx +26 -110
- package/test/values.test.tsx +82 -32
- package/test/variables.test.tsx +162 -142
- package/test/vitest.setup.ts +1 -0
- package/vitest.config.ts +3 -0
|
@@ -1,11 +1,32 @@
|
|
|
1
1
|
import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
|
-
import { Prose, namekey, refkey } from "@alloy-js/core";
|
|
3
|
-
import { d } from "@alloy-js/core/testing";
|
|
2
|
+
import { Prose, namekey, refkey, render } from "@alloy-js/core";
|
|
4
3
|
import { describe, expect, it } from "vitest";
|
|
5
4
|
import { dataclassesModule } from "../src/builtins/python.js";
|
|
6
5
|
import * as py from "../src/index.js";
|
|
7
|
-
import {
|
|
6
|
+
import { TestOutput, TestOutputDirectory } from "./utils.js";
|
|
8
7
|
describe("DataclassDeclaration", () => {
|
|
8
|
+
it("stacks user decorators above @dataclass", () => {
|
|
9
|
+
expect(_$createComponent(TestOutput, {
|
|
10
|
+
path: "user.py",
|
|
11
|
+
externals: [dataclassesModule],
|
|
12
|
+
get children() {
|
|
13
|
+
return _$createComponent(py.DataclassDeclaration, {
|
|
14
|
+
name: "User",
|
|
15
|
+
frozen: true,
|
|
16
|
+
decorators: ["@final"]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
})).toRenderTo(`
|
|
20
|
+
from dataclasses import dataclass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@final
|
|
24
|
+
@dataclass(frozen=True)
|
|
25
|
+
class User:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
`);
|
|
29
|
+
});
|
|
9
30
|
it("Creates a dataclass with a class doc", () => {
|
|
10
31
|
const doc = _$createComponent(py.ClassDoc, {
|
|
11
32
|
get description() {
|
|
@@ -14,18 +35,16 @@ describe("DataclassDeclaration", () => {
|
|
|
14
35
|
})];
|
|
15
36
|
}
|
|
16
37
|
});
|
|
17
|
-
|
|
38
|
+
expect(_$createComponent(TestOutput, {
|
|
18
39
|
path: "user.py",
|
|
40
|
+
externals: [dataclassesModule],
|
|
19
41
|
get children() {
|
|
20
42
|
return _$createComponent(py.DataclassDeclaration, {
|
|
21
43
|
name: "User",
|
|
22
44
|
doc: doc
|
|
23
45
|
});
|
|
24
46
|
}
|
|
25
|
-
})
|
|
26
|
-
externals: [dataclassesModule]
|
|
27
|
-
});
|
|
28
|
-
expect(res).toRenderTo(d`
|
|
47
|
+
})).toRenderTo(`
|
|
29
48
|
from dataclasses import dataclass
|
|
30
49
|
|
|
31
50
|
|
|
@@ -37,12 +56,12 @@ describe("DataclassDeclaration", () => {
|
|
|
37
56
|
|
|
38
57
|
pass
|
|
39
58
|
|
|
40
|
-
|
|
41
59
|
`);
|
|
42
60
|
});
|
|
43
61
|
it("Creates a dataclass with fields and defaults", () => {
|
|
44
|
-
|
|
62
|
+
expect(_$createComponent(TestOutput, {
|
|
45
63
|
path: "user.py",
|
|
64
|
+
externals: [dataclassesModule],
|
|
46
65
|
get children() {
|
|
47
66
|
return _$createComponent(py.DataclassDeclaration, {
|
|
48
67
|
name: "User",
|
|
@@ -72,10 +91,7 @@ describe("DataclassDeclaration", () => {
|
|
|
72
91
|
}
|
|
73
92
|
});
|
|
74
93
|
}
|
|
75
|
-
})
|
|
76
|
-
externals: [dataclassesModule]
|
|
77
|
-
});
|
|
78
|
-
expect(res).toRenderTo(d`
|
|
94
|
+
})).toRenderTo(`
|
|
79
95
|
from dataclasses import dataclass
|
|
80
96
|
from typing import TYPE_CHECKING
|
|
81
97
|
|
|
@@ -89,12 +105,12 @@ describe("DataclassDeclaration", () => {
|
|
|
89
105
|
_: KW_ONLY
|
|
90
106
|
name: str = "Anonymous"
|
|
91
107
|
|
|
92
|
-
|
|
93
108
|
`);
|
|
94
109
|
});
|
|
95
110
|
it("Creates a dataclass with keyword arguments", () => {
|
|
96
|
-
|
|
111
|
+
expect(_$createComponent(TestOutput, {
|
|
97
112
|
path: "user.py",
|
|
113
|
+
externals: [dataclassesModule],
|
|
98
114
|
get children() {
|
|
99
115
|
return _$createComponent(py.DataclassDeclaration, {
|
|
100
116
|
name: "User",
|
|
@@ -111,10 +127,7 @@ describe("DataclassDeclaration", () => {
|
|
|
111
127
|
}
|
|
112
128
|
});
|
|
113
129
|
}
|
|
114
|
-
})
|
|
115
|
-
externals: [dataclassesModule]
|
|
116
|
-
});
|
|
117
|
-
expect(res).toRenderTo(d`
|
|
130
|
+
})).toRenderTo(`
|
|
118
131
|
from dataclasses import dataclass
|
|
119
132
|
|
|
120
133
|
|
|
@@ -122,12 +135,12 @@ describe("DataclassDeclaration", () => {
|
|
|
122
135
|
class User:
|
|
123
136
|
id: int
|
|
124
137
|
|
|
125
|
-
|
|
126
138
|
`);
|
|
127
139
|
});
|
|
128
140
|
it("Creates a dataclass with all keyword arguments", () => {
|
|
129
|
-
|
|
141
|
+
expect(_$createComponent(TestOutput, {
|
|
130
142
|
path: "user.py",
|
|
143
|
+
externals: [dataclassesModule],
|
|
131
144
|
get children() {
|
|
132
145
|
return _$createComponent(py.DataclassDeclaration, {
|
|
133
146
|
name: "User",
|
|
@@ -143,10 +156,7 @@ describe("DataclassDeclaration", () => {
|
|
|
143
156
|
weakrefSlot: false
|
|
144
157
|
});
|
|
145
158
|
}
|
|
146
|
-
})
|
|
147
|
-
externals: [dataclassesModule]
|
|
148
|
-
});
|
|
149
|
-
expect(res).toRenderTo(d`
|
|
159
|
+
})).toRenderTo(`
|
|
150
160
|
from dataclasses import dataclass
|
|
151
161
|
|
|
152
162
|
|
|
@@ -154,25 +164,24 @@ describe("DataclassDeclaration", () => {
|
|
|
154
164
|
class User:
|
|
155
165
|
pass
|
|
156
166
|
|
|
157
|
-
|
|
158
167
|
`);
|
|
159
168
|
});
|
|
160
169
|
it("Throws error when weakref_slot=True without slots=True", () => {
|
|
161
|
-
expect(() =>
|
|
170
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
162
171
|
path: "user.py",
|
|
172
|
+
externals: [dataclassesModule],
|
|
163
173
|
get children() {
|
|
164
174
|
return _$createComponent(py.DataclassDeclaration, {
|
|
165
175
|
name: "User",
|
|
166
176
|
weakrefSlot: true
|
|
167
177
|
});
|
|
168
178
|
}
|
|
169
|
-
})
|
|
170
|
-
externals: [dataclassesModule]
|
|
171
|
-
})).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
|
|
179
|
+
}))).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
|
|
172
180
|
});
|
|
173
181
|
it("Allows weakref_slot=True when slots=True", () => {
|
|
174
|
-
|
|
182
|
+
expect(_$createComponent(TestOutput, {
|
|
175
183
|
path: "user.py",
|
|
184
|
+
externals: [dataclassesModule],
|
|
176
185
|
get children() {
|
|
177
186
|
return _$createComponent(py.DataclassDeclaration, {
|
|
178
187
|
name: "User",
|
|
@@ -180,10 +189,7 @@ describe("DataclassDeclaration", () => {
|
|
|
180
189
|
weakrefSlot: true
|
|
181
190
|
});
|
|
182
191
|
}
|
|
183
|
-
})
|
|
184
|
-
externals: [dataclassesModule]
|
|
185
|
-
});
|
|
186
|
-
expect(res).toRenderTo(d`
|
|
192
|
+
})).toRenderTo(`
|
|
187
193
|
from dataclasses import dataclass
|
|
188
194
|
|
|
189
195
|
|
|
@@ -191,12 +197,12 @@ describe("DataclassDeclaration", () => {
|
|
|
191
197
|
class User:
|
|
192
198
|
pass
|
|
193
199
|
|
|
194
|
-
|
|
195
200
|
`);
|
|
196
201
|
});
|
|
197
202
|
it("Throws error when order=True and eq=False", () => {
|
|
198
|
-
expect(() =>
|
|
203
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
199
204
|
path: "user.py",
|
|
205
|
+
externals: [dataclassesModule],
|
|
200
206
|
get children() {
|
|
201
207
|
return _$createComponent(py.DataclassDeclaration, {
|
|
202
208
|
name: "User",
|
|
@@ -204,23 +210,19 @@ describe("DataclassDeclaration", () => {
|
|
|
204
210
|
eq: false
|
|
205
211
|
});
|
|
206
212
|
}
|
|
207
|
-
})
|
|
208
|
-
externals: [dataclassesModule]
|
|
209
|
-
})).toThrowError(/order=True requires eq=True/);
|
|
213
|
+
}))).toThrowError(/order=True requires eq=True/);
|
|
210
214
|
});
|
|
211
215
|
it("Creates a dataclass with order=True and no conflicting methods", () => {
|
|
212
|
-
|
|
216
|
+
expect(_$createComponent(TestOutput, {
|
|
213
217
|
path: "user.py",
|
|
218
|
+
externals: [dataclassesModule],
|
|
214
219
|
get children() {
|
|
215
220
|
return _$createComponent(py.DataclassDeclaration, {
|
|
216
221
|
name: "User",
|
|
217
222
|
order: true
|
|
218
223
|
});
|
|
219
224
|
}
|
|
220
|
-
})
|
|
221
|
-
externals: [dataclassesModule]
|
|
222
|
-
});
|
|
223
|
-
expect(res).toRenderTo(d`
|
|
225
|
+
})).toRenderTo(`
|
|
224
226
|
from dataclasses import dataclass
|
|
225
227
|
|
|
226
228
|
|
|
@@ -228,12 +230,12 @@ describe("DataclassDeclaration", () => {
|
|
|
228
230
|
class User:
|
|
229
231
|
pass
|
|
230
232
|
|
|
231
|
-
|
|
232
233
|
`);
|
|
233
234
|
});
|
|
234
235
|
it("Throws error when order=True and class defines __lt__", () => {
|
|
235
|
-
expect(() =>
|
|
236
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
236
237
|
path: "user.py",
|
|
238
|
+
externals: [dataclassesModule],
|
|
237
239
|
get children() {
|
|
238
240
|
return _$createComponent(py.DataclassDeclaration, {
|
|
239
241
|
name: "User",
|
|
@@ -245,13 +247,12 @@ describe("DataclassDeclaration", () => {
|
|
|
245
247
|
}
|
|
246
248
|
});
|
|
247
249
|
}
|
|
248
|
-
})
|
|
249
|
-
externals: [dataclassesModule]
|
|
250
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
250
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
251
251
|
});
|
|
252
252
|
it("Throws error when order=True and class defines __le__", () => {
|
|
253
|
-
expect(() =>
|
|
253
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
254
254
|
path: "user.py",
|
|
255
|
+
externals: [dataclassesModule],
|
|
255
256
|
get children() {
|
|
256
257
|
return _$createComponent(py.DataclassDeclaration, {
|
|
257
258
|
name: "User",
|
|
@@ -263,13 +264,12 @@ describe("DataclassDeclaration", () => {
|
|
|
263
264
|
}
|
|
264
265
|
});
|
|
265
266
|
}
|
|
266
|
-
})
|
|
267
|
-
externals: [dataclassesModule]
|
|
268
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
|
|
267
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
|
|
269
268
|
});
|
|
270
269
|
it("Throws error when order=True and class defines __gt__", () => {
|
|
271
|
-
expect(() =>
|
|
270
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
272
271
|
path: "user.py",
|
|
272
|
+
externals: [dataclassesModule],
|
|
273
273
|
get children() {
|
|
274
274
|
return _$createComponent(py.DataclassDeclaration, {
|
|
275
275
|
name: "User",
|
|
@@ -281,13 +281,12 @@ describe("DataclassDeclaration", () => {
|
|
|
281
281
|
}
|
|
282
282
|
});
|
|
283
283
|
}
|
|
284
|
-
})
|
|
285
|
-
externals: [dataclassesModule]
|
|
286
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
|
|
284
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
|
|
287
285
|
});
|
|
288
286
|
it("Throws error when order=True and class defines __ge__", () => {
|
|
289
|
-
expect(() =>
|
|
287
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
290
288
|
path: "user.py",
|
|
289
|
+
externals: [dataclassesModule],
|
|
291
290
|
get children() {
|
|
292
291
|
return _$createComponent(py.DataclassDeclaration, {
|
|
293
292
|
name: "User",
|
|
@@ -299,9 +298,7 @@ describe("DataclassDeclaration", () => {
|
|
|
299
298
|
}
|
|
300
299
|
});
|
|
301
300
|
}
|
|
302
|
-
})
|
|
303
|
-
externals: [dataclassesModule]
|
|
304
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
|
|
301
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
|
|
305
302
|
});
|
|
306
303
|
it("Throws error when order=True and a wrapper defines __lt__", () => {
|
|
307
304
|
function Wrapper() {
|
|
@@ -309,8 +306,9 @@ describe("DataclassDeclaration", () => {
|
|
|
309
306
|
name: "__lt__"
|
|
310
307
|
});
|
|
311
308
|
}
|
|
312
|
-
expect(() =>
|
|
309
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
313
310
|
path: "user.py",
|
|
311
|
+
externals: [dataclassesModule],
|
|
314
312
|
get children() {
|
|
315
313
|
return _$createComponent(py.DataclassDeclaration, {
|
|
316
314
|
name: "User",
|
|
@@ -320,13 +318,12 @@ describe("DataclassDeclaration", () => {
|
|
|
320
318
|
}
|
|
321
319
|
});
|
|
322
320
|
}
|
|
323
|
-
})
|
|
324
|
-
externals: [dataclassesModule]
|
|
325
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
321
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
326
322
|
});
|
|
327
323
|
it("Throws error when unsafe_hash=True and class defines __hash__", () => {
|
|
328
|
-
expect(() =>
|
|
324
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
329
325
|
path: "user.py",
|
|
326
|
+
externals: [dataclassesModule],
|
|
330
327
|
get children() {
|
|
331
328
|
return _$createComponent(py.DataclassDeclaration, {
|
|
332
329
|
name: "User",
|
|
@@ -338,13 +335,12 @@ describe("DataclassDeclaration", () => {
|
|
|
338
335
|
}
|
|
339
336
|
});
|
|
340
337
|
}
|
|
341
|
-
})
|
|
342
|
-
externals: [dataclassesModule]
|
|
343
|
-
})).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
|
|
338
|
+
}))).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
|
|
344
339
|
});
|
|
345
340
|
it("Throws error when frozen=True and class defines __setattr__", () => {
|
|
346
|
-
expect(() =>
|
|
341
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
347
342
|
path: "user.py",
|
|
343
|
+
externals: [dataclassesModule],
|
|
348
344
|
get children() {
|
|
349
345
|
return _$createComponent(py.DataclassDeclaration, {
|
|
350
346
|
name: "User",
|
|
@@ -356,13 +352,12 @@ describe("DataclassDeclaration", () => {
|
|
|
356
352
|
}
|
|
357
353
|
});
|
|
358
354
|
}
|
|
359
|
-
})
|
|
360
|
-
externals: [dataclassesModule]
|
|
361
|
-
})).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
|
|
355
|
+
}))).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
|
|
362
356
|
});
|
|
363
357
|
it("Throws errorwhen frozen=True and class defines __delattr__", () => {
|
|
364
|
-
expect(() =>
|
|
358
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
365
359
|
path: "user.py",
|
|
360
|
+
externals: [dataclassesModule],
|
|
366
361
|
get children() {
|
|
367
362
|
return _$createComponent(py.DataclassDeclaration, {
|
|
368
363
|
name: "User",
|
|
@@ -374,13 +369,12 @@ describe("DataclassDeclaration", () => {
|
|
|
374
369
|
}
|
|
375
370
|
});
|
|
376
371
|
}
|
|
377
|
-
})
|
|
378
|
-
externals: [dataclassesModule]
|
|
379
|
-
})).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
|
|
372
|
+
}))).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
|
|
380
373
|
});
|
|
381
374
|
it("Throws error when slots=True and class defines __slots__", () => {
|
|
382
|
-
expect(() =>
|
|
375
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
383
376
|
path: "user.py",
|
|
377
|
+
externals: [dataclassesModule],
|
|
384
378
|
get children() {
|
|
385
379
|
return _$createComponent(py.DataclassDeclaration, {
|
|
386
380
|
name: "User",
|
|
@@ -392,13 +386,12 @@ describe("DataclassDeclaration", () => {
|
|
|
392
386
|
}
|
|
393
387
|
});
|
|
394
388
|
}
|
|
395
|
-
})
|
|
396
|
-
externals: [dataclassesModule]
|
|
397
|
-
})).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
|
|
389
|
+
}))).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
|
|
398
390
|
});
|
|
399
391
|
it("Creates a dataclass with kw_only=True on decorator (sentinel not used)", () => {
|
|
400
|
-
|
|
392
|
+
expect(_$createComponent(TestOutput, {
|
|
401
393
|
path: "user.py",
|
|
394
|
+
externals: [dataclassesModule],
|
|
402
395
|
get children() {
|
|
403
396
|
return _$createComponent(py.DataclassDeclaration, {
|
|
404
397
|
name: "User",
|
|
@@ -413,10 +406,7 @@ describe("DataclassDeclaration", () => {
|
|
|
413
406
|
}
|
|
414
407
|
});
|
|
415
408
|
}
|
|
416
|
-
})
|
|
417
|
-
externals: [dataclassesModule]
|
|
418
|
-
});
|
|
419
|
-
expect(res).toRenderTo(d`
|
|
409
|
+
})).toRenderTo(`
|
|
420
410
|
from dataclasses import dataclass
|
|
421
411
|
|
|
422
412
|
|
|
@@ -424,22 +414,19 @@ describe("DataclassDeclaration", () => {
|
|
|
424
414
|
class User:
|
|
425
415
|
id: int
|
|
426
416
|
|
|
427
|
-
|
|
428
417
|
`);
|
|
429
418
|
});
|
|
430
419
|
it("Creates a dataclass with base classes", () => {
|
|
431
|
-
|
|
420
|
+
expect(_$createComponent(TestOutput, {
|
|
432
421
|
path: "user.py",
|
|
422
|
+
externals: [dataclassesModule],
|
|
433
423
|
get children() {
|
|
434
424
|
return _$createComponent(py.DataclassDeclaration, {
|
|
435
425
|
name: "User",
|
|
436
426
|
bases: ["Base"]
|
|
437
427
|
});
|
|
438
428
|
}
|
|
439
|
-
})
|
|
440
|
-
externals: [dataclassesModule]
|
|
441
|
-
});
|
|
442
|
-
expect(res).toRenderTo(d`
|
|
429
|
+
})).toRenderTo(`
|
|
443
430
|
from dataclasses import dataclass
|
|
444
431
|
|
|
445
432
|
|
|
@@ -447,12 +434,12 @@ describe("DataclassDeclaration", () => {
|
|
|
447
434
|
class User(Base):
|
|
448
435
|
pass
|
|
449
436
|
|
|
450
|
-
|
|
451
437
|
`);
|
|
452
438
|
});
|
|
453
439
|
it("Throws error when more than one KW_ONLY sentinel is present", () => {
|
|
454
|
-
expect(() =>
|
|
440
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
455
441
|
path: "user.py",
|
|
442
|
+
externals: [dataclassesModule],
|
|
456
443
|
get children() {
|
|
457
444
|
return _$createComponent(py.DataclassDeclaration, {
|
|
458
445
|
name: "User",
|
|
@@ -483,13 +470,12 @@ describe("DataclassDeclaration", () => {
|
|
|
483
470
|
}
|
|
484
471
|
});
|
|
485
472
|
}
|
|
486
|
-
})
|
|
487
|
-
externals: [dataclassesModule]
|
|
488
|
-
})).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
473
|
+
}))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
489
474
|
});
|
|
490
475
|
it("Will raise arg validation errors first over member conflicts", () => {
|
|
491
|
-
expect(() =>
|
|
476
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
492
477
|
path: "user.py",
|
|
478
|
+
externals: [dataclassesModule],
|
|
493
479
|
get children() {
|
|
494
480
|
return _$createComponent(py.DataclassDeclaration, {
|
|
495
481
|
name: "User",
|
|
@@ -502,13 +488,12 @@ describe("DataclassDeclaration", () => {
|
|
|
502
488
|
}
|
|
503
489
|
});
|
|
504
490
|
}
|
|
505
|
-
})
|
|
506
|
-
externals: [dataclassesModule]
|
|
507
|
-
})).toThrowError(/order=True requires eq=True/);
|
|
491
|
+
}))).toThrowError(/order=True requires eq=True/);
|
|
508
492
|
});
|
|
509
493
|
it("Does not raise errors for member conflict checks without the equivalent kwargs", () => {
|
|
510
|
-
expect(() =>
|
|
494
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
511
495
|
path: "user.py",
|
|
496
|
+
externals: [dataclassesModule],
|
|
512
497
|
get children() {
|
|
513
498
|
return _$createComponent(py.DataclassDeclaration, {
|
|
514
499
|
name: "User",
|
|
@@ -527,23 +512,19 @@ describe("DataclassDeclaration", () => {
|
|
|
527
512
|
}
|
|
528
513
|
});
|
|
529
514
|
}
|
|
530
|
-
})
|
|
531
|
-
externals: [dataclassesModule]
|
|
532
|
-
})).not.toThrow();
|
|
515
|
+
}))).not.toThrow();
|
|
533
516
|
});
|
|
534
517
|
it("Allows unsafe_hash=True when no __hash__ is defined", () => {
|
|
535
|
-
|
|
518
|
+
expect(_$createComponent(TestOutput, {
|
|
536
519
|
path: "user.py",
|
|
520
|
+
externals: [dataclassesModule],
|
|
537
521
|
get children() {
|
|
538
522
|
return _$createComponent(py.DataclassDeclaration, {
|
|
539
523
|
name: "User",
|
|
540
524
|
unsafeHash: true
|
|
541
525
|
});
|
|
542
526
|
}
|
|
543
|
-
})
|
|
544
|
-
externals: [dataclassesModule]
|
|
545
|
-
});
|
|
546
|
-
expect(res).toRenderTo(d`
|
|
527
|
+
})).toRenderTo(`
|
|
547
528
|
from dataclasses import dataclass
|
|
548
529
|
|
|
549
530
|
|
|
@@ -551,7 +532,6 @@ describe("DataclassDeclaration", () => {
|
|
|
551
532
|
class User:
|
|
552
533
|
pass
|
|
553
534
|
|
|
554
|
-
|
|
555
535
|
`);
|
|
556
536
|
});
|
|
557
537
|
it("Counts KW_ONLY sentinels through wrappers (symbol-level)", () => {
|
|
@@ -569,8 +549,9 @@ describe("DataclassDeclaration", () => {
|
|
|
569
549
|
omitNone: true
|
|
570
550
|
});
|
|
571
551
|
}
|
|
572
|
-
expect(() =>
|
|
552
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
573
553
|
path: "user.py",
|
|
554
|
+
externals: [dataclassesModule],
|
|
574
555
|
get children() {
|
|
575
556
|
return _$createComponent(py.DataclassDeclaration, {
|
|
576
557
|
name: "User",
|
|
@@ -590,23 +571,19 @@ describe("DataclassDeclaration", () => {
|
|
|
590
571
|
}
|
|
591
572
|
});
|
|
592
573
|
}
|
|
593
|
-
})
|
|
594
|
-
externals: [dataclassesModule]
|
|
595
|
-
})).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
574
|
+
}))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
596
575
|
});
|
|
597
576
|
it("Allows frozen=True when no conflicting dunders exist", () => {
|
|
598
|
-
|
|
577
|
+
expect(_$createComponent(TestOutput, {
|
|
599
578
|
path: "user.py",
|
|
579
|
+
externals: [dataclassesModule],
|
|
600
580
|
get children() {
|
|
601
581
|
return _$createComponent(py.DataclassDeclaration, {
|
|
602
582
|
name: "User",
|
|
603
583
|
frozen: true
|
|
604
584
|
});
|
|
605
585
|
}
|
|
606
|
-
})
|
|
607
|
-
externals: [dataclassesModule]
|
|
608
|
-
});
|
|
609
|
-
expect(res).toRenderTo(d`
|
|
586
|
+
})).toRenderTo(`
|
|
610
587
|
from dataclasses import dataclass
|
|
611
588
|
|
|
612
589
|
|
|
@@ -614,22 +591,19 @@ describe("DataclassDeclaration", () => {
|
|
|
614
591
|
class User:
|
|
615
592
|
pass
|
|
616
593
|
|
|
617
|
-
|
|
618
594
|
`);
|
|
619
595
|
});
|
|
620
596
|
it("Allows slots=True when no __slots__ is defined", () => {
|
|
621
|
-
|
|
597
|
+
expect(_$createComponent(TestOutput, {
|
|
622
598
|
path: "user.py",
|
|
599
|
+
externals: [dataclassesModule],
|
|
623
600
|
get children() {
|
|
624
601
|
return _$createComponent(py.DataclassDeclaration, {
|
|
625
602
|
name: "User",
|
|
626
603
|
slots: true
|
|
627
604
|
});
|
|
628
605
|
}
|
|
629
|
-
})
|
|
630
|
-
externals: [dataclassesModule]
|
|
631
|
-
});
|
|
632
|
-
expect(res).toRenderTo(d`
|
|
606
|
+
})).toRenderTo(`
|
|
633
607
|
from dataclasses import dataclass
|
|
634
608
|
|
|
635
609
|
|
|
@@ -637,75 +611,76 @@ describe("DataclassDeclaration", () => {
|
|
|
637
611
|
class User:
|
|
638
612
|
pass
|
|
639
613
|
|
|
640
|
-
|
|
641
614
|
`);
|
|
642
615
|
});
|
|
643
616
|
it("Forwards refkey prop for symbol resolution in type references", () => {
|
|
644
617
|
const userRefkey = refkey();
|
|
645
|
-
|
|
646
|
-
|
|
618
|
+
expect(_$createComponent(TestOutputDirectory, {
|
|
619
|
+
externals: [dataclassesModule],
|
|
647
620
|
get children() {
|
|
648
|
-
return _$createComponent(py.
|
|
649
|
-
|
|
650
|
-
refkey: userRefkey,
|
|
621
|
+
return [_$createComponent(py.SourceFile, {
|
|
622
|
+
path: "models.py",
|
|
651
623
|
get children() {
|
|
652
|
-
return
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
624
|
+
return _$createComponent(py.DataclassDeclaration, {
|
|
625
|
+
name: "User",
|
|
626
|
+
refkey: userRefkey,
|
|
627
|
+
get children() {
|
|
628
|
+
return [_$createComponent(py.VariableDeclaration, {
|
|
629
|
+
instanceVariable: true,
|
|
630
|
+
omitNone: true,
|
|
631
|
+
name: "id",
|
|
632
|
+
type: "int"
|
|
633
|
+
}), _$createComponent(py.VariableDeclaration, {
|
|
634
|
+
instanceVariable: true,
|
|
635
|
+
omitNone: true,
|
|
636
|
+
name: "name",
|
|
637
|
+
type: "str"
|
|
638
|
+
})];
|
|
639
|
+
}
|
|
640
|
+
});
|
|
663
641
|
}
|
|
664
|
-
})
|
|
665
|
-
|
|
666
|
-
}), _$createComponent(py.SourceFile, {
|
|
667
|
-
path: "services.py",
|
|
668
|
-
get children() {
|
|
669
|
-
return _$createComponent(py.FunctionDeclaration, {
|
|
670
|
-
name: "get_user",
|
|
671
|
-
returnType: userRefkey,
|
|
642
|
+
}), _$createComponent(py.SourceFile, {
|
|
643
|
+
path: "services.py",
|
|
672
644
|
get children() {
|
|
673
|
-
return
|
|
674
|
-
name: "
|
|
675
|
-
|
|
676
|
-
get
|
|
677
|
-
return _$createComponent(py.
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
645
|
+
return _$createComponent(py.FunctionDeclaration, {
|
|
646
|
+
name: "get_user",
|
|
647
|
+
returnType: userRefkey,
|
|
648
|
+
get children() {
|
|
649
|
+
return [_$createComponent(py.VariableDeclaration, {
|
|
650
|
+
name: "user",
|
|
651
|
+
type: userRefkey,
|
|
652
|
+
get initializer() {
|
|
653
|
+
return _$createComponent(py.ClassInstantiation, {
|
|
654
|
+
target: userRefkey,
|
|
655
|
+
args: ["1", '"Alice"']
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
}), _$createIntrinsic("hbr", {}), "return user"];
|
|
681
659
|
}
|
|
682
|
-
})
|
|
660
|
+
});
|
|
683
661
|
}
|
|
684
|
-
});
|
|
662
|
+
})];
|
|
685
663
|
}
|
|
686
|
-
})
|
|
687
|
-
externals: [dataclassesModule]
|
|
688
|
-
});
|
|
689
|
-
assertFileContents(res, {
|
|
664
|
+
})).toRenderTo({
|
|
690
665
|
"models.py": `
|
|
691
|
-
|
|
666
|
+
from dataclasses import dataclass
|
|
692
667
|
|
|
693
668
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
669
|
+
@dataclass
|
|
670
|
+
class User:
|
|
671
|
+
id: int
|
|
672
|
+
name: str
|
|
698
673
|
|
|
699
|
-
|
|
674
|
+
`,
|
|
700
675
|
"services.py": `
|
|
701
|
-
|
|
676
|
+
from models import User
|
|
702
677
|
|
|
703
678
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
679
|
+
def get_user() -> User:
|
|
680
|
+
user: User = User(1, "Alice")
|
|
681
|
+
return user
|
|
707
682
|
|
|
708
|
-
|
|
683
|
+
`
|
|
709
684
|
});
|
|
710
685
|
});
|
|
711
686
|
});
|