Source code for pykechain.models.sidebar.sidebar_card
from typing import Dict, Optional
from pykechain.enums import (
Alignment,
SidebarAccessLevelOptions,
SidebarItemAlignment,
SidebarType,
URITarget,
)
from pykechain.exceptions import IllegalArgumentError
from pykechain.models.sidebar.sidebar_base import SideBarItem
[docs]
class SideBarCard(SideBarItem):
"""
Side-bar card class.
Every side-bar can have one or more cards and is maintained as an object of this class.
:cvar allowed_attributes: allowed additional attributed provided as options alongside
the specifically allowed ones.
:cvar item_type: the item type of this class. Defaults to a BUTTON.
"""
_allowed_attributes = [
"displayText_nl",
"displayText_en",
"displayText_de",
"displayText_fr",
"displayText_it",
"actionButtonName_nl",
"actionButtonName_en",
"actionButtonName_de",
"actionButtonName_fr",
"actionButtonName_it",
]
_item_type = SidebarType.CARD
def __init__(
self,
side_bar_manager: "SideBarManager",
json: Optional[Dict] = None,
alignment: SidebarItemAlignment = SidebarItemAlignment.TOP,
minimum_access_level: SidebarAccessLevelOptions = SidebarAccessLevelOptions.IS_MEMBER,
maximum_access_level: SidebarAccessLevelOptions = SidebarAccessLevelOptions.IS_MANAGER,
display_text: str = None,
show_close_action: bool = True,
show_background: bool = True,
show_action_button: bool = False,
action_button_name: Optional[str] = None,
action_button_uri: Optional[str] = None,
action_button_uri_target: Optional[str] = None,
display_text_align: Optional[Alignment] = Alignment.CENTER,
**kwargs: dict,
) -> None:
"""
Create a side-bar card.
:param side_bar_manager: Manager object to which the button is linked.
:param json: the json response to construct the :class:`SideBarButton` from
:param title: visible label of the button
:param icon: FontAwesome icon of the button
:param uri: Uniform Resource Identifier, the address of the linked page
:param uri_target: type of URI, either internal or external
:param alignment: alignment of the button top or bottom
:param minimum_access_level: the minimum permission needed to see the button
:param maximum_access_level: the maximum permission needed to see the button
:param icon_mode: FontAwesome display mode of the icon
:returns None
:raises IllegalArgumentError: When the provided Argument is not according to the type.
"""
super().__init__()
if json is None:
json = {}
self._manager: "SideBarManager" = side_bar_manager
self.align = json.get("align", alignment)
self.minimum_access_level = json.get("minimumAccessLevel", minimum_access_level)
self.maximum_access_level = json.get("maximumAccessLevel", maximum_access_level)
self.display_text = json.get("displayText", display_text)
self.display_text_align = json.get("displayTextAlign", display_text_align)
self.show_close_action = json.get("showCloseaction", show_close_action)
self.show_background = json.get("showBackground", show_background)
self.show_action_button = json.get("showActionButton", show_action_button)
self.action_button_name = json.get("actionButtonName", action_button_name)
self.action_button_uri = json.get("actionButtonUri", action_button_uri)
self.action_button_uri_target = json.get(
"actionButtonUriTarget", action_button_uri_target
)
if (
self.action_button_uri_target is not None
and self.action_button_uri_target not in URITarget.values()
):
raise IllegalArgumentError(
f'uri_target must be a URITarget option, "{self.action_button_uri_target}" is not.'
)
if self.align not in SidebarItemAlignment.values():
raise IllegalArgumentError(
f"alignment must be a proper `SidebarButtonAlgment` type, '{self.align} is not.'"
)
for key in kwargs.keys():
if key not in self._allowed_attributes:
raise IllegalArgumentError(
f'Attribute "{key}" is not supported in the configuration of a side-bar'
" card."
)
self._other_attributes = kwargs
for key in self._allowed_attributes:
if key in json:
self._other_attributes[key] = json[key]
[docs]
def as_dict(self) -> Dict:
"""
Retrieve the configuration data, or `meta`, of the side-bar button.
:return: dictionary of the configuration data
Example
-------
```{
"itemType": "CARD",
"order": 5,
"align": "top",
"showCloseAction": true,
"showActionButton": true,
"actionButtonUri": "https://asdasdas",
"actionButtonUriTarget": "_new",
"actionButtonName": "Discover more",
"displayText": "This project ...",
"displayText_nl": "Dit project ...",
"displayTextAlign": "left",
"showBackground": true,
"minimumAccessLevel": "is_member",
"maximumAccessLevel": "is_supervisor",
}```
"""
config = {
"itemType": self._item_type,
"displayText": self.display_text,
"displayTextAlign": self.display_text_align,
"align": self.align,
"minimumAccessLevel": self.minimum_access_level,
"maximumAccessLevel": self.maximum_access_level,
"showBackground": self.show_background,
"showCloseAction": self.show_close_action,
"showActionButton": self.show_action_button,
"actionButtonName": self.action_button_name,
"actionButtonUri": self.action_button_uri,
"actionButtonUriTarget": self.action_button_uri_target,
}
config.update(self._other_attributes)
config = {k: v for k, v in config.items() if v is not None}
return config