Skip to content
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

Config cleanup #761

Merged
merged 36 commits into from
Jun 11, 2019
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
64dc0c9
remove old misspelled supress->suppress fallback
alexcjohnson Jun 4, 2019
3be5dc6
remove Dash `**kwargs`, unused except to warn about csrf removal
alexcjohnson Jun 4, 2019
e48b12c
remove static_folder kwarg - assets_folder is better
alexcjohnson Jun 4, 2019
50527e1
remove components_cache_max_age kwarg - we have cache-busting urls
alexcjohnson Jun 4, 2019
f0282f8
remove unused resources.config.infer_from_layout
alexcjohnson Jun 4, 2019
ae685ee
new Dash kwarg serve_locally - sets Scripts and Css config
alexcjohnson Jun 4, 2019
7c76583
helpful errors if old kwargs are used in Dash constructor
alexcjohnson Jun 4, 2019
37cf546
remove leading '/' from default assets_url_path
alexcjohnson Jun 5, 2019
b4185e2
docstring for Dash class
alexcjohnson Jun 5, 2019
1ef7046
set default debug=True if enable_dev_tools is called directly
alexcjohnson Jun 5, 2019
2f737cd
change hot_reload_interval from msec to sec to match watch_interval
alexcjohnson Jun 5, 2019
e32914e
update docstrings for enable_dev_tools and run_server
alexcjohnson Jun 5, 2019
77d42a4
simplify and DRY dev_tools setup
alexcjohnson Jun 5, 2019
e579d34
simpler AttributeDict usage, and typo fix
alexcjohnson Jun 5, 2019
2eab141
include all constructor args in app.config
alexcjohnson Jun 6, 2019
3d749f1
fix some callback deps validation edge cases
alexcjohnson Jun 6, 2019
d4a09ba
linting / style improvements
alexcjohnson Jun 6, 2019
a4146d3
linting, encapsulate hot reload state & helpers in AttributeDict, and…
alexcjohnson Jun 6, 2019
e75de81
prevent changing some config keys or adding any new ones
alexcjohnson Jun 7, 2019
d898546
oops, who knew, reload is a builtin
alexcjohnson Jun 7, 2019
080ac2b
test_utils import order fix
alexcjohnson Jun 7, 2019
0056298
changelog for dash.Dash API changes PR
alexcjohnson Jun 7, 2019
cbd48b0
docstring updates as suggested by @byronz
alexcjohnson Jun 8, 2019
02b31cd
self-documenting **obsolete
alexcjohnson Jun 8, 2019
519fdc9
boom in changelog
alexcjohnson Jun 8, 2019
bc50899
Merge branch 'master' into config-cleanup
alexcjohnson Jun 10, 2019
9f20298
re-remove supress fallback after merging test refactor
alexcjohnson Jun 10, 2019
b7b71af
improve testing messages for default timeout
alexcjohnson Jun 10, 2019
dbc1981
re-convert hot_reload_interval to seconds in tests
alexcjohnson Jun 10, 2019
7fe4b52
try to robustify callbacks_generating_children
alexcjohnson Jun 10, 2019
55274be
collapse _time intermediate
alexcjohnson Jun 11, 2019
6c93e60
evaluate wait_cond before any wait in until(_not)
alexcjohnson Jun 11, 2019
4052507
convert test_integration.py to pytest
alexcjohnson Jun 11, 2019
571a710
Merge branch 'master' into config-cleanup
alexcjohnson Jun 11, 2019
62a18d3
add some tcids
alexcjohnson Jun 11, 2019
b389bfb
BZ-proof test_integration
alexcjohnson Jun 11, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions dash/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
## Unreleased
### Changed
- 💥 [#761](https://github.com/plotly/dash/pull/761) Several breaking changes to the `dash.Dash` API:
- Removed two obsolete constructor kwargs: `static_folder` and `components_cache_max_age`
- Removed the misspelled `supress_callback_exceptions` fallback
- Removed the unused `resources.config.infer_from_layout`
- Revamped `app.config`: ALL constructor args are now stored in `config`, with three exceptions: `server`, `index_string`, and `plugins`. None of these are stored in any other instance attributes anymore.
- Changed `hot_reload_interval` from msec to seconds, for consistency with `hot_reload_watch_interval`
- When called from `enable_dev_tools`, `debug=True` by default. It's still `False` by default from `run_server`.

- [#753](https://github.com/plotly/dash/pull/753) `Component` no longer inherits `MutableMapping`, so `values`, `keys`, and more are no longer methods. This fixed an issue reported in [dcc](https://github.com/plotly/dash-core-components/issues/440) where components with certain prop names defined but not provided would cause a failure to render. During component generation we now disallow all props with leading underscores or matching a few remaining reserved words: `UNDEFINED`, `REQUIRED`, `to_plotly_json`, `available_properties`, and `available_wildcard_properties`.

- [#739](https://github.com/plotly/dash/pull/739) Allow the Flask app to be provided to Dash after object initialization. This allows users to define Dash layouts etc when using the app factory pattern, or any other pattern that inhibits access to the app object. This broadly complies with the flask extension API, allowing Dash to be considered as a Flask extension where it needs to be.
Expand Down
24 changes: 22 additions & 2 deletions dash/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,28 @@ def __getattr__(self, key):
try:
return self[key]
except KeyError:
# to conform with __getattr__ spec
raise AttributeError(key)
pass
# to conform with __getattr__ spec
# but get out of the except block so it doesn't look like a nested err
raise AttributeError(key)

def set_read_only(self, names, msg='Attribute is read-only'):
object.__setattr__(self, '_read_only', names)
object.__setattr__(self, '_read_only_msg', msg)

def finalize(self, msg='Object is final: No new keys may be added.'):
"""Prevent any new keys being set"""
object.__setattr__(self, '_final', msg)

def __setitem__(self, key, val):
if key in self.__dict__.get('_read_only', []):
raise AttributeError(self._read_only_msg, key)

final_msg = self.__dict__.get('_final')
if final_msg and key not in self:
raise AttributeError(final_msg, key)

return super(AttributeDict, self).__setitem__(key, val)

# pylint: disable=inconsistent-return-statements
def first(self, *names):
Expand Down
Loading