🌐 AI搜索 & 代理 主页
Skip to content

Commit bdaa0b0

Browse files
committed
fix mypy errors
1 parent 5e80c6a commit bdaa0b0

24 files changed

+208
-244
lines changed

py_codegen/plugins/typescript/Converter.py

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import itertools
2-
from functools import reduce
3-
from textwrap import dedent, indent
42
from typing import (
53
cast,
64
List,
7-
Callable)
5+
Callable,
6+
Any,
7+
Optional,
8+
)
9+
from typing_extensions import Protocol
810

9-
from py_codegen.plugins.typescript.__base__ import BaseTypescriptConverter
11+
from py_codegen.plugins.typescript.__base__ import MiddlewareType
1012
from py_codegen.plugins.typescript.middlewares.classes import class_middleware
1113
from py_codegen.plugins.typescript.middlewares.functions import functionfounds_middleware
1214
from py_codegen.plugins.typescript.middlewares.typeddicts import typeddicts_middleware
@@ -25,18 +27,12 @@
2527
from py_codegen.type_extractor.nodes.UnknownFound import unknown_found
2628
from py_codegen.type_extractor.type_extractor import TypeExtractor, is_builtin
2729

28-
MiddlewareType = Callable[
29-
[BaseTypeExtractor, BaseTypescriptConverter],
30-
List[str],
31-
]
3230

33-
LiteralConverterType = Callable[
34-
[LiteralFound],
35-
str,
36-
]
31+
class LiteralConverterType(Protocol):
32+
def __call__(self, val: Any) -> str: ...
3733

3834

39-
def default_literal_converter(val) -> str:
35+
def default_literal_converter(val: Any) -> str:
4036
if isinstance(val, str):
4137
return f"'{val}'"
4238
if isinstance(val, int) \
@@ -63,15 +59,15 @@ class TypescriptConverter:
6359
def __init__(
6460
self,
6561
extractor: TypeExtractor,
66-
middlewares: List[MiddlewareType] = [
67-
class_middleware,
68-
functionfounds_middleware,
69-
typeddicts_middleware,
70-
],
62+
middlewares: Optional[List[MiddlewareType]] = None,
7163
literal_converter: LiteralConverterType = default_literal_converter,
7264
):
7365
self.extractor = extractor
74-
self.middlewares = middlewares
66+
self.middlewares = middlewares or [
67+
class_middleware,
68+
functionfounds_middleware,
69+
typeddicts_middleware,
70+
]
7571
self.literal_converter = literal_converter
7672

7773
def get_identifier(self, node: NodeType) -> str:
@@ -105,21 +101,22 @@ def get_identifier(self, node: NodeType) -> str:
105101

106102
raise NotImplementedError(f'get_identifier not implemented for {node}')
107103

108-
def run(self):
109-
r: List[List[str]] = [
110-
middleware(self.extractor, self)
111-
for middleware in self.middlewares
112-
]
113-
merged: List[str] = list(itertools.chain.from_iterable(r))
114-
return '\n'.join(merged)
115-
116104
def __convert_builtin(self, typ: type):
117105
if typ == str:
118106
return 'string'
119107
if typ == int or typ == float:
120108
return 'number'
121109
if typ == bool:
122110
return 'boolean'
123-
111+
124112
raise NotImplementedError(f'__convert_builtin not implemented for {typ}')
125113

114+
def run(self):
115+
r: List[List[str]] = [
116+
middleware(self.extractor, self)
117+
for middleware in self.middlewares
118+
]
119+
merged: List[str] = list(itertools.chain.from_iterable(r))
120+
return '\n'.join(merged)
121+
122+
Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from abc import ABC
12
from textwrap import dedent
23
from typing import (
34
cast,
@@ -22,12 +23,12 @@
2223
from py_codegen.type_extractor.nodes.UnknownFound import unknown_found
2324
from py_codegen.type_extractor.type_extractor import TypeExtractor, is_builtin
2425

25-
MiddlewareType = Callable[[
26-
BaseTypeExtractor,
27-
'BaseTypescriptConverter',
28-
], List[str]]
26+
MiddlewareType = Callable[
27+
[BaseTypeExtractor, 'BaseTypescriptConverter'],
28+
List[str],
29+
]
2930

30-
class BaseTypescriptConverter:
31+
class BaseTypescriptConverter(ABC):
3132
extractor: TypeExtractor
3233

3334
middlewares: List[MiddlewareType]
@@ -36,31 +37,10 @@ def __init__(
3637
self,
3738
extractor: TypeExtractor,
3839
):
39-
self.extractor = extractor
40+
...
4041

4142
def get_identifier(self, node: NodeType) -> str:
42-
# TODO: sanitize names!
43-
if isinstance(node, NoneNode):
44-
return 'null'
45-
if isinstance(node, ClassFound):
46-
return node.name
47-
if isinstance(node, FunctionFound):
48-
return node.name
49-
if isinstance(node, TypedDictFound):
50-
return f"I{node.name}"
51-
if isinstance(node, TypeOR):
52-
return f"{self.get_identifier(node.a)} | {self.get_identifier(node.b)}"
53-
if isinstance(node, DictFound):
54-
return f"{{ [id: string]: {self.get_identifier(node.value)} }}"
55-
if isinstance(node, ListFound):
56-
return f"{self.get_identifier(node.typ)}[]"
57-
if isinstance(node, TupleFound):
58-
return f"[{', '.join([self.get_identifier(typ) for typ in node.types])}]"
59-
if node is unknown_found:
60-
return "any"
43+
...
6144

62-
if is_builtin(node):
63-
return self.__convert_builtin(cast(type, node))
6445

65-
raise NotImplementedError(f'get_identifier not implemented for {node}')
6646

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export function func_with_literals(
2-
input1: 'a' | 1 | 2 | 3 | [True,3],
2+
input1: 'a' | 1 | 2 | 3 | True | 3,
33
input2: 1 | null,
4-
): True | 0.5 | 3
4+
): True | 5 | 3

