Skip to content

Commit

Permalink
Merge branch 'develop' into feature/#2071-rank-datanodes-in-selector
Browse files Browse the repository at this point in the history
  • Loading branch information
jrobinAV authored Nov 27, 2024
2 parents 3ba5c9c + 7d455d1 commit f55f699
Show file tree
Hide file tree
Showing 104 changed files with 1,893 additions and 721 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/dependencies-management.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# This workflow is used to manage the dependencies of the Taipy packages.
# - Runs each Sunday.
# - Runs every 2 weeks on Sundays.
# - For each Python version supported:
# - Call a custom script to align dependencies between Taipy packages.
# - Call a custom script to update dependencies (Pipfile and requirements.txt).
Expand All @@ -12,7 +12,7 @@ name: Dependencies management

on:
schedule:
# Run every 2 weeks on Sunday at mid day UTC
# Run every 2 weeks on Sunday at midday UTC
- cron: 00 12 */14 * 0

workflow_dispatch:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/partial-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
run: pip install --upgrade setuptools wheel

- name: Install pipenv
run: pip install --upgrade pipenv
run: pip install pipenv --upgrade

- name: Install Dependencies
run: pipenv install --dev --python=${{ matrix.python-version }}
Expand Down Expand Up @@ -154,7 +154,7 @@ jobs:

- name: Install pipenv
if: steps.changes.outputs.core == 'true'
run: pip install --upgrade pipenv
run: pip install pipenv --upgrade

- name: Install Dependencies
if: steps.changes.outputs.core == 'true'
Expand Down Expand Up @@ -197,7 +197,7 @@ jobs:

- name: Install pipenv
if: steps.changes.outputs.core == 'true'
run: pip install --upgrade pipenv
run: pip install pipenv --upgrade

- name: Install Dependencies
if: steps.changes.outputs.core == 'true'
Expand Down
8 changes: 4 additions & 4 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ apispec = {extras = ["yaml"], version = "==6.3"}
apispec-webframeworks = "==0.5.2"
cookiecutter = "==2.1.1"
deepdiff = "==6.7.1"
flask = "==3.0.0"
flask = "==3.1.0"
flask-cors = "==5.0.0"
flask-socketio = "==5.3.6"
flask-socketio = "==5.4.1"
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 All @@ -21,7 +21,7 @@ marshmallow = "==3.20.1"
networkx = "==2.6"
openpyxl = "==3.1.2"
pandas = "==1.3.5"
pyarrow = "*"
pyarrow = "==16.0.0"
pymongo = {extras = ["srv"], version = "==4.6.3"}
python-dotenv = "==1.0.0"
python-magic = {version = "==0.4.24", markers="sys_platform != 'win32'"}
Expand Down
23 changes: 23 additions & 0 deletions doc/gui/examples/controls/button_size.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 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>
# -----------------------------------------------------------------------------------------
from taipy.gui import Gui

page = """
<|Button Label|button|size=large|>
"""

if __name__ == "__main__":
Gui(page).run(title="Button - Size")
23 changes: 23 additions & 0 deletions doc/gui/examples/controls/button_variant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 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>
# -----------------------------------------------------------------------------------------
from taipy.gui import Gui

page = """
<|Button Label|button|variant=contained|>
"""

if __name__ == "__main__":
Gui(page).run(title="Button - Variant")
11 changes: 5 additions & 6 deletions doc/gui/examples/controls/chat_calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,19 @@
# Human-computer dialog UI based on the chat control.
# -----------------------------------------------------------------------------------------
from math import cos, pi, sin, sqrt, tan # noqa: F401
from typing import Optional

from taipy.gui import Gui

# The user interacts with the Python interpreter
users = ["human", "Result"]
messages: list[tuple[str, str, str, Optional[str]]] = []
messages: list[tuple[str, str, str]] = []


