Sluggard/sluggard/user.py
2024-10-24 16:35:22 +02:00

292 lines
14 KiB
Python

from .group import Group
from .dashboard import Dashboard
from .assignments import Assignment
from .badges import Badge
from .portfolio import Portfolio, Banner, Unsplash
from .exceptions import sluggardException
from .test import TestObj
class User:
def __init__(
self,
user_id: str = None,
username: str = None,
primary_role: str = None,
name: str = None,
email: str = None,
firstname: str = None,
lastname: str = None,
avatar: str = None,
about: str = None,
label: str = None,
permalink: str = None,
render_label: str = None,
canBeImposter: str = None,
groups: list[Group] = None,
dashboards: list[Dashboard] = None,
portfolios: list[Portfolio] = None,
unsplashs: list[Unsplash] = None,
assignments: list[Assignment] = None,
badges: list[Badge] = None,
**kwargs
) -> None:
self.user_id = user_id
self.username = username
self.primary_role = primary_role
self.groups = groups
self.dashboards = dashboards
self.portfolios = portfolios
self.unsplashs = unsplashs
self.assignments = assignments
self.badges = badges
self.avatar = avatar
self.name = name
self.about = about
self.render_label = render_label
self.canBeImposter = canBeImposter
self.__dict__.update(kwargs)
def __str__(self):
return f"User({self.user_id}, {self.username}, {self.primary_role}, {self.avatar})"
@classmethod
def discover_from_dict(cls, raw: dict):
user_info = raw["data"]["user"]
groups = [
Group(
group_id=group.get("id"),
name=group.get("name"),
typename=group.get("__typename"),
icon=group.get("icon"),
path=group.get("path"),
link=group.get("permalink")
)
for group in user_info.get("groupsActive", [])
]
dashboards = [
Dashboard(
dashboard_id=dashboard["id"],
key=dashboard["key"],
title=dashboard["title"],
isHidden=dashboard["isHidden"],
canBeHidden=dashboard["canBeHidden"]
)
for dashboard in user_info.get("dashboardTiles", [])
]
return cls(
user_id=user_info.get("id"),
username=user_info.get("username"),
avatar=user_info.get("avatar"),
primary_role=user_info.get("primaryRole"),
groups=groups,
dashboards=dashboards
)
@classmethod
def info_from_dict(cls, raw: dict):
return cls(
user_id=raw.get('id', ''),
avatar=raw.get('avatar', ''),
name=raw.get('name', ''),
about=raw.get('about', ''),
username=raw.get('username', ''),
primary_role=raw.get('primary_role', ''),
render_label=raw.get('render_label', ''),
canBeImposter=raw.get('canBeImposter', '')
)
@classmethod
def banner_from_dict(cls, raw: dict):
portfolios = [
Portfolio(
banner_url=raw['banner_url'],
static_banners=raw['static_banners']
)
]
return cls(
user_id=raw['user_id'],portfolios=portfolios
)
@classmethod
def unsplash_from_dict(cls, raw: dict):
unsplash_info = raw['unsplash_data']
unsplashs = [Unsplash(
unsplash_id=unsplash['picture_id'],
title=unsplash['picture_title'],
preview=unsplash['picture_preview'],
perma_link=unsplash['picture_permalink'],
date=unsplash['picture_date'],
aspect_ratio=unsplash['picture_aspectRatio'],
description=unsplash['picture_description'],
download_link=unsplash['picture_downloadLink'],
unsplash_userid=unsplash['unsplash_userId'],
unsplash_name=unsplash['unsplash_name'],
unsplash_permalink=unsplash['unsplash_permalink']
)for unsplash in unsplash_info]
return cls(unsplashs=unsplashs)
@classmethod
def assignments_from_dict(cls, raw: dict):
data = raw['data']['viewer']
assignment_assigned = data.get('assignmentAssigned', {})
assignment_data = assignment_assigned.get('assignment', {})
reviewer_data = assignment_assigned.get('reviewers', {})
approver_data = assignment_assigned.get('approver', {})
badges_data = assignment_data.get('badges', {})
blocks_data = [badges.get('blocks', {}) for badges in badges_data]
weights_data = [badge.get('weights', {}) for badge in badges_data]
criteria_data = [badge.get('criteria', {}) for badge in badges_data]
covers_data = assignment_data.get('cover', {})
assignemnt_blocks_data = assignment_data.get('blocks', {})
tags_data = assignment_data.get('tags', {})
resources_data = assignment_data.get('resources', {})
deliverable_data = assignment_data.get('deliverables', {})
status_data = assignment_assigned.get('statusMessage')
assignments = [
Assignment(
assignedassignment_id=assignment_assigned.get('id'),
state=assignment_assigned.get('state'),
is_late=assignment_assigned.get('isLate'),
is_past=assignment_assigned.get('isPast'),
end_date=assignment_assigned.get('endDate'),
is_process=assignment_assigned.get('inProcess'),
startable=assignment_assigned.get('startable'),
is_approved=assignment_assigned.get('isApproved'),
is_archived=assignment_assigned.get('isArchived'),
can_reflect=assignment_assigned.get('canReflect'),
can_withdraw=assignment_assigned.get('canWithdraw'),
soft_end_date=assignment_assigned.get('endDateIsSoft'),
connectable_key=assignment_assigned.get('connectableKey'),
end_date_formatted=assignment_assigned.get('endDateFormatted'),
feedback_can_answer=assignment_assigned.get('canAnswerFeedback'),
approved_at_formatted=assignment_assigned.get('approvedAtFormatted'),
delivered_at_formatted=assignment_assigned.get('deliveredAtFormatted'),
optional_reflection=assignment_assigned.get('reflectionIsOptional'),
optional_uncompleted_reflection=assignment_assigned.get('reflectionIsOptionalAndUncompleted'),
used_feedback=assignment_assigned.get('feedbackUsed'),
question_left_feedback=assignment_assigned.get('hasFeedbackQuestionsLeft'),
approver_id = approver_data.get('id') if approver_data else None,
approver_name = approver_data.get('name') if approver_data else None,
approver_avatar = approver_data.get('avatar') if approver_data else None,
approver_username = approver_data.get('username') if approver_data else None,
approver_permalink = approver_data.get('permalink') if approver_data else None,
assignment_id=assignment_data.get('id'),
icon=assignment_data.get('icon'),
title=assignment_data.get('title'),
is_deleted=assignment_data.get('isDeleted'),
badges_count=assignment_data.get('badgesCount'),
feedback_count=assignment_data.get('feedbackCount'),
cover_id= covers_data.get('id'),
cover_url= covers_data.get('url'),
actual_deliverables_count=assignment_data.get('actualDeliverablesCount'),
badges_id=[badges.get('id') for badges in badges_data],
badges_name=[badges.get('name') for badges in badges_data],
badges_type=[badges.get('type') for badges in badges_data],
badges_level=[badges.get('levels') for badges in badges_data],
badges_is_optional=[badges.get('isOptional') for badges in badges_data],
badges_description=[badges.get('description') for badges in badges_data],
badges_blocks_id = [block[0].get('id') for block in blocks_data],
badges_blocks_type= [block[0].get('type') for block in blocks_data],
badges_blocks_content= [block[0].get('content') for block in blocks_data],
weights_color = [weight.get('color') for weight_list in weights_data for weight in weight_list],
weights_title = [weight.get('title') for weight_list in weights_data for weight in weight_list],
weights_level = [weight.get('level') for weight_list in weights_data for weight in weight_list],
weights_image = [weight.get('image') for weight_list in weights_data for weight in weight_list],
criteria_id= [criteria.get('id') for criteria_list in criteria_data for criteria in criteria_list],
criteria_name= [criteria.get('name') for criteria_list in criteria_data for criteria in criteria_list],
criteria_order= [criteria.get('order') for criteria_list in criteria_data for criteria in criteria_list],
criteria_formatted_content = [text.get('formattedContent') for criteria_list in criteria_data for text in criteria_list[0].get('texts', []) if text.get('formattedContent')],
criteria_level= [text.get('level') for criteria_list in criteria_data for text in criteria_list[0].get('texts', []) if text.get('level')],
criteria_weight = [criteria.get('weight') for criteria_list in criteria_data for criteria in criteria_list],
tags_id = [tag['id'] for tag in tags_data],
tags_name= [tag['name'] for tag in tags_data],
blocks_id= [block['id'] for block in assignemnt_blocks_data],
blocks_type= [block['type'] for block in assignemnt_blocks_data],
blocks_title= [block['title'] for block in assignemnt_blocks_data],
blocks_content= [block['content'] for block in assignemnt_blocks_data],
blocks_is_presentable= [block['isPresentable'] for block in assignemnt_blocks_data],
resources_id= [resource.get('id') for resource in resources_data],
resources_url= [TestObj.get('url') for TestObj in resources_data],
resources_title= [resource.get('title') for resource in resources_data],
deliverable_id= [deliverable.get('id') for deliverable in deliverable_data],
deliverable_type= [deliverable.get('type') for deliverable in deliverable_data],
deliverable_title= [deliverable.get('title') for deliverable in deliverable_data],
deliverable_minimum= [deliverable.get('minimum') for deliverable in deliverable_data],
deliverable_multiple= [deliverable.get('multiple') for deliverable in deliverable_data],
deliverable_is_optional= [deliverable.get('isOptional') for deliverable in deliverable_data],
deliverable_description= [deliverable.get('description') for deliverable in deliverable_data],
deliverable_requirements= [deliverable.get('requirements') for deliverable in deliverable_data],
deliverable_post_min_words= [deliverable.get('postMinWords') for deliverable in deliverable_data],
deliverable_post_max_words= [deliverable.get('postMaxWords') for deliverable in deliverable_data],
statusmessage_text= status_data.get('text'),
statusmessage_color= status_data.get('color'),
reviewer_name=[reviewer.get('name') for reviewer in reviewer_data],
reviewer_id=[reviewer.get('id') for reviewer in reviewer_data],
reviewer_avatar=[reviewer.get('avatar') for reviewer in reviewer_data],
reviewer_username=[reviewer.get('username') for reviewer in reviewer_data],
reviewer_permalink=[reviewer.get('permalink') for reviewer in reviewer_data]
)
]
return cls(
user_id=assignment_assigned['user']['id'],
name=assignment_assigned['user']['name'],
username=assignment_assigned['user']['username'],
avatar=assignment_assigned['user']['avatar'],
permalink=assignment_assigned['user']['permalink'],
assignments=assignments)
@classmethod
def portfolio_from_dict(cls, raw: dict):
portfolio_info = raw['data']['dashboard']['portfolioItems']['data']
portfolios = [
Portfolio(
portfolio_id=portfolio['id'],
icon=portfolio['icon'],
title=portfolio['title'],
link=portfolio['permalink'],
creation_date=portfolio['createdAt'],
author_id= portfolio['author']['id'],
author_name= portfolio['author']['name']
)
for portfolio in portfolio_info
]
return cls(portfolios=portfolios)
@classmethod
def badges_from_dict(cls, raw: dict):
badges_info = raw['data']['badgesReport']['badges']['data']
badges = [
Badge(
badges_id=badge['id'],
image=badge['image'],
weight=badge['weight'],
badge_id=badge['badge']['id'],
name=badge['badge']['name'],
levels=badge['badge']['levels'],
created_at=badge['createdAt'],
assignment_id=badge['userAssignment']['assignment']['id'],
assignment_title=badge['userAssignment']['assignment']['title'],
assignment_permalink=badge['userAssignment']['permalink']
)for badge in badges_info
]
return cls(
user_id=raw['data']['badgesReport']['id'],
name=raw['data']['badgesReport']['name'],
about=raw['data']['badgesReport']['about'],
avatar=raw['data']['badgesReport']['avatar'],
username=raw['data']['badgesReport']['permalink'],
primary_role=raw['data']['badgesReport']['primaryRole'],
badges=badges
)