py_codegen/plugins/typescript/package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@
55
"main": "index.js",
66
"license": "MIT",
77
"devDependencies": {
8-
"@types/fs-extra": "^8.0.0",
9-
"@types/jest": "^24.0.18",
10-
"@types/lodash": "^4.14.139",
11-
"@types/node": "^12.7.7",
12-
"@types/prettier": "^1.18.2",
8+
"@types/fs-extra": "^8.0.1",
9+
"@types/jest": "^24.0.25",
10+
"@types/lodash": "^4.14.149",
11+
"@types/node": "^13.1.4",
12+
"@types/prettier": "^1.19.0",
1313
"fs-extra": "^8.1.0",
1414
"jest": "^24.9.0",
15-
"prettier": "^1.18.2",
16-
"ts-jest": "^24.1.0",
17-
"tslint": "^5.20.0",
18-
"typescript": "^3.6.3"
15+
"prettier": "^1.19.1",
16+
"ts-jest": "^24.2.0",
17+
"tslint": "^5.20.1",
18+
"typescript": "^3.7.4"
1919
},
2020
"scripts": {
2121
"test": "jest",
2222
"clean": "rm __tests__/ts_generated/*.d.ts"
2323
},
2424
"dependencies": {
25-
"@types/mz": "^0.0.32",
25+
"@types/mz": "^2.7.0",
2626
"lodash": "^4.17.15",
2727
"mz": "^2.7.0"
2828
}

py_codegen/plugins/typescript/yarn.lock

Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,10 @@
338338
dependencies:
339339
"@babel/types" "^7.3.0"
340340

341-
"@types/fs-extra@^8.0.0":
342-
version "8.0.0"
343-
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.0.tgz#d3e2c313ca29f95059f198dd60d1f774642d4b25"
344-
integrity sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==
341+
"@types/fs-extra@^8.0.1":
342+
version "8.0.1"
343+
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686"
344+
integrity sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw==
345345
dependencies:
346346
"@types/node" "*"
347347

@@ -365,27 +365,22 @@
365365
"@types/istanbul-lib-coverage" "*"
366366
"@types/istanbul-lib-report" "*"
367367

368-
"@types/jest-diff@*":
369-
version "20.0.1"
370-
resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89"
371-
integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==
372-
373-
"@types/jest@^24.0.18":
374-
version "24.0.18"
375-
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498"
376-
integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==
368+
"@types/jest@^24.0.25":
369+
version "24.0.25"
370+
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.25.tgz#2aba377824ce040114aa906ad2cac2c85351360f"
371+
integrity sha512-hnP1WpjN4KbGEK4dLayul6lgtys6FPz0UfxMeMQCv0M+sTnzN3ConfiO72jHgLxl119guHgI8gLqDOrRLsyp2g==
377372
dependencies:
378-
"@types/jest-diff" "*"
373+
jest-diff "^24.3.0"
379374

380-
"@types/lodash@^4.14.139":
381-
version "4.14.139"
382-
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.139.tgz#b7b8a00d014a7debb29dc2dae4f91d3d3c6d5ab3"
383-
integrity sha512-Z6pbDYaWpluqcF8+6qgv6STPEl0jIlyQmpYGwTrzhgwqok8ltBh/p7GAmYnz81wUhxQRhEr8MBpQrB4fQ/hwIA==
375+
"@types/lodash@^4.14.149":
376+
version "4.14.149"
377+
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440"
378+
integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==
384379

385-
"@types/mz@^0.0.32":
386-
version "0.0.32"
387-
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-0.0.32.tgz#e8248b4e41424c052edc1725dd33650c313a3659"
388-
integrity sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==
380+
"@types/mz@^2.7.0":
381+
version "2.7.0"
382+
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-2.7.0.tgz#3ef27f457c4c3e8b197ca2670ee41d6f4effddf2"
383+
integrity sha512-Q5TZYMKnH0hdV5fNstmMWL2LLw5eRRtTd73KNtsZxoQ2gtCQyET5X79uERUEwGneuxPglg441I7OSY00+9CkSw==
389384
dependencies:
390385
"@types/node" "*"
391386

