OpenSlides/openslides/users/projector.py

54 lines
1.4 KiB
Python
Raw Normal View History

from typing import Any, Dict, List
from ..utils.projector import (
AllData,
ProjectorElementException,
register_projector_slide,
)
2018-12-23 11:05:38 +01:00
# Important: All functions have to be prune. This means, that thay can only
# access the data, that they get as argument and do not have any
# side effects.
2019-01-06 16:22:33 +01:00
async def user_slide(
2019-02-21 14:40:07 +01:00
all_data: AllData, element: Dict[str, Any], projector_id: int
) -> Dict[str, Any]:
2018-12-23 11:05:38 +01:00
"""
User slide.
The returned dict can contain the following fields:
* user
2018-12-23 11:05:38 +01:00
"""
user_id = element.get("id")
if user_id is None:
2019-01-31 10:32:32 +01:00
raise ProjectorElementException("id is required for user slide")
2019-05-04 08:35:54 +02:00
return {"user": await get_user_name(all_data, user_id)}
async def get_user_name(all_data: AllData, user_id: int) -> str:
"""
Returns the short name for an user_id.
"""
2019-02-15 12:17:08 +01:00
try:
user = all_data["users/user"][user_id]
except KeyError:
raise ProjectorElementException(f"user with id {user_id} does not exist")
name_parts: List[str] = []
for name_part in ("title", "first_name", "last_name"):
if user[name_part]:
name_parts.append(user[name_part])
if not name_part:
name_parts.append(user["username"])
if user["structure_level"]:
name_parts.append(f"({user['structure_level']})")
return " ".join(name_parts)
def register_projector_slides() -> None:
register_projector_slide("users/user", user_slide)