[Feature] Leftovers after Release (#303)

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#303
This commit is contained in:
2026-01-22 10:26:38 +13:00
parent f905bf21cf
commit ab0b5a5186
16 changed files with 465 additions and 11 deletions

View File

@ -18,6 +18,8 @@ from .models import (
Edge,
EnviFormer,
EPModel,
Group,
GroupPackagePermission,
MLRelativeReasoning,
Node,
PackageBasedModel,
@ -204,6 +206,82 @@ def get_user(request, user_uuid):
}
########
# Group #
########
class GroupMember(Schema):
id: str = Field(None, alias="url")
identifier: str
name: str
class GroupWrapper(Schema):
group: List[SimpleGroup]
class GroupSchema(Schema):
description: str
id: str = Field(None, alias="url")
identifier: str = "group"
members: List[GroupMember] = Field([], alias="members")
name: str = Field(None, alias="name")
ownerid: str = Field(None, alias="owner.url")
ownername: str = Field(None, alias="owner.name")
packages: List["SimplePackage"] = Field([], alias="packages")
readers: List[GroupMember] = Field([], alias="readers")
writers: List[GroupMember] = Field([], alias="writers")
@staticmethod
def resolve_members(obj: Group):
res = []
for member in obj.user_member.all():
res.append(GroupMember(id=member.url, identifier="usermember", name=member.username))
for member in obj.group_member.all():
res.append(GroupMember(id=member.url, identifier="groupmember", name=member.name))
return res
@staticmethod
def resolve_packages(obj: Group):
return Package.objects.filter(
id__in=[
GroupPackagePermission.objects.filter(group=obj).values_list(
"package_id", flat=True
)
]
)
@staticmethod
def resolve_readers(obj: Group):
return GroupSchema.resolve_members(obj)
@staticmethod
def resolve_writers(obj: Group):
return [GroupMember(id=obj.owner.url, identifier="usermember", name=obj.owner.username)]
@router.get("/group", response={200: GroupWrapper, 403: Error})
def get_groups(request):
return {"group": GroupManager.get_groups(request.user)}
@router.get("/group/{uuid:group_uuid}", response={200: GroupSchema, 403: Error})
def get_group(request, group_uuid):
try:
g = GroupManager.get_group_by_id(request.user, group_uuid)
return g
except ValueError:
return 403, {
"message": f"Getting Group with id {group_uuid} failed due to insufficient rights!"
}
##########
# Search #
##########
class Search(Schema):
packages: List[str] = Field(alias="packages[]")
search: str