-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add typing to component init #2276
Merged
Merged
Changes from 2 commits
Commits
Show all changes
61 commits
Select commit
Hold shift + click to select a range
5323742
Add typing to component init.
T4rk1n 8626b3d
Add test_typing
T4rk1n c9bb168
Merge branch 'dev' into prop-typing
T4rk1n 91cc0d6
Add py.typed
T4rk1n 6bbafdc
Lock pyright for py>3.7
T4rk1n c620f58
Merge branch 'dev' into prop-typing
T4rk1n 147798b
Skip pyright test on py 3.6
T4rk1n a5250e5
Merge branch 'dev' into prop-typing
T4rk1n 6d50f15
Add numbers as dict key.
T4rk1n dee40cf
Change number to numbers.Number
T4rk1n 24a8e90
Fix test_generate_class_file
T4rk1n 1f4aed9
Generate enums
T4rk1n 88ca3f3
Generate typed dicts for shapes.
T4rk1n c18f0fd
Add stringcase & typing_extensions to requires.
T4rk1n 544dcab
Fix whitespace around extra types & runtime classes.
T4rk1n 91a2a1d
Fix metadata test
T4rk1n ed360e1
Lock version of typing_extensions for 3.6
T4rk1n b3061a4
Fix keyword in enum & shapes, NoneType in enum + add enum suffix.
T4rk1n a4ea22e
Fix metadata test
T4rk1n 8029f15
Fix test_attrs_match_forbidden_props
T4rk1n b0ed806
Add back base numbers.
T4rk1n ae345e0
Fix tests
T4rk1n d7136e3
Add pyright test cases for shapes
T4rk1n a3dc517
Merge branch 'dev' into prop-typing
T4rk1n a4f2c4a
Merge branch 'dev' into prop-typing
T4rk1n 12c5319
Merge branch 'dev' into prop-typing
T4rk1n 8e0dfea
Fix enum duplicate union type.
T4rk1n 453834b
Add tuple to untyped array typing union.
T4rk1n 13ff296
Add basic tuple as union of arrayOf props typing.
T4rk1n 279950c
Fix typing tests.
T4rk1n e6843fd
Replace enum generation with Literal
T4rk1n 6dc0fc1
Allow all keys in TypedDicts and postpone annotations declared on the…
T4rk1n 709d1e3
Merge branch 'dev' into prop-typing
T4rk1n e6c2356
Relax version of typing_extensions>=4.1.1
T4rk1n 7bc56b9
Fix test_rdrh003_refresh_jwt
T4rk1n 9eee253
Move stringcase requirement to requires-install
T4rk1n 2adb37f
Merge branch 'dev' into prop-typing
T4rk1n f228185
Fix lint on 12
T4rk1n 7b0da8a
Remove py2 code from explicitize_args
T4rk1n fb8decb
Update browser-tools
T4rk1n 197180c
Support plotly.Figure
T4rk1n 8734e1b
Use ComponentType
T4rk1n d5b0ebe
Add Optional to every prop
T4rk1n 4e583e3
Fix list[str] > List[str]
T4rk1n 150c2a5
Fix test_typing
T4rk1n 96b931a
Update pyright
T4rk1n 4045a61
Update pyright
T4rk1n 46d05be
Fix custom imports.
T4rk1n 85c26b7
Include py.typed in manifest
T4rk1n 40bd21a
Add typing to callback function
T4rk1n 2de448e
Merge branch 'dev' into prop-typing
T4rk1n 648a1c6
build
T4rk1n 8d185c8
Update tests/integration/test_typing.py
T4rk1n ef6b054
Remove tuple from list typing
T4rk1n 6b30d08
Deprecate runtime component loader
T4rk1n dd5cb44
Merge branch 'prop-typing' of github.com:plotly/dash into prop-typing
T4rk1n 26a83e5
Backward compatible ComponentType.
T4rk1n 18fad2d
Remove component loader deprecation from pr.
T4rk1n 95d8b0d
Merge branch 'dev' into prop-typing
T4rk1n 00da064
Merge branch 'dash-3.0' into prop-typing
T4rk1n d13b343
Fix type assertion
T4rk1n File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
def generate_any(_): | ||
return "typing.Any" | ||
|
||
|
||
def generate_shape(t): | ||
alexcjohnson marked this conversation as resolved.
Show resolved
Hide resolved
alexcjohnson marked this conversation as resolved.
Show resolved
Hide resolved
|
||
props = [] | ||
|
||
for prop in t["value"].values(): | ||
prop_type = PROP_TYPING.get(prop["name"], generate_any)(prop) | ||
if prop_type not in props: | ||
props.append(prop_type) | ||
|
||
if len(props) == 0: | ||
return "typing.Any" | ||
|
||
return f"typing.Dict[str, typing.Union[{', '.join(props)}]]" | ||
|
||
|
||
def generate_union(t): | ||
types = [] | ||
for union in t["value"]: | ||
u_type = PROP_TYPING.get(union["name"], generate_any)(union) | ||
if u_type not in types: | ||
types.append(u_type) | ||
return f"typing.Union[{', '.join(types)}]" | ||
|
||
|
||
def generate_tuple(type_info): | ||
els = type_info.get("elements") | ||
elements = ", ".join(get_prop_typing(x.get("name"), x) for x in els) | ||
return f"typing.Tuple[{elements}]" | ||
|
||
|
||
def generate_array_of(t): | ||
typed = PROP_TYPING.get(t["value"]["name"], generate_any)(t["value"]) | ||
return f"typing.List[{typed}]" | ||
|
||
|
||
def generate_object_of(t): | ||
alexcjohnson marked this conversation as resolved.
Show resolved
Hide resolved
|
||
typed = PROP_TYPING.get(t["value"]["name"], generate_any)(t["value"]) | ||
return f"typing.Dict[str, {typed}]" | ||
|
||
|
||
def generate_type(typename): | ||
def type_handler(_): | ||
alexcjohnson marked this conversation as resolved.
Show resolved
Hide resolved
|
||
return typename | ||
|
||
return type_handler | ||
|
||
|
||
def get_prop_typing(type_name: str, type_info): | ||
return PROP_TYPING.get(type_name, generate_any)(type_info) | ||
|
||
|
||
PROP_TYPING = { | ||
"array": generate_type("typing.List"), | ||
"arrayOf": generate_array_of, | ||
"object": generate_type("typing.Dict"), | ||
"shape": generate_shape, | ||
"exact": generate_shape, | ||
"string": generate_type("str"), | ||
"bool": generate_type("bool"), | ||
"number": generate_type("typing.Union[float, int]"), | ||
"node": generate_type( | ||
"typing.Union[str, int, float, Component," | ||
" typing.List[typing.Union" | ||
"[str, int, float, Component]]]" | ||
), | ||
"func": generate_any, | ||
"element": generate_type("Component"), | ||
"union": generate_union, | ||
"any": generate_any, | ||
"custom": generate_any, | ||
"enum": generate_any, | ||
"objectOf": generate_object_of, | ||
"tuple": generate_tuple, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:-)