Skip to content

Commit

Permalink
Merge pull request #2981 from plotly/master-2.18.0
Browse files Browse the repository at this point in the history
Master 2.18.0
  • Loading branch information
T4rk1n authored Sep 4, 2024
2 parents 791c1eb + 91cb0f4 commit 851721b
Show file tree
Hide file tree
Showing 205 changed files with 8,667 additions and 6,473 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: 2.1
orbs:
win: circleci/[email protected]
percy: percy/[email protected]
browser-tools: circleci/[email protected].6
browser-tools: circleci/[email protected].8


jobs:
Expand Down
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence
* @alexcjohnson @T4rk1n @ndrezn
* @alexcjohnson @T4rk1n @ndrezn @gvwilson @emilykl
2 changes: 1 addition & 1 deletion .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ max-bool-expr=5
max-branches=15

# Maximum number of locals for function / method body
max-locals=20
max-locals=25

# Maximum number of parents for a class (see R0901).
max-parents=7
Expand Down
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,28 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/).

## [2.18.0] - 2024-09-04

## Added

- [#2881](https://github.com/plotly/dash/pull/2881) Add outputs_list to window.dash_clientside.callback_context. Fixes [#2877](https://github.com/plotly/dash/issues/2877).
- [#2903](https://github.com/plotly/dash/pull/2903) Add callback on_error handler, either globally on Dash init or per callback basis. Receives the exception as first argument, can return output(s) or None for `no_update`. Access to original callback context is preserved and `set_props` works inside the error handler.
- [#2936](https://github.com/plotly/dash/pull/2936) Adds support for TypeScript 5.5+.
- [#2789](https://github.com/plotly/dash/pull/2789) Add library loading capacity to `_allow_dynamic_callbacks`

## Fixed

- [#2898](https://github.com/plotly/dash/pull/2898) Fix error thrown when using non-existent components in callback running keyword. Fixes [#2897](https://github.com/plotly/dash/issues/2897).
- [#2892](https://github.com/plotly/dash/pull/2860) Fix ensures dcc.Dropdown menu maxHeight option works with Datatable. Fixes [#2529](https://github.com/plotly/dash/issues/2529) [#2225](https://github.com/plotly/dash/issues/2225)
- [#2896](https://github.com/plotly/dash/pull/2896) The tabIndex parameter of Div can accept number or string type. Fixes [#2891](https://github.com/plotly/dash/issues/2891)
- [#2900](https://github.com/plotly/dash/pull/2900) Allow strings in layout list. Fixes [#2890](https://github.com/plotly/dash/issues/2890)
- [#2908](https://github.com/plotly/dash/pull/2908) Fix when environment variables are ignored by Dash.run() at runtime. Fixes [#2902](https://github.com/plotly/dash/issues/2902)
- [#2888](https://github.com/plotly/dash/pull/2888) Add id to dcc.Loading DOM. Fixes [#2878](https://github.com/plotly/dash/issues/2878)
- [#2922](https://github.com/plotly/dash/pull/2922) Fix background callback hash_function when source is unavailable. Fixes [#1885](https://github.com/plotly/dash/issues/1885)
- [#2915](https://github.com/plotly/dash/pull/2915) Fix 'AttributeError' when layout is a function that returns a list of components. Fixes [#2905](https://github.com/plotly/dash/issues/2905)
- [#2956](https://github.com/plotly/dash/pull/2956) Add missing useEffect dependency to dcc.Loading component.
- [#2909](https://github.com/plotly/dash/pull/2909) Rehighlights dcc.Markdown when it is updated, fixes [#2895](https://github.com/plotly/dash/issues/2895)

## [2.17.1] - 2024-06-12

## Fixed
Expand All @@ -27,6 +49,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
- `target_components` specifies components/props triggering the loading spinner
- `custom_spinner` enables using a custom component for loading messages instead of built-in spinners
- `display` overrides the loading status with options for "show," "hide," or "auto"

- [#2822](https://github.com/plotly/dash/pull/2822) Support no output callbacks. Fixes [#1549](https://github.com/plotly/dash/issues/1549)
- [#2822](https://github.com/plotly/dash/pull/2822) Add global set_props. Fixes [#2803](https://github.com/plotly/dash/issues/2803)

Expand Down
144 changes: 120 additions & 24 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,136 @@
# Contributor Guide

## Getting Started
Glad that you decided to make your contribution in Dash. This guide provides instructions to set up and build the Dash repository and describes best practices when contributing to the Dash repository.

Glad that you decided to make your contribution in Dash, to set up your development environment, run the following commands:
### Fork the Dash repository
When contributing to the Dash repository you should always work in your own copy of the Dash repository. Create a fork of the `dev`-branch, to create a copy of the Dash repository in your own GitHub account. See official instructions for [creating a fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) if needed.

Clone the forked repository (either option will work). Replace `<your_user_name>` with your user name.
```
git clone https://github.com/<your_user_name>/dash.git
```
or
```
git clone [email protected]:<your_user_name>/dash.git
```

When working on a new feature, always create a new branch and create the feature in that branch. For more best practices, read the [Git section](#git).

### Configuring your system

<details>
<summary>For JavaScript beginners: What are nvm, npm and Node?</summary>

If you are new to JavaScript, many aspects of setting up a working environment and working with the new ecosystem can be a bit overwhelming. Especially if Plotly Dash is your first experience with the JavaScript ecosystem. This section explains common terms that are used when working with JavaScript environments: `nvm`, `Node`, and `npm`
- `nvm` stands for Node Version Manager. This is a tool that allows you to manage Node installations. Quite convenient if you are working on multiple tools that require different versions of Node.js. `nvm` allows you to switch between Node installations with a single command.
- `Node.js` is the actual JavaScript runtime environment. Visit the [official site](https://nodejs.org/en) for more info. Don't download Node just yet, install it through `nvm`.
- `npm` stands for Node Package Manager. This is the largest software registry for JavaScript packages. Check the [official site](https://docs.npmjs.com/about-npm) for more info.

---
</details>

<details>

<summary>Installing JavaScript on your system</summary>

> **For Windows users**: `nvm` is not integrated in Windows so a third-party tool needs to be used. If you don't have one yet, you can start with [NVM for Windows](https://github.com/coreybutler/nvm-windows) (`nvm-windows`). This version manager is widely used and is well recommended.
>
> Carefully follow the installation instructions listed on the GitHub page. As recommended by the installation instructions there: uninstall any pre-existsing Node installations. You will run into permission errors otherwise.
With `nvm` available from the command line open any terminal of your preference and install Node and npm:
```
nvm install latest
```
After installation is complete, activate the Node environment (**admin access required**)
```
nvm use latest
```
Confirm that the activation was successfull
```
node -v
npm -v
```
If these commands are not recognized, close the terminal, re-open a new instance and retry. If the commands return a version number, you have set up your JavaScript environment successfully!

---
</details>

## Building Dash
### For Windows users: use a Bash terminal
The scripts that run during the build process are designed for a Bash terminal. The default terminals on Windows systems are either PowerShell or Command Prompt. However, the build process will fail (potentially bricking your Node environment) when using these terminals.

The listed commands should be executed from a Bash terminal, e.g. you can use the Git Bash terminal (which is normally installed when installing Git using the default settings). Otherwise, you need to find another way to access a Bash terminal.

### Build process
The build process is mostly the same for Windows and Linux systems. Wherever there are differences between the operating systems, it is marked.

<details>
<summary> Pycharm automatically loads Python environments! </summary>

If you work in Pycharm you can open the Dash repo directory as a project (`File -> Open` then browse for the `dash` directory containing your dash repo, and open the directory as a project). You can configure your Python virtual environment using the Python Interpreter tool.

Secondly, you can open the Git Bash terminal in Pycharm and it will automatically activate your selected Python Interpreter in the terminal. You can verify this by executing `pip --version` in the Git Bash terminal, it will show you the path from where pip is run, which is the path where your virtual environment is installed. If you follow these steps, you can skip the first few steps in the overview below.

---
</details>

Open a Bash terminal in the `dash` repository, Git Bash terminal for example on Windows. Create and activate virtual environment (skip this part if you manage the Python Interpreter via Pycharm):
- Linux/Mac:

On some Linux/Mac environments, use `.` instead of `source`
```bash
$ python3 -m venv .venv/dev
$ source .venv/dev/bin/activate
```
- Windows:
```bash
$ python -m venv .venv/dev
$ source .venv/dev/scripts/activate
```

Install dash and dependencies:
```bash
# in your working directory
$ git clone [email protected]:plotly/dash.git
$ cd dash
$ python3 -m venv .venv/dev
# activate the virtualenv
# on windows `.venv\dev\scripts\activate`
# on some linux / mac environments, use `.` instead of `source`
$ source .venv/dev/bin/activate
# install dash and dependencies
$ pip install -e .[ci,dev,testing,celery,diskcache] # in some shells you need \ to escape []
$ npm ci
# this script will build the dash-core-components, dash-html-components, dash-table,
# and renderer bundles; this will build all bundles from source code in their
# respective directories. The only true source of npm version is defined
# in package.json for each package.
#
$ npm run build # runs `renderer build` and `npm build` in dcc, html, table
# build and install components used in tests
# on windows, the developer will need to use `npm run first-build` this performs additional first steps
#
# Alternatively one could run part of the build process e.g.
```
`npm ci` does a clean install of all packages listed in package-lock.json. Package versions will be exactly like stated in the file.

Next, build dash-core-components, dash-html-components, dash-table, and renderer bundles. This will build all bundles from source code in their respective directories. The only true source of npm version is defined in package.json for each package:
- Linux/Mac:
```bash
$ npm run build # runs `renderer build` and `npm build` in dcc, html, table
```

- Windows:

On Windows the build is done via the first-build script. This adds extra steps that are automatically applied on Linux systems, but not on Windows systems:
```bash
$ npm run first-build
```

When you first clone the repository, and check out a new branch, you must run the full build as above. Later on, when you only work in one part of the library, you could run part of the build process e.g.
```bash
$ dash-update-components "dash-core-components"
# to only build dcc when developing dcc
# But when you first clone check out a new branch, you must run the full build as above.
#
```
to only build dcc when developing dcc.

Build and install components used in tests:
```bash
$ npm run setup-tests.py # or npm run setup-tests.R
# you should see dash points to a local source repo
```

Finally, check that the installation succeeded by checking the output of this command:
```bash
$ pip list | grep dash
```

The output should look like this:
```bash
dash <version number> /path/to/local/dash/repo/
```

### Dash-Renderer Beginner Guide

`Dash Renderer` began as a separate repository. It was merged into the main `Dash` repository as part of the 1.0 release. It is the common frontend for all Dash backends (**R** and **Python**), and manages React Component layout and backend event handling.
Expand Down
2 changes: 1 addition & 1 deletion MAKE_A_NEW_BACK_END.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Each back end must have a way to generate its own wrappers for these React compo
There is a relatively small set of routes (urls/url patterns) that a Dash server must be prepared to serve. A good way to get a feel for them is to load https://dash.plotly.com/ and look at the page structure (“Elements” tab in Chrome devtools) and the network requests that are made on page load and their responses (“Network” tab). You can see all of the route patterns if you look at the main [`dash.dash` file](https://github.com/plotly/dash/blob/dev/dash/dash.py) and search for `self._add_url` - plus the one `self.server.register_blueprint` call above it. These routes are:
- `""` and anything not caught by other routes listed below (see https://dash.plotly.com/urls): the “index” route, serving the HTML page skeleton. The Python back end implements a bunch of customization options for this, but for a first version these are unnecessary. See the template given in [`_default_index`](https://github.com/plotly/dash/blob/357f22167d40ef00c92ff165aa6df23c622799f6/dash/dash.py#L58-L74) for the basic structure and pieces that need to be included, most importantly `{%config}` that includes info like whether to display in-browser devtools, and `{%scripts}` and `{%renderer}` that load the necessary `<script>` tags and initialize the dash renderer.
- `_dash-component-suites/<package_name>/<path>`: serve the JavaScript and related files given by each component package, as described above. Note that we include an extra cache-busting portion in each filename. In the Python version this is the version number and unix timestamp of the file as reported by the filesystem
- `_dash-layout"`: Gives the JSON structure of the initial Dash components to render on the page (`app.layout` in Python)
- `_dash-layout`: Gives the JSON structure of the initial Dash components to render on the page (`app.layout` in Python)
- `_dash-dependencies`: A JSON array of all callback functions defined in the app.
- `_dash-update-component`: Handles all server-side callbacks. Responds in JSON. Note that `children` outputs can contain Dash components, which must be JSON encoded the same way as in `_dash-layout`.
- `_reload-hash`: once hot reloading is implemented and enabled (normally only during development), this route tells the page when something has changed on the server and the page should refresh.
Expand Down
Loading

0 comments on commit 851721b

Please sign in to comment.