292 lines
14 KiB
Python
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
|
|
)
|