Skip to content

Commit

Permalink
Merge pull request #761 from plotly/config-cleanup
Browse files Browse the repository at this point in the history
Config cleanup
  • Loading branch information
byronz committed Jun 11, 2019
2 parents 3a9c3cf + b389bfb commit 558047f
Show file tree
Hide file tree
Showing 15 changed files with 1,449 additions and 1,259 deletions.
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

0 comments on commit 558047f

Please sign in to comment.