def get_unchanged_skill_manifest(context): device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(1)) manifest_skill = skill_manifest[0] assert_that(manifest_skill, equal_to(context.manifest_skill))
def get_skill_manifest_no_device_specific(context): device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(1)) remaining_skill = skill_manifest[0] assert_that(remaining_skill.skill_gid, not_(equal_to(context.device_specific_skill.skill_gid)))
def get_unchanged_skill_manifest(context): """Check that the skill manifest on the database did not change.""" device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(1)) manifest_skill = skill_manifest[0] assert_that(manifest_skill, equal_to(context.manifest_skill))
def get_updated_skill_manifest(context): device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(1)) manifest_skill = skill_manifest[0] assert_that(manifest_skill, not_(equal_to(context.manifest_skill))) manifest_skill.update_ts = context.update_ts assert_that(manifest_skill, (equal_to(context.manifest_skill)))
def _build_response_data(self, device_id): device_skill_repo = DeviceSkillRepository(self.db) device_skills = device_skill_repo.get_skill_settings_for_device( device_id) if device_skills is not None: response_data = {} for skill in device_skills: response_data[skill.skill_gid] = skill.settings_values return response_data
def __init__(self, db, device_manifest, db_manifest): self.db = db self.skill_manifest_repo = DeviceSkillRepository(db) self.skill_repo = SkillRepository(self.db) self.device_manifest = {sm.skill_gid: sm for sm in device_manifest} self.db_manifest = {ds.skill_gid: ds for ds in db_manifest} self.device_manifest_global_ids = { gid for gid in self.device_manifest.keys() } self.db_manifest_global_ids = {gid for gid in self.db_manifest}
def get_skill_manifest_no_device_specific(context): """Check that there are no device-specific skills on the skill manifest.""" device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(1)) remaining_skill = skill_manifest[0] assert_that( remaining_skill.skill_gid, not_(equal_to(context.device_specific_skill.skill_gid)), )
def add_device_skill(db, device_id, skill): manifest_skill = ManifestSkill(device_id=device_id, install_method='test_install_method', install_status='test_install_status', skill_id=skill.id, skill_gid=skill.skill_gid, install_ts=datetime.utcnow(), update_ts=datetime.utcnow()) device_skill_repo = DeviceSkillRepository(db) manifest_skill.id = device_skill_repo.add_manifest_skill(manifest_skill) return manifest_skill
def get_skill_manifest_new_skill(context): device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(2)) assert_that(context.manifest_skill, is_in(skill_manifest)) # the device_skill id is not part of the request data so clear it out for manifest_skill in skill_manifest: if manifest_skill.skill_gid == context.new_skill.skill_gid: manifest_skill.id = None manifest_skill.skill_id = None assert_that(context.new_manifest_skill, is_in(skill_manifest))
class SkillManifestReconciler(object): def __init__(self, db, device_manifest, db_manifest): self.db = db self.skill_manifest_repo = DeviceSkillRepository(db) self.skill_repo = SkillRepository(self.db) self.device_manifest = {sm.skill_gid: sm for sm in device_manifest} self.db_manifest = {ds.skill_gid: ds for ds in db_manifest} self.device_manifest_global_ids = { gid for gid in self.device_manifest.keys() } self.db_manifest_global_ids = {gid for gid in self.db_manifest} def reconcile(self): """Compare the manifest sent by the device to that on the database.""" self._update_skills() self._remove_skills() self._add_skills() def _update_skills(self): common_global_ids = self.device_manifest_global_ids.intersection( self.db_manifest_global_ids) for gid in common_global_ids: if self.device_manifest[gid] == self.db_manifest[gid]: self.skill_manifest_repo.update_manifest_skill( self.device_manifest[gid]) def _remove_skills(self): skills_to_remove = self.db_manifest_global_ids.difference( self.device_manifest_global_ids) for gid in skills_to_remove: manifest_skill = self.db_manifest[gid] self.skill_manifest_repo.remove_manifest_skill(manifest_skill) if manifest_skill.device_id in gid: self.skill_repo.remove_by_gid(gid) def _add_skills(self): skills_to_add = self.device_manifest_global_ids.difference( self.db_manifest_global_ids) for gid in skills_to_add: skill_id = self.skill_repo.ensure_skill_exists(gid) self.device_manifest[gid].skill_id = skill_id self.skill_manifest_repo.add_manifest_skill( self.device_manifest[gid])
def get_empty_skill_manifest(context): device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(0))
def device_skill_repo(self): if self._device_skill_repo is None: self._device_skill_repo = DeviceSkillRepository(self.db) return self._device_skill_repo
def _get_installed_skills(self): skill_repo = DeviceSkillRepository(self.db) installed_skills = skill_repo.get_skill_manifest_for_account( self.account.id) for skill in installed_skills: self.installed_skills[skill.skill_id].append(skill)
def get_empty_skill_manifest(context): """Check for an empty skill manifest on the database.""" device_skill_repo = DeviceSkillRepository(context.db) skill_manifest = device_skill_repo.get_skill_manifest_for_device( context.device_id) assert_that(len(skill_manifest), equal_to(0))
def remove_device_skill(db, manifest_skill): device_skill_repo = DeviceSkillRepository(db) device_skill_repo.remove_manifest_skill(manifest_skill)
def add_device_skill_settings(db, device_id, settings_display, settings_values): device_skill_repo = DeviceSkillRepository(db) device_skill_repo.upsert_device_skill_settings([device_id], settings_display, settings_values)