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.skill import SkillRepository

View File

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

View File

@ -90,7 +90,7 @@ class SkillRepository(RepositoryBase):
@use_transaction
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_display = json.dumps(skill)
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)
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(
'add_skill.sql',
args=dict(skill_name=skill_name)
sql_file_name='add_skill.sql',
args=dict(global_id=global_id, skill_name=name)
)
result = self.cursor.insert_returning(db_request)
return result['id']
db_result = self.cursor.insert_returning(db_request)
return db_result['id']
@staticmethod
def _extract_settings(skill):
@ -142,3 +143,22 @@ class SkillRepository(RepositoryBase):
args=dict(device_id=device_id)
)
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
skill.skill(name)
skill.skill (global_id, name)
VALUES
(%(skill_name)s)
(%(global_id)s, %(skill_name)s)
RETURNING
id
id

View File

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