added some logic on how to determine the skill name displayed in the ui

pull/56/head
Chris Veilleux 2019-02-26 09:37:56 -06:00
parent d19a1fcdf6
commit 638b74206d
4 changed files with 36 additions and 10 deletions

View File

@ -24,10 +24,11 @@ class SkillSettingsEndpoint(SeleneEndpoint):
def _build_response_data(self):
response_data = []
duplicates = self._check_for_skill_duplicates()
for skill in self.account_skills:
response_skill = dict(name=skill.skill_name)
display_name = self._determine_display_name(skill)
response_skill = dict(name=display_name)
if skill.settings_version is not None:
duplicates = self._check_for_skill_duplicates()
response_sections = self._build_sections(skill, duplicates)
response_skill.update(sections=response_sections)
response_data.append(response_skill)
@ -44,6 +45,17 @@ class SkillSettingsEndpoint(SeleneEndpoint):
return duplicate_skills
@staticmethod
def _determine_display_name(skill: AccountSkill):
if skill.display_name is not None:
display_name = skill.display_name
elif skill.settings_meta is not None:
display_name = skill.settings_meta['name']
else:
display_name = skill.skill_name
return display_name
def _build_sections(self, skill: AccountSkill, duplicates: set):
response_sections = []
if skill.skill_name in duplicates:

View File

@ -6,6 +6,7 @@ from typing import List
class AccountSkill(object):
skill_name: str
devices: List[str]
display_name: str = None
settings_version: str = None
settings_meta: dict = None
settings: dict = None

View File

@ -18,10 +18,11 @@ class AccountSkillRepository(RepositoryBase):
)
for key, devices in device_groupings.items():
settings_meta, settings = skill_settings_meta[key]
display_name, settings_meta, settings = skill_settings_meta[key]
account_skills.append(AccountSkill(
skill_name=key[0],
devices=devices,
display_name=display_name,
settings_version=key[1],
settings_meta=settings_meta,
settings=settings
@ -43,17 +44,15 @@ class AccountSkillRepository(RepositoryBase):
device_groupings = defaultdict(list)
skill_settings = {}
for device_skill in device_skills:
if device_skill['settings'] is None:
settings = None
settings_meta = None
else:
settings = device_skill['settings']
settings_meta = device_skill['settings_meta']
key = (
device_skill['skill_name'],
device_skill['version'],
)
device_groupings[key].append(device_skill['device_name'])
skill_settings[key] = settings_meta, settings
skill_settings[key] = [
device_skill['display_name'],
device_skill['settings_meta'],
device_skill['settings']
]
return skill_settings, device_groupings

View File

@ -1,6 +1,19 @@
-- get all combinations of skills and skill setting meta for an account
WITH
skill_meta AS (
SELECT
skill_id,
display_name,
max(branch)
FROM
skill.branch
GROUP BY
skill_id,
display_name
)
SELECT
s.name AS skill_name,
skm.display_name,
d.name as device_name,
sm.version,
sm.settings_meta,
@ -10,6 +23,7 @@ FROM
INNER JOIN device.device_skill ds on ds.skill_id = s.id
INNER JOIN device.device d ON d.id = ds.device_id
LEFT JOIN skill.setting_meta sm ON ds.skill_setting_meta_id = sm.id
LEFT JOIN skill_meta skm ON skm.skill_id = s.id
WHERE
d.account_id = %(account_id)s
ORDER BY