Skip to content
Snippets Groups Projects
Commit d906389e authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch...

Merge branch '37-attributeerror-anonymoususer-object-has-no-attribute-bbb_get_attendee' into 'master'

Resolve "AttributeError: 'AnonymousUser' object has no attribute 'bbb_get_attendee'"

Closes #37

See merge request infrablue/python-bigbluebutton2!29
parents c480990e f9115d17
No related branches found
No related tags found
No related merge requests found
...@@ -13,6 +13,8 @@ class BigbluebuttonConfig(AppConfig): ...@@ -13,6 +13,8 @@ class BigbluebuttonConfig(AppConfig):
def ready(self): def ready(self):
"""Extend the User model with attribute shortcuts.""" """Extend the User model with attribute shortcuts."""
from django.contrib.auth.models import AnonymousUser # noqa
User = get_user_model() User = get_user_model()
User.add_to_class("bbb_attendees", property(util.get_user_attendees)) User.add_to_class("bbb_attendees", property(util.get_user_attendees))
...@@ -20,3 +22,9 @@ class BigbluebuttonConfig(AppConfig): ...@@ -20,3 +22,9 @@ class BigbluebuttonConfig(AppConfig):
User.add_to_class("bbb_display_name", property(settings.DISPLAY_NAME_CALLBACK)) User.add_to_class("bbb_display_name", property(settings.DISPLAY_NAME_CALLBACK))
User.add_to_class("bbb_get_attendee", settings.ATTENDEE_CALLBACK) User.add_to_class("bbb_get_attendee", settings.ATTENDEE_CALLBACK)
User.add_to_class("bbb_get_role", settings.ROLE_CALLBACK) User.add_to_class("bbb_get_role", settings.ROLE_CALLBACK)
setattr(AnonymousUser, "bbb_attendees", property(util.get_user_attendees))
setattr(AnonymousUser, "bbb_user_id", property(settings.USER_ID_CALLBACK))
setattr(AnonymousUser, "bbb_display_name", property(settings.DISPLAY_NAME_CALLBACK))
setattr(AnonymousUser, "bbb_get_attendee", settings.ATTENDEE_CALLBACK)
setattr(AnonymousUser, "bbb_get_role", settings.ROLE_CALLBACK)
from typing import TYPE_CHECKING, List import uuid
from typing import TYPE_CHECKING, List, Union
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.utils.translation import gettext as _
from ..api.attendee import Attendee, Role from ..api.attendee import Attendee, Role
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from django.contrib.auth.models import AnonymousUser
from .models import Meeting from .models import Meeting
User = get_user_model() User = get_user_model()
def get_user_id(user: "User") -> str: def get_user_id(user: Union["AnonymousUser", "User"]) -> str:
"""Get a unique ID for a Django user. """Get a unique ID for a Django user.
If the User object has a guid attribute, this is used by default. If not, If the User object has a guid attribute, this is used by default. If not,
...@@ -18,10 +22,14 @@ def get_user_id(user: "User") -> str: ...@@ -18,10 +22,14 @@ def get_user_id(user: "User") -> str:
It can be overridden with the `BBB_USER_ID_CALLBACK` setting. It can be overridden with the `BBB_USER_ID_CALLBACK` setting.
""" """
return str(getattr(user, "guid", user.pk))
if user.is_anonymous:
return str(uuid.uuid1())
else:
return str(getattr(user, "guid", user.pk))
def get_display_name(user: "User") -> str: def get_display_name(user: Union["AnonymousUser", "User"]) -> str:
"""Get a display namefor a Django user. """Get a display namefor a Django user.
Defaults to the full name of the user object or, if it is empty, its Defaults to the full name of the user object or, if it is empty, its
...@@ -29,7 +37,11 @@ def get_display_name(user: "User") -> str: ...@@ -29,7 +37,11 @@ def get_display_name(user: "User") -> str:
It can be overridden with the `BBB_DISPLAY_NAME_CALLBACK` setting. It can be overridden with the `BBB_DISPLAY_NAME_CALLBACK` setting.
""" """
return user.get_full_name().strip() or user.username
if user.is_anonymous:
return _("Anonymous User")
else:
return user.get_full_name().strip() or user.username
def get_meeting_id(meeting: "Meeting") -> str: def get_meeting_id(meeting: "Meeting") -> str:
...@@ -42,7 +54,7 @@ def get_meeting_id(meeting: "Meeting") -> str: ...@@ -42,7 +54,7 @@ def get_meeting_id(meeting: "Meeting") -> str:
return str(meeting.guid) return str(meeting.guid)
def get_attendee(user: "User", meeting: "Meeting") -> Attendee: def get_attendee(user: Union["AnonymousUser", "User"], meeting: "Meeting") -> Attendee:
"""Generate an Attendee object for a meeting and user. """Generate an Attendee object for a meeting and user.
If the user's ID is already a known attendee on the meeting by the information If the user's ID is already a known attendee on the meeting by the information
...@@ -65,7 +77,7 @@ def get_attendee(user: "User", meeting: "Meeting") -> Attendee: ...@@ -65,7 +77,7 @@ def get_attendee(user: "User", meeting: "Meeting") -> Attendee:
return attendee return attendee
def get_role(user: "User", meeting: "Meeting") -> Role: def get_role(user: Union["AnonymousUser", "User"], meeting: "Meeting") -> Role:
"""Determine the role of a user for a meeting. """Determine the role of a user for a meeting.
By default, staff members and superusers become moderators, all other users By default, staff members and superusers become moderators, all other users
...@@ -80,7 +92,7 @@ def get_role(user: "User", meeting: "Meeting") -> Role: ...@@ -80,7 +92,7 @@ def get_role(user: "User", meeting: "Meeting") -> Role:
return Role.VIEWER return Role.VIEWER
def get_user_attendees(user: "User") -> List[Attendee]: def get_user_attendees(user: Union["AnonymousUser", "User"]) -> List[Attendee]:
from .models import BigBlueButtonGroup # noqa from .models import BigBlueButtonGroup # noqa
attendees = [] attendees = []
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment