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

Extension library elements access through the Page Builder API #2447

Merged
merged 2 commits into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 11 additions & 10 deletions taipy/gui/builder/_api_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,32 +82,33 @@ def add_default(self):
),
)

def add_library(self, library: "ElementLibrary"):
def add_library(self, library: "ElementLibrary") -> None:
library_name = library.get_name()
if self.__module is None:
_TaipyLogger._get_logger().info(
f"Python API for extension library '{library_name}' is not available. To fix this, import 'taipy.gui.builder' before importing the extension library." # noqa: E501
)
return
library_module = sys.modules[library.__module__]
if not library_module.__package__:
_TaipyLogger._get_logger().info(f"Cannot locate package for extension library `{library_name}`.")
return
package_module = sys.modules[library_module.__package__]
for element_name, element in library.get_elements().items():
setattr(
library_module,
element_api = _ElementApiGenerator().create_control_api(
element_name,
_ElementApiGenerator().create_control_api(
element_name,
f"{library_name}.{element_name}",
element.default_attribute,
{name: str(prop.property_type) for name, prop in element.attributes.items()},
),
f"{library_name}.{element_name}",
element.default_attribute,
{name: str(prop.property_type) for name, prop in element.attributes.items()},
)
setattr(package_module, element_name, element_api)
# Allow element to be accessed from this module (taipy.gui.builder)
if hasattr(self.__module, element_name):
_TaipyLogger._get_logger().info(
f"Can't add element `{element_name}` of library `{library_name}` to the root of Builder API as another element with the same name already exists." # noqa: E501
)
else:
setattr(self.__module, element_name, getattr(library_module, element_name))
setattr(self.__module, element_name, element_api)

@staticmethod
def create_block_api(
Expand Down
8 changes: 4 additions & 4 deletions taipy/gui/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -977,7 +977,7 @@ def __serve_extension(self, path: str) -> t.Any:
return ("", 404)

def __get_version(self) -> str:
return f'{self.__version.get("major", 0)}.{self.__version.get("minor", 0)}.{self.__version.get("patch", 0)}'
return f"{self.__version.get('major', 0)}.{self.__version.get('minor', 0)}.{self.__version.get('patch', 0)}"

def __append_libraries_to_status(self, status: t.Dict[str, t.Any]):
libraries: t.Dict[str, t.Any] = {}
Expand Down Expand Up @@ -1009,7 +1009,7 @@ def _serve_status(self, template: Path) -> t.Dict[str, t.Dict[str, str]]:
{
"flask_version": str(metadata.version("flask") or ""),
"backend_version": self.__get_version(),
"host": f'{self._get_config("host", "localhost")}:{self._get_config("port", "default")}',
"host": f"{self._get_config('host', 'localhost')}:{self._get_config('port', 'default')}",
"python_version": sys.version,
}
)
Expand Down Expand Up @@ -2116,7 +2116,7 @@ def add_page(
page = Markdown(page, frame=None)
elif not isinstance(page, Page): # pragma: no cover
raise Exception(
f'Parameter "page" is invalid for page name "{name if name != Gui.__root_page_name else "/"}.'
f'Parameter "page" is invalid for page name "{name if name != Gui.__root_page_name else "/"}".'
)
# Init a new page
new_page = _Page()
Expand Down Expand Up @@ -2724,7 +2724,7 @@ def __get_css_vars(self) -> str:
css_vars = []
if stylekit := self._get_config("stylekit", _default_stylekit):
for k, v in stylekit.items():
css_vars.append(f'--{k.replace("_", "-")}:{_get_css_var_value(v)};')
css_vars.append(f"--{k.replace('_', '-')}:{_get_css_var_value(v)};")
return " ".join(css_vars)

def __init_server(self):
Expand Down
Loading