-
-
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
Fixes to address unintended props reshuffling behaviour #545
Conversation
.gitignore
Outdated
@@ -20,3 +20,4 @@ dist | |||
npm-debug* | |||
/.tox | |||
.idea | |||
package-lock.json |
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.
It shouldn't be necessary to ignore this, though there are occasional issues.
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.
K, this has been 🔪 ... as has the package-lock.json
.
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.
I don't understand the package-lock.json
, there's no package.json
in dash. 🔪
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.
Need to fix the error in generate_class_string
@@ -163,7 +142,7 @@ def generate_class_string(name, props, project_shortname, prefix): | |||
'\'{}\''.format(p) | |||
for p in prop_keys | |||
if '*' not in p and | |||
p not in ['setProps', 'dashEvents', 'fireEvent'] | |||
p != 'setProps' + ['**kwargs'] |
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.
That doesn't work.
>>> 'setProps' + ['**kwargs']
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: must be str, not list
p != 'setProps' + ['**kwargs'] | |
p not in ['setProps', '**kwargs'] |
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.
Oh that's not quite it either... the p not in [...]
or p != ...
clause is a filter in an iterator - in the python generator code:
dash/dash/development/_py_components_generation.py
Lines 118 to 126 in e72f483
default_argtext += ", ".join( | |
[('{:s}=Component.REQUIRED'.format(p) | |
if props[p]['required'] else | |
'{:s}=Component.UNDEFINED'.format(p)) | |
for p in prop_keys | |
if not p.endswith("-*") and | |
p not in python_keywords and | |
p not in ['dashEvents', 'fireEvent', 'setProps']] + ['**kwargs'] | |
) |
note the extra [...]
from immediately after .join(
to right before + ['**kwargs']
that turns this into a list that we can then append '**kwargs'
to by adding a second list. I'm assuming in R **kwargs
doesn't mean anything, but there's some other feature to play the role of allowing arbitrary extra named arguments?
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.
I'm assuming in R **kwargs doesn't mean anything, but there's some other feature to play the role of allowing arbitrary extra named arguments?
@alexcjohnson Correct. For the wildcards, I've used ellipsis (aka \dots
, ...
) for this purpose. It seems to be working to pass in an arbitrary number (including zero) of wildcard arguments.
Hah too funny! Right, |
I'm glad I've somehow fallen into the component management pipeline on the Python side as well, because for all the bumps and bruises, I'm certainly learning a few things. |
🐛 modified prop_names address trailing whitespace 🔧 flake8 and pylint edits 🚿 pylint edits
🚿 pylint edit 🚿 flake8 edit 🚿 flake8 edit 🐛 fixed TypeError
If it's possible to have a look at my recent changes and let me know if they are acceptable, and what further refinements are needed, that'd be great. N.B. I ran into an error while testing the R component generation in Python 3 I hadn't seen previously:
I attempted to address this by wrapping
Component generation appears to be successful for both languages, and using Python 2 and 3; will look a bit more tonight to confirm. |
Yeah, |
Yes, |
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.
💃
@@ -82,13 +89,17 @@ def generate_components(components_source, project_shortname, | |||
) | |||
|
|||
with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: | |||
json.dump(metadata, f) | |||
json.dump(metadata, f, sort_keys=True) |
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.
⏪ Sorting the key reorder the keys, the ordered dict will keep the right order alone.
set default type of Input components to 'text'
Proposed changes introduced by this PR:
props
in Dash components is maintained by providingobject_pairs_hook=OrderedDict
tojson.loads
.prop_keys
exclusions has been refactored to account for removal of events, and to properly omit wildcards.children
to be passed as a list or function, as in Dash for Python, and ellipsis is used for wildcards only, as the final formal argument for component functions.inst/deps
rather thaninst/lib
to address an issue withinstall_github
.defaultValue
fields is now similar to Dash for Python, fixing issues with rendering of components due to passing incorrect defaults.version.py
.byteify
function to avoid storing strings from JSON as Unicode in Python 2.x, so that lists of strings in components should be identical in appearance across versions.assert_valid_wildcards
is called when wildcards are available for a given component, to validate any wildcard input passed in via...
in the corresponding function formals in R.