Skip to content

Commit

Permalink
Merge branch 'develop' into feature/#2190-localstorage-support
Browse files Browse the repository at this point in the history
  • Loading branch information
dinhlongviolin1 authored Nov 15, 2024
2 parents a960e78 + c9e0931 commit 8aa0704
Show file tree
Hide file tree
Showing 46 changed files with 3,221 additions and 852 deletions.
15 changes: 15 additions & 0 deletions .github/workflows/cleanup-dev-releases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Cleanup Old Pre-Releases

on:
workflow_dispatch: # Allows manual triggering

jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- name: Cleanup old dev releases
id: cleanup
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
sh tools/release/cleanup_dev_releases.sh
33 changes: 21 additions & 12 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ issue or PR if you're still interested in working on it.
### Python

Taipy's repositories follow the [PEP 8](https://www.python.org/dev/peps/pep-0008/) and
[PEP 484](https://www.python.org/dev/peps/pep-0484/) coding convention.
[PEP 484](https://www.python.org/dev/peps/pep-0484/) coding convention. Gui variables need to be `snake_case` to be correctly converted into the `camelCase`, used for typescript variables.

### TypeScript

Expand Down Expand Up @@ -255,17 +255,26 @@ npm run build:dev
This will preserve the debugging symbols, and you will be able to navigate in the TypeScript code
from your debugger.

!!!note "Web application location"
When you are developing front-end code for the Taipy GUI package, it may be cumbersome to have
to install the package over and over when you know that all that has changed is the JavaScript
bundle that makes the Taipy web app.

By default, the Taipy GUI application searches for the front-end code in the
`[taipy-gui-package-dir]/taipy/gui/webapp` directory.
You can, however, set the environment variable `TAIPY_GUI_WEBAPP_PATH` to the location of your
choice, and Taipy GUI will look for the web app in that directory.
If you set this variable to the location where you build the web app repeatedly, you will no
longer have to reinstall Taipy GUI before you try your code again.
#### 📝A note on "Web application location"
When you are developing front-end code for the Taipy GUI package, it may be cumbersome to have
to install the package over and over when you know that all that has changed is the JavaScript
bundle that makes the Taipy web app.

By default, the Taipy GUI application searches for the front-end code in the
`[taipy-gui-package-dir]/taipy/gui/webapp` directory.
You can, however, set the environment variable `TAIPY_GUI_WEBAPP_PATH` to the location of your
choice, and Taipy GUI will look for the web app in that directory.
If you set this variable to the location where you build the web app repeatedly, you will no
longer have to reinstall Taipy GUI before you try your code again.
In python, you can handle this with:
```python
import os
os.environ["TAIPY_GUI_WEBAPP_PATH"] = os.path.normpath( "/path/to/your/taipy/taipy/gui/webapp" )
```
or in bash with:
```bash
export TAIPY_GUI_WEBAPP_PATH="/path/to/your/taipy/taipy/gui/webapp"
```

### Running the tests

Expand Down
2 changes: 1 addition & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ flask = "==3.0.0"
flask-cors = "==5.0.0"
flask-socketio = "==5.3.6"
Flask-RESTful = ">=0.3.9"
gevent = "==23.7.0"
gevent = "==24.11.1"
gevent-websocket = "==0.10.1"
gitignore-parser = "==0.1.1"
kthread = "==0.2.3"
Expand Down
83 changes: 83 additions & 0 deletions doc/gui/examples/charts/matplotlib/image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Copyright 2021-2024 Avaiga Private Limited
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
# -----------------------------------------------------------------------------------------
# To execute this script, make sure that the taipy-gui package is installed in your
# Python environment and run:
# python <script>
# -----------------------------------------------------------------------------------------
import os

import matplotlib.pyplot as plt
from taipy.gui import Gui, Markdown

# Generate a scatter plot
x = [1, 2, 3, 4, 5] # x axis values
y = [10, 14, 12, 15, 18] # y axis values
sizes = [100, 100, 100, 100, 100] # Bubble sizes
colors = [30, 40, 50, 60, 70] # Bubble color values that will be mapped to shades of colormap (cmap)

# Scatter plot
# The `c` parameter uses the `colors` list to map values to the colormap (cmap)
# The `edgecolors` parameter sets the color of the edges around the bubbles
plt.scatter(x, y, s=sizes, c=colors, cmap='Greens', edgecolors='black', linewidths=1)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Matplotlib 2D Scatter Plot')

# Adding labels next to each point
for i in range(len(x)):
plt.text(x[i] + 0.1, y[i] - 0.1, f'Point {i+1}', fontsize=9, ha='left')

# Creating legend entries for each point
# Each entry corresponds to a point, with the color and label indicating the point's position.
# The `markerfacecolor` sets the fill color of the legend marker to match the point's color in the 'Greens' colormap.
# The `markeredgecolor` sets the edge color of the legend marker.
# The `markeredgewidth` sets the width of the edge.
handles = [
plt.Line2D(
[0], [0], marker='o', color='w',
markerfacecolor=plt.cm.Greens(color / max(colors)),
markersize=10, # Adjust the size for visibility
label=f'Point {i+1}',
markeredgewidth=1, # Thickness of the edge color
markeredgecolor='black' # Edge color to match the plot
) for i, color in enumerate(colors)
]

# Placing the legend on the left side of the chart
plt.legend(handles=handles, title="Points", loc="center left", bbox_to_anchor=(1, 0.5), frameon=True)

# Adjust the layout to ensure everything fits and nothing is clipped
plt.tight_layout(rect=[0, 0, 1, 1])

# Save the figure as a PNG image
output_dir = './images'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
content = "./images/figure.png"
plt.savefig(content)

# Define Taipy page content
page_content = Markdown("""
# Matplotlib 2D Scatter Plot
<|{content}|image|class_name=scatter-plot|>
""", style={
".scatter-plot": {
"display": "block",
"margin": "auto",
"max-width": "100% !important",
"width": "max-content !important",
"height": "max-content !important"
}
})

if __name__ == "__main__":
Gui(page_content).run(title="Chart-Scatter-Matplotlib")
19 changes: 19 additions & 0 deletions doc/gui/examples/controls/datanode_viewer_json.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "Sample Data",
"type": "Example JSON",
"attributes": {
"id": 123,
"description": "A simple JSON structure for demonstration",
"values": [
1,
2,
3,
4,
5
],
"nested": {
"flag": true,
"count": 10
}
}
}
22 changes: 22 additions & 0 deletions doc/gui/examples/controls/datanode_viewer_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import taipy as tp
import taipy.gui.builder as tgb
from taipy import Config, Orchestrator, Scope
from taipy.gui import Gui

json_config_node = Config.configure_json_data_node(
id="json_node",
default_path="./datanode_viewer_json.json",
scope=Scope.GLOBAL,
)

with tgb.Page() as data_node_viewer:
tgb.data_node(
data_node="{json_data_node}"
)

gui = Gui(page=data_node_viewer)

if __name__ == "__main__":
Orchestrator().run()
json_data_node = tp.create_global_data_node(json_config_node)
gui.run(title="Datanode Viewer - json support")
Loading

0 comments on commit 8aa0704

Please sign in to comment.