@@ -394,15 +389,15 @@
394389
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.9.tgz#a07bfa74331471e1dc22a47eb72026843f7b95c8"
395390
integrity sha512-eajkMXG812/w3w4a1OcBlaTwsFPO5F7fJ/amy+tieQxEMWBlbV1JGSjkFM+zkHNf81Cad+dfIRA+IBkvmvdAeA==
396391

397-
"@types/node@^12.7.7":
398-
version "12.7.7"
399-
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.7.tgz#f9bd8c00fa9e1a8129af910fc829f6139c397d6c"
400-
integrity sha512-4jUncNe2tj1nmrO/34PsRpZqYVnRV1svbU78cKhuQKkMntKB/AmdLyGgswcZKjFHEHGpiY8pVD8CuVI55nP54w==
392+
"@types/node@^13.1.4":
393+
version "13.1.4"
394+
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.4.tgz#4cfd90175a200ee9b02bd6b1cd19bc349741607e"
395+
integrity sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==
401396

402-
"@types/prettier@^1.18.2":
403-
version "1.18.2"
404-
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.2.tgz#069e7d132024d436fd1f5771f6932426a695f230"
405-
integrity sha512-2JBasa5Qaj81Qsp/dxX2Njy+MdKC767WytHUDsRM7TYEfQvKPxsnGpnCBlBS1i2Aiv1YwCpmKSbQ6O6v8TpiKg==
397+
"@types/prettier@^1.19.0":
398+
version "1.19.0"
399+
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.0.tgz#a2502fb7ce9b6626fdbfc2e2a496f472de1bdd05"
400+
integrity sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A==
406401

407402
"@types/stack-utils@^1.0.1":
408403
version "1.0.1"
@@ -1805,7 +1800,7 @@ jest-config@^24.9.0:
18051800
pretty-format "^24.9.0"
18061801
realpath-native "^1.1.0"
18071802

1808-
jest-diff@^24.9.0:
1803+
jest-diff@^24.3.0, jest-diff@^24.9.0:
18091804
version "24.9.0"
18101805
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
18111806
integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
@@ -2822,10 +2817,10 @@ prelude-ls@~1.1.2:
28222817
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
28232818
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
28242819

2825-
prettier@^1.18.2:
2826-
version "1.18.2"
2827-
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
2828-
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
2820+
prettier@^1.19.1:
2821+
version "1.19.1"
2822+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
2823+
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
28292824

28302825
pretty-format@^24.9.0:
28312826
version "24.9.0"
@@ -3507,10 +3502,10 @@ trim-right@^1.0.1:
35073502
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
35083503
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
35093504

3510-
ts-jest@^24.1.0:
3511-
version "24.1.0"
3512-
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734"
3513-
integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ==
3505+
ts-jest@^24.2.0:
3506+
version "24.2.0"
3507+
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.2.0.tgz#7abca28c2b4b0a1fdd715cd667d65d047ea4e768"
3508+
integrity sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag==
35143509
dependencies:
35153510
bs-logger "0.x"
35163511
buffer-from "1.x"
@@ -3528,10 +3523,10 @@ tslib@^1.8.0, tslib@^1.8.1:
35283523
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
35293524
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
35303525

3531-
tslint@^5.20.0:
3532-
version "5.20.0"
3533-
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.0.tgz#fac93bfa79568a5a24e7be9cdde5e02b02d00ec1"
3534-
integrity sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g==
3526+
tslint@^5.20.1:
3527+
version "5.20.1"
3528+
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d"
3529+
integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==
35353530
dependencies:
35363531
"@babel/code-frame" "^7.0.0"
35373532
builtin-modules "^1.1.1"
@@ -3573,10 +3568,10 @@ type-check@~0.3.2:
35733568
dependencies:
35743569
prelude-ls "~1.1.2"
35753570

3576-
typescript@^3.6.3:
3577-
version "3.6.3"
3578-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da"
3579-
integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==
3571+
typescript@^3.7.4:
3572+
version "3.7.4"
3573+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19"
3574+
integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==
35803575

35813576
uglify-js@^3.1.4:
35823577
version "3.4.9"

py_codegen/test_fixtures/func_with_literals.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ def func_with_literals(
66
'a',
77
1,
88
Literal[2, 3],
9-
Literal[[True, 3]],
9+
Literal[True, 3],
1010
],
1111
input2: Literal[
1212
1,
1313
None
1414
]
15-
) -> Literal[True, 0.5, Literal[3]]:
15+
) -> Literal[True, 5, Literal[3]]:
16+
print(input1)
1617
print(input2)
17-
return input1
18+
return 5

py_codegen/test_fixtures/func_with_typed_dict.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ def __init__(self, a: int):
2424
def func_with_typed_dict(input: NestedTypedDict) -> OutputType:
2525
return {
2626
'b': len(str(input['child']['a'])),
27-
's': SomeClass(123)
27+
'some thing': 'asd',
28+
's': SomeClass(123),
2829
}

py_codegen/type_extractor/__base__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,8 @@ def params_to_nodes(
1919

2020
def rawtype_to_node(self, typ) -> NodeType:
2121
pass
22+
23+
def add(self, options=None):
24+
def add_decoration(typ):
25+
pass
26+
return add_decoration

0 commit comments

Comments
 (0)