updated skill repository to use new schema with global ID

pull/89/head
Chris Veilleux 2019-03-28 14:11:17 -05:00
parent 143c14159d
commit d943fe29b3
5 changed files with 35 additions and 12 deletions

View File

@ -1,2 +1,4 @@
from .entity.display import SkillDisplay
from .repository.display import SkillDisplayRepository
from .repository.setting import SkillSettingRepository from .repository.setting import SkillSettingRepository
from .repository.skill import SkillRepository from .repository.skill import SkillRepository

View File

@ -1,4 +1,5 @@
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime
from typing import List from typing import List
@ -38,7 +39,7 @@ class SkillVersion(object):
@dataclass @dataclass
class Skill(object): class Skill(object):
global_id: str
name: str name: str
url: str has_settings: bool = None
has_settings: bool
id: str = None id: str = None

View File

@ -90,7 +90,7 @@ class SkillRepository(RepositoryBase):
@use_transaction @use_transaction
def add(self, device_id: str, skill: dict) -> str: def add(self, device_id: str, skill: dict) -> str:
skill_id = self._add_skill(skill['name']) skill_id = self._add_skill(skill['global_id'], skill['name'])
settings_value, settings_display = self._extract_settings(skill) settings_value, settings_display = self._extract_settings(skill)
settings_display = json.dumps(skill) settings_display = json.dumps(skill)
skill_settings_display_id = SettingsDisplayRepository(self.db).add(skill_id, settings_display) skill_settings_display_id = SettingsDisplayRepository(self.db).add(skill_id, settings_display)
@ -98,13 +98,14 @@ class SkillRepository(RepositoryBase):
DeviceSkillRepository(self.db).add(device_id, skill_id, skill_settings_display_id, settings_value) DeviceSkillRepository(self.db).add(device_id, skill_id, skill_settings_display_id, settings_value)
return skill_id return skill_id
def _add_skill(self, skill_name) -> str: def _add_skill(self, global_id: str, name: str) -> str:
db_request = self._build_db_request( db_request = self._build_db_request(
'add_skill.sql', sql_file_name='add_skill.sql',
args=dict(skill_name=skill_name) args=dict(global_id=global_id, skill_name=name)
) )
result = self.cursor.insert_returning(db_request) db_result = self.cursor.insert_returning(db_request)
return result['id']
return db_result['id']
@staticmethod @staticmethod
def _extract_settings(skill): def _extract_settings(skill):
@ -142,3 +143,22 @@ class SkillRepository(RepositoryBase):
args=dict(device_id=device_id) args=dict(device_id=device_id)
) )
return self.cursor.select_all(db_request) return self.cursor.select_all(db_request)
def get_installer_skill(self):
return self._select_one_into_dataclass(
dataclass=Skill,
sql_file_name='get_installer_skill_settings.sql'
)
def ensure_skill_exists(self, global_id: str, name: str) -> str:
skill = self._select_one_into_dataclass(
dataclass=Skill,
sql_file_name='get_skill_by_global_id.sql',
args=dict(global_id=global_id)
)
if skill is None:
skill_id = self._add_skill(global_id, name)
else:
skill_id = skill.id
return skill_id

View File

@ -1,6 +1,6 @@
INSERT INTO INSERT INTO
skill.skill(name) skill.skill (global_id, name)
VALUES VALUES
(%(skill_name)s) (%(global_id)s, %(skill_name)s)
RETURNING RETURNING
id id

View File

@ -12,8 +12,8 @@ WITH
SELECT DISTINCT SELECT DISTINCT
json_build_object( json_build_object(
'id', s.id, 'id', s.id,
'global_id', s.global_id,
'name', s.name, 'name', s.name,
'url', s.url,
'has_settings', sm.has_settings 'has_settings', sm.has_settings
)::jsonb as skill )::jsonb as skill
FROM FROM