forked from enviPath/enviPy
[Feature] Leftovers after Release (#303)
Co-authored-by: Tim Lorsbach <tim@lorsba.ch> Reviewed-on: enviPath/enviPy#303
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user