Example #1
0
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))
Example #2
0
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)))
Example #3
0
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))
Example #4
0
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)))
Example #5
0
    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}
Example #7
0
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)),
    )
Example #8
0
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
Example #9
0
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])
Example #11
0
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))
Example #12
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
Example #13
0
 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)
Example #14
0
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))
Example #15
0
def remove_device_skill(db, manifest_skill):
    device_skill_repo = DeviceSkillRepository(db)
    device_skill_repo.remove_manifest_skill(manifest_skill)
Example #16
0
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)