@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,40 @@
|
|
|
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
|
+
fileName: import.meta.url,
|
|
19
|
+
lineNumber: 11,
|
|
20
|
+
columnNumber: 9
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}, {
|
|
24
|
+
fileName: import.meta.url,
|
|
25
|
+
lineNumber: 10,
|
|
26
|
+
columnNumber: 7
|
|
27
|
+
})).toRenderTo(`
|
|
28
|
+
from dataclasses import dataclass
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@final
|
|
32
|
+
@dataclass(frozen=True)
|
|
33
|
+
class User:
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
`);
|
|
37
|
+
});
|
|
9
38
|
it("Creates a dataclass with a class doc", () => {
|
|
10
39
|
const doc = _$createComponent(py.ClassDoc, {
|
|
11
40
|
get description() {
|
|
@@ -13,35 +42,33 @@ describe("DataclassDeclaration", () => {
|
|
|
13
42
|
children: "Represents a user."
|
|
14
43
|
}, {
|
|
15
44
|
fileName: import.meta.url,
|
|
16
|
-
lineNumber:
|
|
45
|
+
lineNumber: 29,
|
|
17
46
|
columnNumber: 34
|
|
18
47
|
})];
|
|
19
48
|
}
|
|
20
49
|
}, {
|
|
21
50
|
fileName: import.meta.url,
|
|
22
|
-
lineNumber:
|
|
51
|
+
lineNumber: 29,
|
|
23
52
|
columnNumber: 7
|
|
24
53
|
});
|
|
25
|
-
|
|
54
|
+
expect(_$createComponent(TestOutput, {
|
|
26
55
|
path: "user.py",
|
|
56
|
+
externals: [dataclassesModule],
|
|
27
57
|
get children() {
|
|
28
58
|
return _$createComponent(py.DataclassDeclaration, {
|
|
29
59
|
name: "User",
|
|
30
60
|
doc: doc
|
|
31
61
|
}, {
|
|
32
62
|
fileName: import.meta.url,
|
|
33
|
-
lineNumber:
|
|
34
|
-
columnNumber:
|
|
63
|
+
lineNumber: 33,
|
|
64
|
+
columnNumber: 9
|
|
35
65
|
});
|
|
36
66
|
}
|
|
37
67
|
}, {
|
|
38
68
|
fileName: import.meta.url,
|
|
39
|
-
lineNumber:
|
|
40
|
-
columnNumber:
|
|
41
|
-
})
|
|
42
|
-
externals: [dataclassesModule]
|
|
43
|
-
});
|
|
44
|
-
expect(res).toRenderTo(d`
|
|
69
|
+
lineNumber: 32,
|
|
70
|
+
columnNumber: 7
|
|
71
|
+
})).toRenderTo(`
|
|
45
72
|
from dataclasses import dataclass
|
|
46
73
|
|
|
47
74
|
|
|
@@ -53,12 +80,12 @@ describe("DataclassDeclaration", () => {
|
|
|
53
80
|
|
|
54
81
|
pass
|
|
55
82
|
|
|
56
|
-
|
|
57
83
|
`);
|
|
58
84
|
});
|
|
59
85
|
it("Creates a dataclass with fields and defaults", () => {
|
|
60
|
-
|
|
86
|
+
expect(_$createComponent(TestOutput, {
|
|
61
87
|
path: "user.py",
|
|
88
|
+
externals: [dataclassesModule],
|
|
62
89
|
get children() {
|
|
63
90
|
return _$createComponent(py.DataclassDeclaration, {
|
|
64
91
|
name: "User",
|
|
@@ -70,8 +97,8 @@ describe("DataclassDeclaration", () => {
|
|
|
70
97
|
type: "int"
|
|
71
98
|
}, {
|
|
72
99
|
fileName: import.meta.url,
|
|
73
|
-
lineNumber:
|
|
74
|
-
columnNumber:
|
|
100
|
+
lineNumber: 56,
|
|
101
|
+
columnNumber: 11
|
|
75
102
|
}), _$createComponent(py.VariableDeclaration, {
|
|
76
103
|
instanceVariable: true,
|
|
77
104
|
get name() {
|
|
@@ -85,8 +112,8 @@ describe("DataclassDeclaration", () => {
|
|
|
85
112
|
omitNone: true
|
|
86
113
|
}, {
|
|
87
114
|
fileName: import.meta.url,
|
|
88
|
-
lineNumber:
|
|
89
|
-
columnNumber:
|
|
115
|
+
lineNumber: 62,
|
|
116
|
+
columnNumber: 11
|
|
90
117
|
}), _$createComponent(py.VariableDeclaration, {
|
|
91
118
|
instanceVariable: true,
|
|
92
119
|
name: "name",
|
|
@@ -94,24 +121,21 @@ describe("DataclassDeclaration", () => {
|
|
|
94
121
|
initializer: "Anonymous"
|
|
95
122
|
}, {
|
|
96
123
|
fileName: import.meta.url,
|
|
97
|
-
lineNumber:
|
|
98
|
-
columnNumber:
|
|
124
|
+
lineNumber: 68,
|
|
125
|
+
columnNumber: 11
|
|
99
126
|
})];
|
|
100
127
|
}
|
|
101
128
|
}, {
|
|
102
129
|
fileName: import.meta.url,
|
|
103
|
-
lineNumber:
|
|
104
|
-
columnNumber:
|
|
130
|
+
lineNumber: 55,
|
|
131
|
+
columnNumber: 9
|
|
105
132
|
});
|
|
106
133
|
}
|
|
107
134
|
}, {
|
|
108
135
|
fileName: import.meta.url,
|
|
109
|
-
lineNumber:
|
|
110
|
-
columnNumber:
|
|
111
|
-
})
|
|
112
|
-
externals: [dataclassesModule]
|
|
113
|
-
});
|
|
114
|
-
expect(res).toRenderTo(d`
|
|
136
|
+
lineNumber: 54,
|
|
137
|
+
columnNumber: 7
|
|
138
|
+
})).toRenderTo(`
|
|
115
139
|
from dataclasses import dataclass
|
|
116
140
|
from typing import TYPE_CHECKING
|
|
117
141
|
|
|
@@ -125,12 +149,12 @@ describe("DataclassDeclaration", () => {
|
|
|
125
149
|
_: KW_ONLY
|
|
126
150
|
name: str = "Anonymous"
|
|
127
151
|
|
|
128
|
-
|
|
129
152
|
`);
|
|
130
153
|
});
|
|
131
154
|
it("Creates a dataclass with keyword arguments", () => {
|
|
132
|
-
|
|
155
|
+
expect(_$createComponent(TestOutput, {
|
|
133
156
|
path: "user.py",
|
|
157
|
+
externals: [dataclassesModule],
|
|
134
158
|
get children() {
|
|
135
159
|
return _$createComponent(py.DataclassDeclaration, {
|
|
136
160
|
name: "User",
|
|
@@ -145,24 +169,21 @@ describe("DataclassDeclaration", () => {
|
|
|
145
169
|
type: "int"
|
|
146
170
|
}, {
|
|
147
171
|
fileName: import.meta.url,
|
|
148
|
-
lineNumber:
|
|
149
|
-
columnNumber:
|
|
172
|
+
lineNumber: 99,
|
|
173
|
+
columnNumber: 11
|
|
150
174
|
});
|
|
151
175
|
}
|
|
152
176
|
}, {
|
|
153
177
|
fileName: import.meta.url,
|
|
154
|
-
lineNumber:
|
|
155
|
-
columnNumber:
|
|
178
|
+
lineNumber: 98,
|
|
179
|
+
columnNumber: 9
|
|
156
180
|
});
|
|
157
181
|
}
|
|
158
182
|
}, {
|
|
159
183
|
fileName: import.meta.url,
|
|
160
|
-
lineNumber:
|
|
161
|
-
columnNumber:
|
|
162
|
-
})
|
|
163
|
-
externals: [dataclassesModule]
|
|
164
|
-
});
|
|
165
|
-
expect(res).toRenderTo(d`
|
|
184
|
+
lineNumber: 97,
|
|
185
|
+
columnNumber: 7
|
|
186
|
+
})).toRenderTo(`
|
|
166
187
|
from dataclasses import dataclass
|
|
167
188
|
|
|
168
189
|
|
|
@@ -170,12 +191,12 @@ describe("DataclassDeclaration", () => {
|
|
|
170
191
|
class User:
|
|
171
192
|
id: int
|
|
172
193
|
|
|
173
|
-
|
|
174
194
|
`);
|
|
175
195
|
});
|
|
176
196
|
it("Creates a dataclass with all keyword arguments", () => {
|
|
177
|
-
|
|
197
|
+
expect(_$createComponent(TestOutput, {
|
|
178
198
|
path: "user.py",
|
|
199
|
+
externals: [dataclassesModule],
|
|
179
200
|
get children() {
|
|
180
201
|
return _$createComponent(py.DataclassDeclaration, {
|
|
181
202
|
name: "User",
|
|
@@ -191,18 +212,15 @@ describe("DataclassDeclaration", () => {
|
|
|
191
212
|
weakrefSlot: false
|
|
192
213
|
}, {
|
|
193
214
|
fileName: import.meta.url,
|
|
194
|
-
lineNumber:
|
|
195
|
-
columnNumber:
|
|
215
|
+
lineNumber: 123,
|
|
216
|
+
columnNumber: 9
|
|
196
217
|
});
|
|
197
218
|
}
|
|
198
219
|
}, {
|
|
199
220
|
fileName: import.meta.url,
|
|
200
|
-
lineNumber:
|
|
201
|
-
columnNumber:
|
|
202
|
-
})
|
|
203
|
-
externals: [dataclassesModule]
|
|
204
|
-
});
|
|
205
|
-
expect(res).toRenderTo(d`
|
|
221
|
+
lineNumber: 122,
|
|
222
|
+
columnNumber: 7
|
|
223
|
+
})).toRenderTo(`
|
|
206
224
|
from dataclasses import dataclass
|
|
207
225
|
|
|
208
226
|
|
|
@@ -210,33 +228,32 @@ describe("DataclassDeclaration", () => {
|
|
|
210
228
|
class User:
|
|
211
229
|
pass
|
|
212
230
|
|
|
213
|
-
|
|
214
231
|
`);
|
|
215
232
|
});
|
|
216
233
|
it("Throws error when weakref_slot=True without slots=True", () => {
|
|
217
|
-
expect(() =>
|
|
234
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
218
235
|
path: "user.py",
|
|
236
|
+
externals: [dataclassesModule],
|
|
219
237
|
get children() {
|
|
220
238
|
return _$createComponent(py.DataclassDeclaration, {
|
|
221
239
|
name: "User",
|
|
222
240
|
weakrefSlot: true
|
|
223
241
|
}, {
|
|
224
242
|
fileName: import.meta.url,
|
|
225
|
-
lineNumber:
|
|
226
|
-
columnNumber:
|
|
243
|
+
lineNumber: 154,
|
|
244
|
+
columnNumber: 11
|
|
227
245
|
});
|
|
228
246
|
}
|
|
229
247
|
}, {
|
|
230
248
|
fileName: import.meta.url,
|
|
231
|
-
lineNumber:
|
|
232
|
-
columnNumber:
|
|
233
|
-
})
|
|
234
|
-
externals: [dataclassesModule]
|
|
235
|
-
})).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
|
|
249
|
+
lineNumber: 153,
|
|
250
|
+
columnNumber: 9
|
|
251
|
+
}))).toThrowError(/weakref_slot=True requires slots=True in @dataclass decorator/);
|
|
236
252
|
});
|
|
237
253
|
it("Allows weakref_slot=True when slots=True", () => {
|
|
238
|
-
|
|
254
|
+
expect(_$createComponent(TestOutput, {
|
|
239
255
|
path: "user.py",
|
|
256
|
+
externals: [dataclassesModule],
|
|
240
257
|
get children() {
|
|
241
258
|
return _$createComponent(py.DataclassDeclaration, {
|
|
242
259
|
name: "User",
|
|
@@ -244,18 +261,15 @@ describe("DataclassDeclaration", () => {
|
|
|
244
261
|
weakrefSlot: true
|
|
245
262
|
}, {
|
|
246
263
|
fileName: import.meta.url,
|
|
247
|
-
lineNumber:
|
|
248
|
-
columnNumber:
|
|
264
|
+
lineNumber: 165,
|
|
265
|
+
columnNumber: 9
|
|
249
266
|
});
|
|
250
267
|
}
|
|
251
268
|
}, {
|
|
252
269
|
fileName: import.meta.url,
|
|
253
|
-
lineNumber:
|
|
254
|
-
columnNumber:
|
|
255
|
-
})
|
|
256
|
-
externals: [dataclassesModule]
|
|
257
|
-
});
|
|
258
|
-
expect(res).toRenderTo(d`
|
|
270
|
+
lineNumber: 164,
|
|
271
|
+
columnNumber: 7
|
|
272
|
+
})).toRenderTo(`
|
|
259
273
|
from dataclasses import dataclass
|
|
260
274
|
|
|
261
275
|
|
|
@@ -263,12 +277,12 @@ describe("DataclassDeclaration", () => {
|
|
|
263
277
|
class User:
|
|
264
278
|
pass
|
|
265
279
|
|
|
266
|
-
|
|
267
280
|
`);
|
|
268
281
|
});
|
|
269
282
|
it("Throws error when order=True and eq=False", () => {
|
|
270
|
-
expect(() =>
|
|
283
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
271
284
|
path: "user.py",
|
|
285
|
+
externals: [dataclassesModule],
|
|
272
286
|
get children() {
|
|
273
287
|
return _$createComponent(py.DataclassDeclaration, {
|
|
274
288
|
name: "User",
|
|
@@ -276,39 +290,35 @@ describe("DataclassDeclaration", () => {
|
|
|
276
290
|
eq: false
|
|
277
291
|
}, {
|
|
278
292
|
fileName: import.meta.url,
|
|
279
|
-
lineNumber:
|
|
280
|
-
columnNumber:
|
|
293
|
+
lineNumber: 184,
|
|
294
|
+
columnNumber: 11
|
|
281
295
|
});
|
|
282
296
|
}
|
|
283
297
|
}, {
|
|
284
298
|
fileName: import.meta.url,
|
|
285
|
-
lineNumber:
|
|
286
|
-
columnNumber:
|
|
287
|
-
})
|
|
288
|
-
externals: [dataclassesModule]
|
|
289
|
-
})).toThrowError(/order=True requires eq=True/);
|
|
299
|
+
lineNumber: 183,
|
|
300
|
+
columnNumber: 9
|
|
301
|
+
}))).toThrowError(/order=True requires eq=True/);
|
|
290
302
|
});
|
|
291
303
|
it("Creates a dataclass with order=True and no conflicting methods", () => {
|
|
292
|
-
|
|
304
|
+
expect(_$createComponent(TestOutput, {
|
|
293
305
|
path: "user.py",
|
|
306
|
+
externals: [dataclassesModule],
|
|
294
307
|
get children() {
|
|
295
308
|
return _$createComponent(py.DataclassDeclaration, {
|
|
296
309
|
name: "User",
|
|
297
310
|
order: true
|
|
298
311
|
}, {
|
|
299
312
|
fileName: import.meta.url,
|
|
300
|
-
lineNumber:
|
|
301
|
-
columnNumber:
|
|
313
|
+
lineNumber: 193,
|
|
314
|
+
columnNumber: 9
|
|
302
315
|
});
|
|
303
316
|
}
|
|
304
317
|
}, {
|
|
305
318
|
fileName: import.meta.url,
|
|
306
|
-
lineNumber:
|
|
307
|
-
columnNumber:
|
|
308
|
-
})
|
|
309
|
-
externals: [dataclassesModule]
|
|
310
|
-
});
|
|
311
|
-
expect(res).toRenderTo(d`
|
|
319
|
+
lineNumber: 192,
|
|
320
|
+
columnNumber: 7
|
|
321
|
+
})).toRenderTo(`
|
|
312
322
|
from dataclasses import dataclass
|
|
313
323
|
|
|
314
324
|
|
|
@@ -316,12 +326,12 @@ describe("DataclassDeclaration", () => {
|
|
|
316
326
|
class User:
|
|
317
327
|
pass
|
|
318
328
|
|
|
319
|
-
|
|
320
329
|
`);
|
|
321
330
|
});
|
|
322
331
|
it("Throws error when order=True and class defines __lt__", () => {
|
|
323
|
-
expect(() =>
|
|
332
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
324
333
|
path: "user.py",
|
|
334
|
+
externals: [dataclassesModule],
|
|
325
335
|
get children() {
|
|
326
336
|
return _$createComponent(py.DataclassDeclaration, {
|
|
327
337
|
name: "User",
|
|
@@ -331,27 +341,26 @@ describe("DataclassDeclaration", () => {
|
|
|
331
341
|
name: "__lt__"
|
|
332
342
|
}, {
|
|
333
343
|
fileName: import.meta.url,
|
|
334
|
-
lineNumber:
|
|
335
|
-
columnNumber:
|
|
344
|
+
lineNumber: 213,
|
|
345
|
+
columnNumber: 13
|
|
336
346
|
});
|
|
337
347
|
}
|
|
338
348
|
}, {
|
|
339
349
|
fileName: import.meta.url,
|
|
340
|
-
lineNumber:
|
|
341
|
-
columnNumber:
|
|
350
|
+
lineNumber: 212,
|
|
351
|
+
columnNumber: 11
|
|
342
352
|
});
|
|
343
353
|
}
|
|
344
354
|
}, {
|
|
345
355
|
fileName: import.meta.url,
|
|
346
|
-
lineNumber:
|
|
347
|
-
columnNumber:
|
|
348
|
-
})
|
|
349
|
-
externals: [dataclassesModule]
|
|
350
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
356
|
+
lineNumber: 211,
|
|
357
|
+
columnNumber: 9
|
|
358
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
351
359
|
});
|
|
352
360
|
it("Throws error when order=True and class defines __le__", () => {
|
|
353
|
-
expect(() =>
|
|
361
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
354
362
|
path: "user.py",
|
|
363
|
+
externals: [dataclassesModule],
|
|
355
364
|
get children() {
|
|
356
365
|
return _$createComponent(py.DataclassDeclaration, {
|
|
357
366
|
name: "User",
|
|
@@ -361,27 +370,26 @@ describe("DataclassDeclaration", () => {
|
|
|
361
370
|
name: "__le__"
|
|
362
371
|
}, {
|
|
363
372
|
fileName: import.meta.url,
|
|
364
|
-
lineNumber:
|
|
365
|
-
columnNumber:
|
|
373
|
+
lineNumber: 227,
|
|
374
|
+
columnNumber: 13
|
|
366
375
|
});
|
|
367
376
|
}
|
|
368
377
|
}, {
|
|
369
378
|
fileName: import.meta.url,
|
|
370
|
-
lineNumber:
|
|
371
|
-
columnNumber:
|
|
379
|
+
lineNumber: 226,
|
|
380
|
+
columnNumber: 11
|
|
372
381
|
});
|
|
373
382
|
}
|
|
374
383
|
}, {
|
|
375
384
|
fileName: import.meta.url,
|
|
376
|
-
lineNumber:
|
|
377
|
-
columnNumber:
|
|
378
|
-
})
|
|
379
|
-
externals: [dataclassesModule]
|
|
380
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
|
|
385
|
+
lineNumber: 225,
|
|
386
|
+
columnNumber: 9
|
|
387
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __le__\(\)/);
|
|
381
388
|
});
|
|
382
389
|
it("Throws error when order=True and class defines __gt__", () => {
|
|
383
|
-
expect(() =>
|
|
390
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
384
391
|
path: "user.py",
|
|
392
|
+
externals: [dataclassesModule],
|
|
385
393
|
get children() {
|
|
386
394
|
return _$createComponent(py.DataclassDeclaration, {
|
|
387
395
|
name: "User",
|
|
@@ -391,27 +399,26 @@ describe("DataclassDeclaration", () => {
|
|
|
391
399
|
name: "__gt__"
|
|
392
400
|
}, {
|
|
393
401
|
fileName: import.meta.url,
|
|
394
|
-
lineNumber:
|
|
395
|
-
columnNumber:
|
|
402
|
+
lineNumber: 241,
|
|
403
|
+
columnNumber: 13
|
|
396
404
|
});
|
|
397
405
|
}
|
|
398
406
|
}, {
|
|
399
407
|
fileName: import.meta.url,
|
|
400
|
-
lineNumber:
|
|
401
|
-
columnNumber:
|
|
408
|
+
lineNumber: 240,
|
|
409
|
+
columnNumber: 11
|
|
402
410
|
});
|
|
403
411
|
}
|
|
404
412
|
}, {
|
|
405
413
|
fileName: import.meta.url,
|
|
406
|
-
lineNumber:
|
|
407
|
-
columnNumber:
|
|
408
|
-
})
|
|
409
|
-
externals: [dataclassesModule]
|
|
410
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
|
|
414
|
+
lineNumber: 239,
|
|
415
|
+
columnNumber: 9
|
|
416
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __gt__\(\)/);
|
|
411
417
|
});
|
|
412
418
|
it("Throws error when order=True and class defines __ge__", () => {
|
|
413
|
-
expect(() =>
|
|
419
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
414
420
|
path: "user.py",
|
|
421
|
+
externals: [dataclassesModule],
|
|
415
422
|
get children() {
|
|
416
423
|
return _$createComponent(py.DataclassDeclaration, {
|
|
417
424
|
name: "User",
|
|
@@ -421,23 +428,21 @@ describe("DataclassDeclaration", () => {
|
|
|
421
428
|
name: "__ge__"
|
|
422
429
|
}, {
|
|
423
430
|
fileName: import.meta.url,
|
|
424
|
-
lineNumber:
|
|
425
|
-
columnNumber:
|
|
431
|
+
lineNumber: 255,
|
|
432
|
+
columnNumber: 13
|
|
426
433
|
});
|
|
427
434
|
}
|
|
428
435
|
}, {
|
|
429
436
|
fileName: import.meta.url,
|
|
430
|
-
lineNumber:
|
|
431
|
-
columnNumber:
|
|
437
|
+
lineNumber: 254,
|
|
438
|
+
columnNumber: 11
|
|
432
439
|
});
|
|
433
440
|
}
|
|
434
441
|
}, {
|
|
435
442
|
fileName: import.meta.url,
|
|
436
|
-
lineNumber:
|
|
437
|
-
columnNumber:
|
|
438
|
-
})
|
|
439
|
-
externals: [dataclassesModule]
|
|
440
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
|
|
443
|
+
lineNumber: 253,
|
|
444
|
+
columnNumber: 9
|
|
445
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __ge__\(\)/);
|
|
441
446
|
});
|
|
442
447
|
it("Throws error when order=True and a wrapper defines __lt__", () => {
|
|
443
448
|
function Wrapper() {
|
|
@@ -445,12 +450,13 @@ describe("DataclassDeclaration", () => {
|
|
|
445
450
|
name: "__lt__"
|
|
446
451
|
}, {
|
|
447
452
|
fileName: import.meta.url,
|
|
448
|
-
lineNumber:
|
|
453
|
+
lineNumber: 266,
|
|
449
454
|
columnNumber: 14
|
|
450
455
|
});
|
|
451
456
|
}
|
|
452
|
-
expect(() =>
|
|
457
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
453
458
|
path: "user.py",
|
|
459
|
+
externals: [dataclassesModule],
|
|
454
460
|
get children() {
|
|
455
461
|
return _$createComponent(py.DataclassDeclaration, {
|
|
456
462
|
name: "User",
|
|
@@ -458,27 +464,26 @@ describe("DataclassDeclaration", () => {
|
|
|
458
464
|
get children() {
|
|
459
465
|
return _$createComponent(Wrapper, {}, {
|
|
460
466
|
fileName: import.meta.url,
|
|
461
|
-
lineNumber:
|
|
462
|
-
columnNumber:
|
|
467
|
+
lineNumber: 272,
|
|
468
|
+
columnNumber: 13
|
|
463
469
|
});
|
|
464
470
|
}
|
|
465
471
|
}, {
|
|
466
472
|
fileName: import.meta.url,
|
|
467
|
-
lineNumber:
|
|
468
|
-
columnNumber:
|
|
473
|
+
lineNumber: 271,
|
|
474
|
+
columnNumber: 11
|
|
469
475
|
});
|
|
470
476
|
}
|
|
471
477
|
}, {
|
|
472
478
|
fileName: import.meta.url,
|
|
473
|
-
lineNumber:
|
|
474
|
-
columnNumber:
|
|
475
|
-
})
|
|
476
|
-
externals: [dataclassesModule]
|
|
477
|
-
})).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
479
|
+
lineNumber: 270,
|
|
480
|
+
columnNumber: 9
|
|
481
|
+
}))).toThrowError(/Cannot specify order=True when the class already defines __lt__\(\)/);
|
|
478
482
|
});
|
|
479
483
|
it("Throws error when unsafe_hash=True and class defines __hash__", () => {
|
|
480
|
-
expect(() =>
|
|
484
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
481
485
|
path: "user.py",
|
|
486
|
+
externals: [dataclassesModule],
|
|
482
487
|
get children() {
|
|
483
488
|
return _$createComponent(py.DataclassDeclaration, {
|
|
484
489
|
name: "User",
|
|
@@ -488,27 +493,26 @@ describe("DataclassDeclaration", () => {
|
|
|
488
493
|
name: "__hash__"
|
|
489
494
|
}, {
|
|
490
495
|
fileName: import.meta.url,
|
|
491
|
-
lineNumber:
|
|
492
|
-
columnNumber:
|
|
496
|
+
lineNumber: 286,
|
|
497
|
+
columnNumber: 13
|
|
493
498
|
});
|
|
494
499
|
}
|
|
495
500
|
}, {
|
|
496
501
|
fileName: import.meta.url,
|
|
497
|
-
lineNumber:
|
|
498
|
-
columnNumber:
|
|
502
|
+
lineNumber: 285,
|
|
503
|
+
columnNumber: 11
|
|
499
504
|
});
|
|
500
505
|
}
|
|
501
506
|
}, {
|
|
502
507
|
fileName: import.meta.url,
|
|
503
|
-
lineNumber:
|
|
504
|
-
columnNumber:
|
|
505
|
-
})
|
|
506
|
-
externals: [dataclassesModule]
|
|
507
|
-
})).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
|
|
508
|
+
lineNumber: 284,
|
|
509
|
+
columnNumber: 9
|
|
510
|
+
}))).toThrowError(/Cannot specify unsafe_hash=True when the class already defines __hash__\(\)/);
|
|
508
511
|
});
|
|
509
512
|
it("Throws error when frozen=True and class defines __setattr__", () => {
|
|
510
|
-
expect(() =>
|
|
513
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
511
514
|
path: "user.py",
|
|
515
|
+
externals: [dataclassesModule],
|
|
512
516
|
get children() {
|
|
513
517
|
return _$createComponent(py.DataclassDeclaration, {
|
|
514
518
|
name: "User",
|
|
@@ -518,27 +522,26 @@ describe("DataclassDeclaration", () => {
|
|
|
518
522
|
name: "__setattr__"
|
|
519
523
|
}, {
|
|
520
524
|
fileName: import.meta.url,
|
|
521
|
-
lineNumber:
|
|
522
|
-
columnNumber:
|
|
525
|
+
lineNumber: 300,
|
|
526
|
+
columnNumber: 13
|
|
523
527
|
});
|
|
524
528
|
}
|
|
525
529
|
}, {
|
|
526
530
|
fileName: import.meta.url,
|
|
527
|
-
lineNumber:
|
|
528
|
-
columnNumber:
|
|
531
|
+
lineNumber: 299,
|
|
532
|
+
columnNumber: 11
|
|
529
533
|
});
|
|
530
534
|
}
|
|
531
535
|
}, {
|
|
532
536
|
fileName: import.meta.url,
|
|
533
|
-
lineNumber:
|
|
534
|
-
columnNumber:
|
|
535
|
-
})
|
|
536
|
-
externals: [dataclassesModule]
|
|
537
|
-
})).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
|
|
537
|
+
lineNumber: 298,
|
|
538
|
+
columnNumber: 9
|
|
539
|
+
}))).toThrowError(/Cannot specify frozen=True when the class already defines __setattr__\(\)/);
|
|
538
540
|
});
|
|
539
541
|
it("Throws errorwhen frozen=True and class defines __delattr__", () => {
|
|
540
|
-
expect(() =>
|
|
542
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
541
543
|
path: "user.py",
|
|
544
|
+
externals: [dataclassesModule],
|
|
542
545
|
get children() {
|
|
543
546
|
return _$createComponent(py.DataclassDeclaration, {
|
|
544
547
|
name: "User",
|
|
@@ -548,27 +551,26 @@ describe("DataclassDeclaration", () => {
|
|
|
548
551
|
name: "__delattr__"
|
|
549
552
|
}, {
|
|
550
553
|
fileName: import.meta.url,
|
|
551
|
-
lineNumber:
|
|
552
|
-
columnNumber:
|
|
554
|
+
lineNumber: 314,
|
|
555
|
+
columnNumber: 13
|
|
553
556
|
});
|
|
554
557
|
}
|
|
555
558
|
}, {
|
|
556
559
|
fileName: import.meta.url,
|
|
557
|
-
lineNumber:
|
|
558
|
-
columnNumber:
|
|
560
|
+
lineNumber: 313,
|
|
561
|
+
columnNumber: 11
|
|
559
562
|
});
|
|
560
563
|
}
|
|
561
564
|
}, {
|
|
562
565
|
fileName: import.meta.url,
|
|
563
|
-
lineNumber:
|
|
564
|
-
columnNumber:
|
|
565
|
-
})
|
|
566
|
-
externals: [dataclassesModule]
|
|
567
|
-
})).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
|
|
566
|
+
lineNumber: 312,
|
|
567
|
+
columnNumber: 9
|
|
568
|
+
}))).toThrowError(/Cannot specify frozen=True when the class already defines __delattr__\(\)/);
|
|
568
569
|
});
|
|
569
570
|
it("Throws error when slots=True and class defines __slots__", () => {
|
|
570
|
-
expect(() =>
|
|
571
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
571
572
|
path: "user.py",
|
|
573
|
+
externals: [dataclassesModule],
|
|
572
574
|
get children() {
|
|
573
575
|
return _$createComponent(py.DataclassDeclaration, {
|
|
574
576
|
name: "User",
|
|
@@ -578,27 +580,26 @@ describe("DataclassDeclaration", () => {
|
|
|
578
580
|
name: "__slots__"
|
|
579
581
|
}, {
|
|
580
582
|
fileName: import.meta.url,
|
|
581
|
-
lineNumber:
|
|
582
|
-
columnNumber:
|
|
583
|
+
lineNumber: 328,
|
|
584
|
+
columnNumber: 13
|
|
583
585
|
});
|
|
584
586
|
}
|
|
585
587
|
}, {
|
|
586
588
|
fileName: import.meta.url,
|
|
587
|
-
lineNumber:
|
|
588
|
-
columnNumber:
|
|
589
|
+
lineNumber: 327,
|
|
590
|
+
columnNumber: 11
|
|
589
591
|
});
|
|
590
592
|
}
|
|
591
593
|
}, {
|
|
592
594
|
fileName: import.meta.url,
|
|
593
|
-
lineNumber:
|
|
594
|
-
columnNumber:
|
|
595
|
-
})
|
|
596
|
-
externals: [dataclassesModule]
|
|
597
|
-
})).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
|
|
595
|
+
lineNumber: 326,
|
|
596
|
+
columnNumber: 9
|
|
597
|
+
}))).toThrowError(/Cannot specify slots=True when the class already defines __slots__\(\)/);
|
|
598
598
|
});
|
|
599
599
|
it("Creates a dataclass with kw_only=True on decorator (sentinel not used)", () => {
|
|
600
|
-
|
|
600
|
+
expect(_$createComponent(TestOutput, {
|
|
601
601
|
path: "user.py",
|
|
602
|
+
externals: [dataclassesModule],
|
|
602
603
|
get children() {
|
|
603
604
|
return _$createComponent(py.DataclassDeclaration, {
|
|
604
605
|
name: "User",
|
|
@@ -611,24 +612,21 @@ describe("DataclassDeclaration", () => {
|
|
|
611
612
|
type: "int"
|
|
612
613
|
}, {
|
|
613
614
|
fileName: import.meta.url,
|
|
614
|
-
lineNumber:
|
|
615
|
-
columnNumber:
|
|
615
|
+
lineNumber: 341,
|
|
616
|
+
columnNumber: 11
|
|
616
617
|
});
|
|
617
618
|
}
|
|
618
619
|
}, {
|
|
619
620
|
fileName: import.meta.url,
|
|
620
|
-
lineNumber:
|
|
621
|
-
columnNumber:
|
|
621
|
+
lineNumber: 340,
|
|
622
|
+
columnNumber: 9
|
|
622
623
|
});
|
|
623
624
|
}
|
|
624
625
|
}, {
|
|
625
626
|
fileName: import.meta.url,
|
|
626
|
-
lineNumber:
|
|
627
|
-
columnNumber:
|
|
628
|
-
})
|
|
629
|
-
externals: [dataclassesModule]
|
|
630
|
-
});
|
|
631
|
-
expect(res).toRenderTo(d`
|
|
627
|
+
lineNumber: 339,
|
|
628
|
+
columnNumber: 7
|
|
629
|
+
})).toRenderTo(`
|
|
632
630
|
from dataclasses import dataclass
|
|
633
631
|
|
|
634
632
|
|
|
@@ -636,30 +634,27 @@ describe("DataclassDeclaration", () => {
|
|
|
636
634
|
class User:
|
|
637
635
|
id: int
|
|
638
636
|
|
|
639
|
-
|
|
640
637
|
`);
|
|
641
638
|
});
|
|
642
639
|
it("Creates a dataclass with base classes", () => {
|
|
643
|
-
|
|
640
|
+
expect(_$createComponent(TestOutput, {
|
|
644
641
|
path: "user.py",
|
|
642
|
+
externals: [dataclassesModule],
|
|
645
643
|
get children() {
|
|
646
644
|
return _$createComponent(py.DataclassDeclaration, {
|
|
647
645
|
name: "User",
|
|
648
646
|
bases: ["Base"]
|
|
649
647
|
}, {
|
|
650
648
|
fileName: import.meta.url,
|
|
651
|
-
lineNumber:
|
|
652
|
-
columnNumber:
|
|
649
|
+
lineNumber: 365,
|
|
650
|
+
columnNumber: 9
|
|
653
651
|
});
|
|
654
652
|
}
|
|
655
653
|
}, {
|
|
656
654
|
fileName: import.meta.url,
|
|
657
|
-
lineNumber:
|
|
658
|
-
columnNumber:
|
|
659
|
-
})
|
|
660
|
-
externals: [dataclassesModule]
|
|
661
|
-
});
|
|
662
|
-
expect(res).toRenderTo(d`
|
|
655
|
+
lineNumber: 364,
|
|
656
|
+
columnNumber: 7
|
|
657
|
+
})).toRenderTo(`
|
|
663
658
|
from dataclasses import dataclass
|
|
664
659
|
|
|
665
660
|
|
|
@@ -667,12 +662,12 @@ describe("DataclassDeclaration", () => {
|
|
|
667
662
|
class User(Base):
|
|
668
663
|
pass
|
|
669
664
|
|
|
670
|
-
|
|
671
665
|
`);
|
|
672
666
|
});
|
|
673
667
|
it("Throws error when more than one KW_ONLY sentinel is present", () => {
|
|
674
|
-
expect(() =>
|
|
668
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
675
669
|
path: "user.py",
|
|
670
|
+
externals: [dataclassesModule],
|
|
676
671
|
get children() {
|
|
677
672
|
return _$createComponent(py.DataclassDeclaration, {
|
|
678
673
|
name: "User",
|
|
@@ -690,8 +685,8 @@ describe("DataclassDeclaration", () => {
|
|
|
690
685
|
omitNone: true
|
|
691
686
|
}, {
|
|
692
687
|
fileName: import.meta.url,
|
|
693
|
-
lineNumber:
|
|
694
|
-
columnNumber:
|
|
688
|
+
lineNumber: 385,
|
|
689
|
+
columnNumber: 13
|
|
695
690
|
}), _$createComponent(py.VariableDeclaration, {
|
|
696
691
|
instanceVariable: true,
|
|
697
692
|
get name() {
|
|
@@ -705,27 +700,26 @@ describe("DataclassDeclaration", () => {
|
|
|
705
700
|
omitNone: true
|
|
706
701
|
}, {
|
|
707
702
|
fileName: import.meta.url,
|
|
708
|
-
lineNumber:
|
|
709
|
-
columnNumber:
|
|
703
|
+
lineNumber: 391,
|
|
704
|
+
columnNumber: 13
|
|
710
705
|
})];
|
|
711
706
|
}
|
|
712
707
|
}, {
|
|
713
708
|
fileName: import.meta.url,
|
|
714
|
-
lineNumber:
|
|
715
|
-
columnNumber:
|
|
709
|
+
lineNumber: 384,
|
|
710
|
+
columnNumber: 11
|
|
716
711
|
});
|
|
717
712
|
}
|
|
718
713
|
}, {
|
|
719
714
|
fileName: import.meta.url,
|
|
720
|
-
lineNumber:
|
|
721
|
-
columnNumber:
|
|
722
|
-
})
|
|
723
|
-
externals: [dataclassesModule]
|
|
724
|
-
})).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
715
|
+
lineNumber: 383,
|
|
716
|
+
columnNumber: 9
|
|
717
|
+
}))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
725
718
|
});
|
|
726
719
|
it("Will raise arg validation errors first over member conflicts", () => {
|
|
727
|
-
expect(() =>
|
|
720
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
728
721
|
path: "user.py",
|
|
722
|
+
externals: [dataclassesModule],
|
|
729
723
|
get children() {
|
|
730
724
|
return _$createComponent(py.DataclassDeclaration, {
|
|
731
725
|
name: "User",
|
|
@@ -736,27 +730,26 @@ describe("DataclassDeclaration", () => {
|
|
|
736
730
|
name: "__lt__"
|
|
737
731
|
}, {
|
|
738
732
|
fileName: import.meta.url,
|
|
739
|
-
lineNumber:
|
|
740
|
-
columnNumber:
|
|
733
|
+
lineNumber: 408,
|
|
734
|
+
columnNumber: 13
|
|
741
735
|
});
|
|
742
736
|
}
|
|
743
737
|
}, {
|
|
744
738
|
fileName: import.meta.url,
|
|
745
|
-
lineNumber:
|
|
746
|
-
columnNumber:
|
|
739
|
+
lineNumber: 407,
|
|
740
|
+
columnNumber: 11
|
|
747
741
|
});
|
|
748
742
|
}
|
|
749
743
|
}, {
|
|
750
744
|
fileName: import.meta.url,
|
|
751
|
-
lineNumber:
|
|
752
|
-
columnNumber:
|
|
753
|
-
})
|
|
754
|
-
externals: [dataclassesModule]
|
|
755
|
-
})).toThrowError(/order=True requires eq=True/);
|
|
745
|
+
lineNumber: 406,
|
|
746
|
+
columnNumber: 9
|
|
747
|
+
}))).toThrowError(/order=True requires eq=True/);
|
|
756
748
|
});
|
|
757
749
|
it("Does not raise errors for member conflict checks without the equivalent kwargs", () => {
|
|
758
|
-
expect(() =>
|
|
750
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
759
751
|
path: "user.py",
|
|
752
|
+
externals: [dataclassesModule],
|
|
760
753
|
get children() {
|
|
761
754
|
return _$createComponent(py.DataclassDeclaration, {
|
|
762
755
|
name: "User",
|
|
@@ -765,69 +758,65 @@ describe("DataclassDeclaration", () => {
|
|
|
765
758
|
name: "__lt__"
|
|
766
759
|
}, {
|
|
767
760
|
fileName: import.meta.url,
|
|
768
|
-
lineNumber:
|
|
769
|
-
columnNumber:
|
|
761
|
+
lineNumber: 420,
|
|
762
|
+
columnNumber: 13
|
|
770
763
|
}), _$createComponent(py.DunderMethodDeclaration, {
|
|
771
764
|
name: "__slots__"
|
|
772
765
|
}, {
|
|
773
766
|
fileName: import.meta.url,
|
|
774
|
-
lineNumber:
|
|
775
|
-
columnNumber:
|
|
767
|
+
lineNumber: 421,
|
|
768
|
+
columnNumber: 13
|
|
776
769
|
}), _$createComponent(py.DunderMethodDeclaration, {
|
|
777
770
|
name: "__hash__"
|
|
778
771
|
}, {
|
|
779
772
|
fileName: import.meta.url,
|
|
780
|
-
lineNumber:
|
|
781
|
-
columnNumber:
|
|
773
|
+
lineNumber: 422,
|
|
774
|
+
columnNumber: 13
|
|
782
775
|
}), _$createComponent(py.DunderMethodDeclaration, {
|
|
783
776
|
name: "__setattr__"
|
|
784
777
|
}, {
|
|
785
778
|
fileName: import.meta.url,
|
|
786
|
-
lineNumber:
|
|
787
|
-
columnNumber:
|
|
779
|
+
lineNumber: 423,
|
|
780
|
+
columnNumber: 13
|
|
788
781
|
}), _$createComponent(py.DunderMethodDeclaration, {
|
|
789
782
|
name: "__delattr__"
|
|
790
783
|
}, {
|
|
791
784
|
fileName: import.meta.url,
|
|
792
|
-
lineNumber:
|
|
793
|
-
columnNumber:
|
|
785
|
+
lineNumber: 424,
|
|
786
|
+
columnNumber: 13
|
|
794
787
|
})];
|
|
795
788
|
}
|
|
796
789
|
}, {
|
|
797
790
|
fileName: import.meta.url,
|
|
798
|
-
lineNumber:
|
|
799
|
-
columnNumber:
|
|
791
|
+
lineNumber: 419,
|
|
792
|
+
columnNumber: 11
|
|
800
793
|
});
|
|
801
794
|
}
|
|
802
795
|
}, {
|
|
803
796
|
fileName: import.meta.url,
|
|
804
|
-
lineNumber:
|
|
805
|
-
columnNumber:
|
|
806
|
-
})
|
|
807
|
-
externals: [dataclassesModule]
|
|
808
|
-
})).not.toThrow();
|
|
797
|
+
lineNumber: 418,
|
|
798
|
+
columnNumber: 9
|
|
799
|
+
}))).not.toThrow();
|
|
809
800
|
});
|
|
810
801
|
it("Allows unsafe_hash=True when no __hash__ is defined", () => {
|
|
811
|
-
|
|
802
|
+
expect(_$createComponent(TestOutput, {
|
|
812
803
|
path: "user.py",
|
|
804
|
+
externals: [dataclassesModule],
|
|
813
805
|
get children() {
|
|
814
806
|
return _$createComponent(py.DataclassDeclaration, {
|
|
815
807
|
name: "User",
|
|
816
808
|
unsafeHash: true
|
|
817
809
|
}, {
|
|
818
810
|
fileName: import.meta.url,
|
|
819
|
-
lineNumber:
|
|
820
|
-
columnNumber:
|
|
811
|
+
lineNumber: 434,
|
|
812
|
+
columnNumber: 9
|
|
821
813
|
});
|
|
822
814
|
}
|
|
823
815
|
}, {
|
|
824
816
|
fileName: import.meta.url,
|
|
825
|
-
lineNumber:
|
|
826
|
-
columnNumber:
|
|
827
|
-
})
|
|
828
|
-
externals: [dataclassesModule]
|
|
829
|
-
});
|
|
830
|
-
expect(res).toRenderTo(d`
|
|
817
|
+
lineNumber: 433,
|
|
818
|
+
columnNumber: 7
|
|
819
|
+
})).toRenderTo(`
|
|
831
820
|
from dataclasses import dataclass
|
|
832
821
|
|
|
833
822
|
|
|
@@ -835,7 +824,6 @@ describe("DataclassDeclaration", () => {
|
|
|
835
824
|
class User:
|
|
836
825
|
pass
|
|
837
826
|
|
|
838
|
-
|
|
839
827
|
`);
|
|
840
828
|
});
|
|
841
829
|
it("Counts KW_ONLY sentinels through wrappers (symbol-level)", () => {
|
|
@@ -853,12 +841,13 @@ describe("DataclassDeclaration", () => {
|
|
|
853
841
|
omitNone: true
|
|
854
842
|
}, {
|
|
855
843
|
fileName: import.meta.url,
|
|
856
|
-
lineNumber:
|
|
844
|
+
lineNumber: 452,
|
|
857
845
|
columnNumber: 9
|
|
858
846
|
});
|
|
859
847
|
}
|
|
860
|
-
expect(() =>
|
|
848
|
+
expect(() => render(_$createComponent(TestOutput, {
|
|
861
849
|
path: "user.py",
|
|
850
|
+
externals: [dataclassesModule],
|
|
862
851
|
get children() {
|
|
863
852
|
return _$createComponent(py.DataclassDeclaration, {
|
|
864
853
|
name: "User",
|
|
@@ -876,49 +865,45 @@ describe("DataclassDeclaration", () => {
|
|
|
876
865
|
omitNone: true
|
|
877
866
|
}, {
|
|
878
867
|
fileName: import.meta.url,
|
|
879
|
-
lineNumber:
|
|
880
|
-
columnNumber:
|
|
868
|
+
lineNumber: 464,
|
|
869
|
+
columnNumber: 13
|
|
881
870
|
}), _$createComponent(Wrapper, {}, {
|
|
882
871
|
fileName: import.meta.url,
|
|
883
|
-
lineNumber:
|
|
884
|
-
columnNumber:
|
|
872
|
+
lineNumber: 470,
|
|
873
|
+
columnNumber: 13
|
|
885
874
|
})];
|
|
886
875
|
}
|
|
887
876
|
}, {
|
|
888
877
|
fileName: import.meta.url,
|
|
889
|
-
lineNumber:
|
|
890
|
-
columnNumber:
|
|
878
|
+
lineNumber: 463,
|
|
879
|
+
columnNumber: 11
|
|
891
880
|
});
|
|
892
881
|
}
|
|
893
882
|
}, {
|
|
894
883
|
fileName: import.meta.url,
|
|
895
|
-
lineNumber:
|
|
896
|
-
columnNumber:
|
|
897
|
-
})
|
|
898
|
-
externals: [dataclassesModule]
|
|
899
|
-
})).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
884
|
+
lineNumber: 462,
|
|
885
|
+
columnNumber: 9
|
|
886
|
+
}))).toThrowError(/Only one KW_ONLY sentinel is allowed per dataclass body/);
|
|
900
887
|
});
|
|
901
888
|
it("Allows frozen=True when no conflicting dunders exist", () => {
|
|
902
|
-
|
|
889
|
+
expect(_$createComponent(TestOutput, {
|
|
903
890
|
path: "user.py",
|
|
891
|
+
externals: [dataclassesModule],
|
|
904
892
|
get children() {
|
|
905
893
|
return _$createComponent(py.DataclassDeclaration, {
|
|
906
894
|
name: "User",
|
|
907
895
|
frozen: true
|
|
908
896
|
}, {
|
|
909
897
|
fileName: import.meta.url,
|
|
910
|
-
lineNumber:
|
|
911
|
-
columnNumber:
|
|
898
|
+
lineNumber: 480,
|
|
899
|
+
columnNumber: 9
|
|
912
900
|
});
|
|
913
901
|
}
|
|
914
902
|
}, {
|
|
915
903
|
fileName: import.meta.url,
|
|
916
|
-
lineNumber:
|
|
917
|
-
columnNumber:
|
|
918
|
-
})
|
|
919
|
-
externals: [dataclassesModule]
|
|
920
|
-
});
|
|
921
|
-
expect(res).toRenderTo(d`
|
|
904
|
+
lineNumber: 479,
|
|
905
|
+
columnNumber: 7
|
|
906
|
+
})).toRenderTo(`
|
|
922
907
|
from dataclasses import dataclass
|
|
923
908
|
|
|
924
909
|
|
|
@@ -926,30 +911,27 @@ describe("DataclassDeclaration", () => {
|
|
|
926
911
|
class User:
|
|
927
912
|
pass
|
|
928
913
|
|
|
929
|
-
|
|
930
914
|
`);
|
|
931
915
|
});
|
|
932
916
|
it("Allows slots=True when no __slots__ is defined", () => {
|
|
933
|
-
|
|
917
|
+
expect(_$createComponent(TestOutput, {
|
|
934
918
|
path: "user.py",
|
|
919
|
+
externals: [dataclassesModule],
|
|
935
920
|
get children() {
|
|
936
921
|
return _$createComponent(py.DataclassDeclaration, {
|
|
937
922
|
name: "User",
|
|
938
923
|
slots: true
|
|
939
924
|
}, {
|
|
940
925
|
fileName: import.meta.url,
|
|
941
|
-
lineNumber:
|
|
942
|
-
columnNumber:
|
|
926
|
+
lineNumber: 498,
|
|
927
|
+
columnNumber: 9
|
|
943
928
|
});
|
|
944
929
|
}
|
|
945
930
|
}, {
|
|
946
931
|
fileName: import.meta.url,
|
|
947
|
-
lineNumber:
|
|
948
|
-
columnNumber:
|
|
949
|
-
})
|
|
950
|
-
externals: [dataclassesModule]
|
|
951
|
-
});
|
|
952
|
-
expect(res).toRenderTo(d`
|
|
932
|
+
lineNumber: 497,
|
|
933
|
+
columnNumber: 7
|
|
934
|
+
})).toRenderTo(`
|
|
953
935
|
from dataclasses import dataclass
|
|
954
936
|
|
|
955
937
|
|
|
@@ -957,111 +939,116 @@ describe("DataclassDeclaration", () => {
|
|
|
957
939
|
class User:
|
|
958
940
|
pass
|
|
959
941
|
|
|
960
|
-
|
|
961
942
|
`);
|
|
962
943
|
});
|
|
963
944
|
it("Forwards refkey prop for symbol resolution in type references", () => {
|
|
964
945
|
const userRefkey = refkey();
|
|
965
|
-
|
|
966
|
-
|
|
946
|
+
expect(_$createComponent(TestOutputDirectory, {
|
|
947
|
+
externals: [dataclassesModule],
|
|
967
948
|
get children() {
|
|
968
|
-
return _$createComponent(py.
|
|
969
|
-
|
|
970
|
-
refkey: userRefkey,
|
|
949
|
+
return [_$createComponent(py.SourceFile, {
|
|
950
|
+
path: "models.py",
|
|
971
951
|
get children() {
|
|
972
|
-
return
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
952
|
+
return _$createComponent(py.DataclassDeclaration, {
|
|
953
|
+
name: "User",
|
|
954
|
+
refkey: userRefkey,
|
|
955
|
+
get children() {
|
|
956
|
+
return [_$createComponent(py.VariableDeclaration, {
|
|
957
|
+
instanceVariable: true,
|
|
958
|
+
omitNone: true,
|
|
959
|
+
name: "id",
|
|
960
|
+
type: "int"
|
|
961
|
+
}, {
|
|
962
|
+
fileName: import.meta.url,
|
|
963
|
+
lineNumber: 519,
|
|
964
|
+
columnNumber: 13
|
|
965
|
+
}), _$createComponent(py.VariableDeclaration, {
|
|
966
|
+
instanceVariable: true,
|
|
967
|
+
omitNone: true,
|
|
968
|
+
name: "name",
|
|
969
|
+
type: "str"
|
|
970
|
+
}, {
|
|
971
|
+
fileName: import.meta.url,
|
|
972
|
+
lineNumber: 525,
|
|
973
|
+
columnNumber: 13
|
|
974
|
+
})];
|
|
975
|
+
}
|
|
986
976
|
}, {
|
|
987
977
|
fileName: import.meta.url,
|
|
988
|
-
lineNumber:
|
|
989
|
-
columnNumber:
|
|
990
|
-
})
|
|
978
|
+
lineNumber: 518,
|
|
979
|
+
columnNumber: 11
|
|
980
|
+
});
|
|
991
981
|
}
|
|
992
982
|
}, {
|
|
993
983
|
fileName: import.meta.url,
|
|
994
|
-
lineNumber:
|
|
995
|
-
columnNumber:
|
|
996
|
-
})
|
|
997
|
-
|
|
998
|
-
}, {
|
|
999
|
-
fileName: import.meta.url,
|
|
1000
|
-
lineNumber: 608,
|
|
1001
|
-
columnNumber: 9
|
|
1002
|
-
}), _$createComponent(py.SourceFile, {
|
|
1003
|
-
path: "services.py",
|
|
1004
|
-
get children() {
|
|
1005
|
-
return _$createComponent(py.FunctionDeclaration, {
|
|
1006
|
-
name: "get_user",
|
|
1007
|
-
returnType: userRefkey,
|
|
984
|
+
lineNumber: 517,
|
|
985
|
+
columnNumber: 9
|
|
986
|
+
}), _$createComponent(py.SourceFile, {
|
|
987
|
+
path: "services.py",
|
|
1008
988
|
get children() {
|
|
1009
|
-
return
|
|
1010
|
-
name: "
|
|
1011
|
-
|
|
1012
|
-
get
|
|
1013
|
-
return _$createComponent(py.
|
|
1014
|
-
|
|
1015
|
-
|
|
989
|
+
return _$createComponent(py.FunctionDeclaration, {
|
|
990
|
+
name: "get_user",
|
|
991
|
+
returnType: userRefkey,
|
|
992
|
+
get children() {
|
|
993
|
+
return [_$createComponent(py.VariableDeclaration, {
|
|
994
|
+
name: "user",
|
|
995
|
+
type: userRefkey,
|
|
996
|
+
get initializer() {
|
|
997
|
+
return _$createComponent(py.ClassInstantiation, {
|
|
998
|
+
target: userRefkey,
|
|
999
|
+
args: ["1", '"Alice"']
|
|
1000
|
+
}, {
|
|
1001
|
+
fileName: import.meta.url,
|
|
1002
|
+
lineNumber: 539,
|
|
1003
|
+
columnNumber: 17
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1016
1006
|
}, {
|
|
1017
1007
|
fileName: import.meta.url,
|
|
1018
|
-
lineNumber:
|
|
1019
|
-
columnNumber:
|
|
1020
|
-
})
|
|
1008
|
+
lineNumber: 535,
|
|
1009
|
+
columnNumber: 13
|
|
1010
|
+
}), _$createIntrinsic("hbr", {}, {
|
|
1011
|
+
fileName: import.meta.url,
|
|
1012
|
+
lineNumber: 545,
|
|
1013
|
+
columnNumber: 13
|
|
1014
|
+
}), "return user"];
|
|
1021
1015
|
}
|
|
1022
1016
|
}, {
|
|
1023
1017
|
fileName: import.meta.url,
|
|
1024
|
-
lineNumber:
|
|
1025
|
-
columnNumber:
|
|
1026
|
-
})
|
|
1027
|
-
fileName: import.meta.url,
|
|
1028
|
-
lineNumber: 636,
|
|
1029
|
-
columnNumber: 13
|
|
1030
|
-
}), "return user"];
|
|
1018
|
+
lineNumber: 534,
|
|
1019
|
+
columnNumber: 11
|
|
1020
|
+
});
|
|
1031
1021
|
}
|
|
1032
1022
|
}, {
|
|
1033
1023
|
fileName: import.meta.url,
|
|
1034
|
-
lineNumber:
|
|
1035
|
-
columnNumber:
|
|
1036
|
-
});
|
|
1024
|
+
lineNumber: 533,
|
|
1025
|
+
columnNumber: 9
|
|
1026
|
+
})];
|
|
1037
1027
|
}
|
|
1038
1028
|
}, {
|
|
1039
1029
|
fileName: import.meta.url,
|
|
1040
|
-
lineNumber:
|
|
1041
|
-
columnNumber:
|
|
1042
|
-
})
|
|
1043
|
-
externals: [dataclassesModule]
|
|
1044
|
-
});
|
|
1045
|
-
assertFileContents(res, {
|
|
1030
|
+
lineNumber: 516,
|
|
1031
|
+
columnNumber: 7
|
|
1032
|
+
})).toRenderTo({
|
|
1046
1033
|
"models.py": `
|
|
1047
|
-
|
|
1034
|
+
from dataclasses import dataclass
|
|
1048
1035
|
|
|
1049
1036
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1037
|
+
@dataclass
|
|
1038
|
+
class User:
|
|
1039
|
+
id: int
|
|
1040
|
+
name: str
|
|
1054
1041
|
|
|
1055
|
-
|
|
1042
|
+
`,
|
|
1056
1043
|
"services.py": `
|
|
1057
|
-
|
|
1044
|
+
from models import User
|
|
1058
1045
|
|
|
1059
1046
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1047
|
+
def get_user() -> User:
|
|
1048
|
+
user: User = User(1, "Alice")
|
|
1049
|
+
return user
|
|
1063
1050
|
|
|
1064
|
-
|
|
1051
|
+
`
|
|
1065
1052
|
});
|
|
1066
1053
|
});
|
|
1067
1054
|
});
|