def evaluate(state, var_name: str, payload: dict):
# Retrieve the callback parameters
(_, _, expression, sender_id, image_url) = payload.get("args", [])
(_, _, expression, sender_id, _) = payload.get("args", [])
# Add the input content as a sent message
messages.append((f"{len(messages)}", expression, sender_id, image_url))
messages.append((f"{len(messages)}", expression, sender_id))
# Default message used if evaluation fails
result = "Invalid expression"
try:
Expand All @@ -38,12 +37,12 @@ def evaluate(state, var_name: str, payload: dict):
except Exception:
pass
# Add the result as an incoming message
messages.append((f"{len(messages)}", result, users[1], None))
messages.append((f"{len(messages)}", result, users[1]))
state.messages = messages


page = """
<|{messages}|chat|users={users}|sender_id={users[0]}|on_action=evaluate|>
<|{messages}|chat|users={users}|sender_id={users[0]}|on_action=evaluate|don't allow_send_images|>
"""

Gui(page).run(title="Chat - Calculator")
6 changes: 4 additions & 2 deletions doc/gui/examples/controls/chat_discuss.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from taipy.gui.gui_actions import navigate, notify

username = ""
users: list[Union[str, Icon]] = []
users: list[tuple[str, Union[str, Icon]]] = []
messages: list[tuple[str, str, str, Optional[str]]] = []

