Skip to content

Commit

Permalink
Overwrite role name w/hybrid property
Browse files Browse the repository at this point in the history
  • Loading branch information
jdavcs committed Oct 25, 2024
1 parent 5153bec commit bedbc04
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
17 changes: 16 additions & 1 deletion lib/galaxy/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
association_proxy,
AssociationProxy,
)
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy.orm import (
aliased,
Expand Down Expand Up @@ -155,6 +156,7 @@
UUIDType,
)
from galaxy.model.database_object_names import NAMING_CONVENTION
from galaxy.model.db.user import get_user_for_private_role
from galaxy.model.item_attrs import (
get_item_annotation_str,
UsesAnnotations,
Expand Down Expand Up @@ -3747,7 +3749,7 @@ class Role(Base, Dictifiable, RepresentById):
id: Mapped[int] = mapped_column(primary_key=True)
create_time: Mapped[datetime] = mapped_column(default=now, nullable=True)
update_time: Mapped[datetime] = mapped_column(default=now, onupdate=now, nullable=True)
name: Mapped[str] = mapped_column(String(255), index=True)
_name: Mapped[str] = mapped_column("name", String(255), index=True)
description: Mapped[Optional[str]] = mapped_column(TEXT)
type: Mapped[Optional[str]] = mapped_column(String(40), index=True)
deleted: Mapped[Optional[bool]] = mapped_column(index=True, default=False)
Expand All @@ -3766,6 +3768,19 @@ class types(str, Enum):
ADMIN = "admin"
SHARING = "sharing"

@hybrid_property
def name(self):
if self.type == Role.types.PRIVATE:
session = object_session(self)
user = get_user_for_private_role(session, self)
return f"private role for {user.email}"
else:
return self._name

@name.setter
def name(self, name):
self._name = name

@staticmethod
def default_name(role_type):
return f"{role_type.value} role"
Expand Down
17 changes: 17 additions & 0 deletions test/unit/data/model/db/test_role.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,23 @@
from . import have_same_elements


def test_role_name_property(session, make_role, make_user_and_role):
r1 = make_role(name="foo")
u, r2 = make_user_and_role(email="joe@bar.com")

# Verify private role name references user
assert r1.name == "foo"
assert r2.name == "private role for joe@bar.com"

# Update user's email
u.email = "updated@bar.com"
session.add(u)
session.commit()

# Verify private role name references updated user's email
assert r2.name == "private role for updated@bar.com"


def test_get_npns_roles(session, make_role):
make_role(deleted=True)
make_role(type=Role.types.PRIVATE)
Expand Down

0 comments on commit bedbc04

Please sign in to comment.