refactored to only return those values needed by the UI

pull/9/head
Chris Veilleux 2018-10-22 13:05:41 -05:00
parent a53f34506b
commit 711ef460f9
1 changed files with 26 additions and 42 deletions

View File

@ -4,12 +4,8 @@ from http import HTTPStatus
from markdown import markdown
import requests as service_request
from .common import (
aggregate_manifest_skills,
call_skill_manifest_endpoint,
parse_skill_manifest_response
)
from selene_util.api import APIError, SeleneEndpoint
from .common import RepositorySkill
class SkillDetailEndpoint(SeleneEndpoint):
@ -18,66 +14,54 @@ class SkillDetailEndpoint(SeleneEndpoint):
def __init__(self):
super(SkillDetailEndpoint, self).__init__()
self.skill_id = None
self.skill_name = None
self.response_skill = None
self.manifest_skills = []
def get(self, skill_id):
def get(self, skill_name):
"""Process an HTTP GET request"""
self.skill_id = skill_id
self.skill_name = skill_name
try:
self._authenticate()
self._get_skill_details()
self._get_skill_manifests()
repository_skill = self._get_skill_details()
except APIError:
pass
else:
self._build_response_data()
self._build_response_data(repository_skill)
self.response = (self.response_skill, HTTPStatus.OK)
return self.response
def _get_skill_details(self):
def _get_skill_details(self) -> RepositorySkill:
"""Build the data to include in the response."""
skill_service_response = service_request.get(
self.config['SELENE_BASE_URL'] + '/skill/id/' + self.skill_id
self.config['SELENE_BASE_URL'] + '/skill/name/' + self.skill_name
)
self._check_for_service_errors(skill_service_response)
self.response_skill = skill_service_response.json()
def _get_skill_manifests(self):
service_response = call_skill_manifest_endpoint(
self.tartarus_token,
self.config['TARTARUS_BASE_URL'],
self.user_uuid
)
if service_response.status_code != HTTPStatus.OK:
self._check_for_service_errors(service_response)
skills_in_manifest = parse_skill_manifest_response(
service_response
)
self.manifest_skills = skills_in_manifest[
self.response_skill['skill_name']
]
service_response = skill_service_response.json()
repository_skill = RepositorySkill(**service_response)
def _build_response_data(self):
return repository_skill
def _build_response_data(self, repository_skill: RepositorySkill):
"""Make some modifications to the response skill for the marketplace"""
aggregated_manifest_skill = aggregate_manifest_skills(
self.manifest_skills
)
self.response_skill.update(
self.response_skill = dict(
categories=repository_skill.categories,
credits=repository_skill.credits,
description=markdown(
self.response_skill['description'],
repository_skill.description,
output_format='html5'
),
icon=repository_skill.icon,
iconImage=repository_skill.icon_image,
isSystemSkill=repository_skill.is_system_skill,
name=repository_skill.skill_name,
platforms=repository_skill.platforms,
repositoryUrl=repository_skill.repository_url,
summary=markdown(
self.response_skill['summary'],
repository_skill.summary,
output_format='html5'
),
installStatus=aggregated_manifest_skill.installation,
repositoryUrl=self.response_skill['repository_url'],
iconImage=self.response_skill['icon_image']
title=repository_skill.title,
triggers=repository_skill.triggers
)
del(self.response_skill['repository_url'])
del(self.response_skill['icon_image'])