Gui.add_shared_variables("messages", "users")
Expand Down Expand Up @@ -82,4 +82,6 @@ def send(state, _: str, payload: dict):
"""

pages = {"register": register_page, "discuss": discuss_page}
gui = Gui(pages=pages).run(title="Chat - Discuss")

if __name__ == "__main__":
gui = Gui(pages=pages).run(title="Chat - Discuss")
47 changes: 47 additions & 0 deletions doc/gui/examples/controls/chat_images.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 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>
# -----------------------------------------------------------------------------------------
# A chatting application based on the chat control.
# In order to see the users' avatars, the image files must be stored next to this script.
# If you want to test this application locally, you need to use several browsers and/or
# incognito windows so a given user's context is not reused.
# -----------------------------------------------------------------------------------------
from taipy.gui import Gui, Icon

msgs = [
["1", "msg 1", "Alice", None],
["2", "msg From Another unknown User", "Charles", None],
["3", "This from the sender User", "taipy", "./beatrix-avatar.png"],
["4", "And from another known one", "Alice", None],
]
users = [
["Alice", Icon("./alice-avatar.png", "Alice avatar")],
["Charles", Icon("./charles-avatar.png", "Charles avatar")],
["taipy", Icon("./beatrix-avatar.png", "Beatrix avatar")],
]


def on_action(state, id: str, payload: dict):
(reason, varName, text, senderId, imageData) = payload.get("args", [])
msgs.append([f"{len(msgs) +1 }", text, senderId, imageData])
state.msgs = msgs


page = """
<|{msgs}|chat|users={users}|allow_send_images|>
"""

if __name__ == "__main__":
Gui(page).run(title="Chat - Images")
17 changes: 8 additions & 9 deletions doc/gui/examples/controls/chat_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
msgs = [
["1", "msg 1", "Alice", None],
["2", "msg From Another unknown User", "Charles", None],
["3", "This from the sender User", "taipy", "./sample.jpeg"],
["3", "This from the sender User", "taipy", None],
["4", "And from another known one", "Alice", None],
]
users = [
Expand All @@ -25,15 +25,12 @@


def on_action(state, var_name: str, payload: dict):
args = payload.get("args", [])
msgs.append([f"{len(msgs) +1 }", args[2], args[3], args[4]])
(reason, varName, text, senderId, imageData) = payload.get("args", [])
msgs.append([f"{len(msgs) +1 }", text, senderId, imageData])
state.msgs = msgs


Gui(
"""
<|toggle|theme|>
# Test Chat
page="""
<|1 1 1|layout|
<|{msgs}|chat|users={users}|show_sender={True}|>
Expand All @@ -42,5 +39,7 @@ def on_action(state, var_name: str, payload: dict):
<|{msgs}|chat|users={users}|show_sender={True}|not with_input|>
|>
""",
).run()
"""

if __name__ == "__main__":
Gui(page).run(title="Chat - Simple")
16 changes: 16 additions & 0 deletions doc/gui/examples/controls/status_icons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from taipy.gui import Gui

status = [
("warning", "Task is launched."),
("warning", "Tasks is waiting."),
("error", "Task timeout."),
("success", "Task Succeeded"),
("info", "Process was cancelled.")
]

page = """
<|{status}|status|use_icon|>
"""

if __name__ == "__main__":
Gui(page).run(title="Status - With icons")
20 changes: 20 additions & 0 deletions doc/gui/examples/controls/status_mixed_icons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from taipy.gui import Gui

status = [
("warning", "Task is launched."),
("warning", "Tasks is waiting."),
("error", "Task timeout."),
("success", "Task Succeeded"),
("info", "Process was cancelled.")
]

# Info: svg icon (pants.svg)
# success: no icon
# warning: default icon
# error: inline svg icon (red disc)
page = """
<|{status}|status|don't use_icon|use_icon[info]=https://www.svgrepo.com/show/530594/pants.svg|use_icon[success]|use_icon[error]=<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24'><circle cx='12' cy='12' r='10' fill='red'/></svg>|>
""" # noqa: E501

if __name__ == "__main__":
Gui(page).run(title="Status - With mixed icons")
16 changes: 16 additions & 0 deletions doc/gui/examples/controls/status_simple.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from taipy.gui import Gui

status = [
("warning", "Task is launched."),
("warning", "Tasks is waiting."),
("error", "Task timeout."),
("success", "Task Succeeded"),
("info", "Process was cancelled.")
]

page = """
<|{status}|status|>
"""

if __name__ == "__main__":
Gui(page).run(title="Status - Simple")
20 changes: 20 additions & 0 deletions doc/gui/examples/controls/status_svg_icons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from taipy.gui import Gui

status = [
("warning", "Task is launched."),
("warning", "Tasks is waiting."),
("error", "Task timeout."),
("success", "Task Succeeded"),
("info", "Process was cancelled.")
]

# Info: svg icon (pants.svg)
# success: svg icon (hotel.svg)
# warning: svg icon (diving-goggles.svg)
# error: svg icon (hat.svg)
page = """
<|{status}|status|use_icon[info]=https://www.svgrepo.com/show/530594/pants.svg|use_icon[success]=https://www.svgrepo.com/show/530595/hotel.svg|use_icon[warning]=https://www.svgrepo.com/show/530596/diving-goggles.svg|use_icon[error]=https://www.svgrepo.com/show/530597/hat.svg|>
"""

if __name__ == "__main__":
Gui(page).run(title="Status - With SVG icons")
2 changes: 1 addition & 1 deletion doc/gui/examples/controls/table_guard_edits.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def check_add(state: State, var_name: str, payload: dict):
def force_salary(state: State, var_name: str, payload: dict):
# Get the salary proposal from the callback's payload
proposed_salary = payload["value"]
# Round it the the nearest multiple of 5000
# Round it to the nearest multiple of 5000
proposed_salary = round(proposed_salary / 500) * 500
# Set it as the value to be stored in the dataset
payload["value"] = proposed_salary
Expand Down
10 changes: 10 additions & 0 deletions doc/gui/extension/example_library/example_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ def __init__(self) -> None:
# element, exported as GameTable in front-end/src/index.ts
# react_component="GameTable",
),
"visual_label_list": Element(
"lov",
{
"lov": ElementProperty(PropertyType.lov),
"sort": ElementProperty(PropertyType.string),
},
# The name of the React component (VisualLabelList) that implements this custom
# element, exported as LabeledItemList in front-end/src/index.ts
react_component="VisualLabelList",
)
}

# The implementation of the rendering for the "fraction" static element
Expand Down
Loading

0 comments on commit f55f699

Please sign in to comment.