def handle_update(wf): """Clear cache on update. Delete cached data if last-run version used a different format, or if user has just added the ``APP_KEY`` for fiat currency exchange rates. """ nokey = wf.cachefile(NOKEY_FILENAME) clear = False # Clear cache if previous version was old lv = wf.last_version_run log.debug('version=%s, last_version=%s', wf.version, lv) if wf.version > Version('3.0') and lv < Version('3.1'): log.debug('clearing cache: saved data is incompatible') clear = True if OPENX_APP_KEY: if os.path.exists(nokey): os.unlink(nokey) log.debug('clearing cache: APP_KEY was set') clear = True else: if not os.path.exists(nokey): open(nokey, 'wb').write('') if clear: wf.cache_data(CURRENCY_CACHE_NAME, None) log.debug('cleared old cached currencies')
def get_aw_info(dirpath): """Return version and directory of AW if it's installed.""" candidates = [] for root, _, filenames in os.walk(dirpath): if 'workflow.py' in filenames and os.path.basename(root) == 'workflow': candidates.append(root) for dp in candidates: wp = os.path.join(dp, 'workflow.py') vp = os.path.join(dp, 'version') with open(wp) as fp: text = fp.read() if 'Dean Jackson <*****@*****.**>' not in text: log.debug('non-AW workflow.py ignored') continue if os.path.exists(vp): with open(vp) as fp: v = Version(fp.read().strip()) else: log.warning('no version file in %s, assuming a very old version', dirpath) v = Version('0.0.1') return AWInfo(dp, v) return None
def test_valid_versions(self): """Versions: valid versions""" for v in self.valid_versions: if isinstance(v, tuple): vin, vout = v else: vin = vout = v self.assertEqual(str(Version(vin)), vout) self.assertEqual(str(Version("v{0}".format(vin))), vout)
def test_envvar(infopl): """Version from environment variable.""" v = '1.1.2' with env(alfred_workflow_version=v): wf = Workflow3() assert wf.version == Version(v), "unexpected version" # environment variables have priority wf = Workflow3(update_settings={'version': '1.1.3'}) assert wf.version == Version(v), "unexpected version"
def test_last_version_explicit_version(alfred4, infopl): """Workflow: last_version explicit version""" vstr = '1.9.6' wf = Workflow() assert wf.set_last_version(vstr) is True assert wf.last_version_run == Version(vstr) wf.reset()
def test_last_version_on(alfred4, infopl): """Workflow: last_version_run not empty""" vstr = '1.9.7' with env(alfred_workflow_version=vstr): wf = Workflow() wf.set_last_version(vstr) assert Version(vstr) == wf.last_version_run wf.reset() # Set automatically with env(alfred_workflow_version=vstr): wf = Workflow() wf.set_last_version() assert Version(vstr) == wf.last_version_run wf.reset()
def test_versions_from_info(alfred4, infopl): """Workflow: version from info.plist""" with env(alfred_workflow_version=None): wf = Workflow() assert str(wf.version) == WORKFLOW_VERSION assert isinstance(wf.version, Version) assert wf.version == Version(WORKFLOW_VERSION)
def test_last_version_explicit_version(self): """Workflow: last_version explicit version""" vstr = '1.9.6' wf = Workflow() self.assertTrue(wf.set_last_version(vstr)) self.assertEqual(wf.last_version_run, Version(vstr)) wf.reset()
def test_last_version_on(self): """Workflow: last_version_run not empty""" vstr = '1.9.7' with InfoPlist(): with VersionFile(vstr): wf = Workflow() wf.set_last_version(vstr) self.assertEqual(Version(vstr), wf.last_version_run) wf.reset() # Set automatically with VersionFile(vstr): wf = Workflow() wf.set_last_version() self.assertEqual(Version(vstr), wf.last_version_run) wf.reset()
def test_versions_from_settings(self): """Workflow: version from `update_settings`""" vstr = '1.9.7' d = {'github_slug': 'deanishe/alfred-workflow', 'version': vstr} wf = Workflow(update_settings=d) self.assertEqual(str(wf.version), vstr) self.assertTrue(isinstance(wf.version, Version)) self.assertEqual(wf.version, Version(vstr))
def test_version_envvar(info3): """Version from environment variable.""" os.environ['alfred_workflow_version'] = '1.1.2' wf = Workflow3() try: assert wf.version == Version('1.1.2') finally: del os.environ['alfred_workflow_version']
def test_last_version_auto_version(alfred4, infopl): """Workflow: last_version auto version""" vstr = '1.9.7' with env(alfred_workflow_version=vstr): wf = Workflow() assert wf.set_last_version() is True assert wf.last_version_run == Version(vstr) wf.reset()
def test_versions_from_settings(alfred4, infopl2): """Workflow: version from `update_settings`""" vstr = "1.9.7" d = {"github_slug": "deanishe/alfred-workflow", "version": vstr} with env(alfred_workflow_version=None): wf = Workflow(update_settings=d) assert str(wf.version) == vstr assert isinstance(wf.version, Version) assert wf.version == Version(vstr)
def test_last_version_auto_version(self): """Workflow: last_version auto version""" vstr = '1.9.7' with VersionFile(vstr): with InfoPlist(): wf = Workflow() self.assertTrue(wf.set_last_version()) self.assertEqual(wf.last_version_run, Version(vstr)) wf.reset()
def test_versions_from_version_file(self): """Workflow: version from `version`""" vstr = '1.9.7' with VersionFile(vstr): with InfoPlist(): wf = Workflow() self.assertEqual(str(wf.version), vstr) self.assertTrue(isinstance(wf.version, Version)) self.assertEqual(wf.version, Version(vstr))
def test_versions_from_file(alfred4, infopl2): """Workflow: version from `version` file""" vstr = '1.9.7' with env(alfred_workflow_version=None): with VersionFile(vstr): wf = Workflow() assert str(wf.version) == vstr assert isinstance(wf.version, Version) assert wf.version == Version(vstr)
def test_first_run_with_previous_run(alfred4, infopl): """Workflow: first_run with previous run""" vstr = '1.9.7' last_vstr = '1.9.6' with env(alfred_workflow_version=vstr): wf = Workflow() wf.set_last_version(last_vstr) assert wf.first_run is True assert wf.last_version_run == Version(last_vstr) wf.reset()
def test_compare_bad_objects(self): """Versions: invalid comparisons""" v = Version("1.0.0") t = (1, 0, 0) self.assertRaises(ValueError, lambda v, t: v == t, v, t) self.assertRaises(ValueError, lambda v, t: v >= t, v, t) self.assertRaises(ValueError, lambda v, t: v <= t, v, t) self.assertRaises(ValueError, lambda v, t: v != t, v, t) self.assertRaises(ValueError, lambda v, t: v > t, v, t) self.assertRaises(ValueError, lambda v, t: v < t, v, t)
def migrate(wf): # type: (Workflow3) -> None if not wf.last_version_run or wf.last_version_run == wf.version: return wf.logger.info('Version upgraded: {0} -> {1}'.format( wf.last_version_run, wf.version)) if wf.last_version_run < Version('1.2.0'): migrate_to_1_2_0(wf) wf.logger.info('Migration to 1.2.0 complete')
def test_first_run_with_previous_run(self): """Workflow: first_run with previous run""" vstr = '1.9.7' last_vstr = '1.9.6' with VersionFile(vstr): with InfoPlist(): wf = Workflow() wf.set_last_version(last_vstr) self.assertTrue(wf.first_run) self.assertEqual(wf.last_version_run, Version(last_vstr)) wf.reset()
def test_versions_from_settings(alfred4, infopl2): """Workflow: version from `update_settings`""" vstr = '1.9.7' d = { 'github_slug': 'deanishe/alfred-workflow', 'version': vstr, } with env(alfred_workflow_version=None): wf = Workflow(update_settings=d) assert str(wf.version) == vstr assert isinstance(wf.version, Version) assert wf.version == Version(vstr)
def test_last_version_set_after_run(alfred4, infopl): """Workflow: last_version set after `run()`""" vstr = '1.9.7' def cb(wf): return with env(alfred_workflow_version=vstr): wf = Workflow() assert wf.last_version_run is None wf.run(cb) wf = Workflow() assert wf.last_version_run == Version(vstr) wf.reset()
def test_last_version_set_after_run(self): """Workflow: last_version set after `run()`""" vstr = '1.9.7' def cb(wf): return with VersionFile(vstr): with InfoPlist(): wf = Workflow() self.assertTrue(wf.last_version_run is None) wf.run(cb) wf = Workflow() self.assertEqual(wf.last_version_run, Version(vstr)) wf.reset()
def test_compare_bad_objects(self): """Versions: invalid comparisons""" with self.assertRaises(ValueError): Version('1.0.0') == (1, 0, 0) with self.assertRaises(ValueError): Version('1.0.0') >= (1, 0, 0) with self.assertRaises(ValueError): Version('1.0.0') <= (1, 0, 0) with self.assertRaises(ValueError): Version('1.0.0') != (1, 0, 0) with self.assertRaises(ValueError): Version('1.0.0') > (1, 0, 0) with self.assertRaises(ValueError): Version('1.0.0') < (1, 0, 0)
def test_latest_download(infopl): """Latest download for Alfred version.""" dls = Download.from_releases(RELEASES_JSON) tests = ( # downloads, alfred version, prereleases, wanted result ([], None, False, None), (dls, None, False, "9.0"), (dls, None, True, "10.0-beta"), (dls, "4", False, "9.0"), (dls, "4", True, "10.0-beta"), (dls, "3", False, "6.0"), (dls, "3", True, "10.0-beta"), ) for data, version, pre, wanted in tests: dl = update.latest_download(data, version, pre) if wanted is None: assert dl is None, "latest is not None" else: assert dl.version == Version(wanted), "unexpected version"
def main(wf): """Run the workflow.""" # Update settings format if wf.last_version_run and wf.last_version_run < Version('2'): migrate_v1_config() opts = parse_args() # Alternate actions # ------------------------------------------------------------------ if opts.do_open: return do_open(opts) elif opts.do_settings: return do_settings() elif opts.do_update: return do_update() # Notify user if update is available # ------------------------------------------------------------------ if wf.update_available: wf.add_item(u'Workflow Update is Available', u'↩ or ⇥ to install', autocomplete='workflow:update', valid=False, icon=ICON_UPDATE) # Try to search git repos # ------------------------------------------------------------------ search_dirs = wf.settings.get('search_dirs', []) # Can't do anything with no directories to search if not search_dirs or is_defaults(wf.settings): wf.add_item("You haven't configured any directories to search", 'Use `reposettings` to edit your configuration', icon=ICON_WARNING) wf.send_feedback() return 0 # Reload repos if settings file has been updated if settings_updated(): log.info('settings were updated. Reloading repos...') do_update() repos = get_repos(opts) # Show appropriate warning/info message if there are no repos to # show/search # ------------------------------------------------------------------ if not repos: if is_running('update'): wf.add_item(u'Updating list of repos…', 'Should be done in a few seconds', icon=ICON_INFO) wf.rerun = 0.5 else: wf.add_item('No git repos found', 'Check your settings with `reposettings`', icon=ICON_WARNING) wf.send_feedback() return 0 # Reload results if `update` is running if is_running('update'): wf.rerun = 0.5 return do_search(repos, opts)
def test_compare_versions(self): """Versions: comparisons""" self.assertTrue(Version("1") == Version("1.0") == Version("1.0.0")) self.assertTrue(Version("1.0.0") == Version("01.0.00")) self.assertTrue(Version("1.10.0") > Version("1.9.9")) self.assertTrue(Version("1.10.0") > Version("1.10.0-alpha")) self.assertTrue(Version("1.9.9") < Version("1.10.0")) self.assertTrue(Version("1.10.0-alpha") < Version("1.10.0")) self.assertTrue(Version("1.10.0") >= Version("1.9.9")) self.assertTrue(Version("1.10.0") >= Version("1.10.0-alpha")) self.assertTrue(Version("1.9.9") <= Version("1.10.0")) self.assertTrue(Version("1.10.0-alpha") <= Version("1.10.0")) self.assertTrue(Version("1.10.0-alpha") < Version("1.10.0-beta")) self.assertTrue(Version("1.10.0-beta") > Version("1.10.0-alpha")) self.assertTrue(Version("1.10.0-beta") != Version("1.10.0-alpha")) self.assertTrue(Version("1.10.0-alpha") != Version("1.10.0")) self.assertTrue(Version("2.10.20") > Version("1.20.30")) self.assertTrue(Version("2.10.20") == Version("2.10.20+2342345345")) # With v prefix self.assertTrue(Version("v1.0.0") == Version("01.0.00")) self.assertTrue(Version("v1.10.0") > Version("1.9.9")) self.assertTrue(Version("v1.10.0") > Version("1.10.0-alpha")) self.assertTrue(Version("v1.9.9") < Version("1.10.0")) self.assertTrue(Version("v1.10.0-alpha") < Version("1.10.0")) self.assertTrue(Version("v1.10.0") >= Version("1.9.9")) self.assertTrue(Version("v1.10.0") >= Version("1.10.0-alpha")) self.assertTrue(Version("v1.9.9") <= Version("1.10.0")) self.assertTrue(Version("v1.10.0-alpha") <= Version("1.10.0")) self.assertTrue(Version("v1.10.0-alpha") < Version("1.10.0-beta")) self.assertTrue(Version("v1.10.0-beta") > Version("1.10.0-alpha")) self.assertTrue(Version("v1.10.0-beta") != Version("1.10.0-alpha")) self.assertTrue(Version("v1.10.0-alpha") != Version("1.10.0")) self.assertTrue(Version("v2.10.20") > Version("1.20.30")) self.assertTrue(Version("v2.10.20") == Version("2.10.20+2342345345")) # With and without suffixes self.assertTrue(Version("v1.10.0") > Version("1.10.0-beta")) self.assertTrue(Version("v1.10.0-alpha") < Version("1.10.0-beta")) # Complex suffixes self.assertTrue(Version("1.0.0-alpha") < Version("1.0.0-alpha.1")) self.assertTrue(Version("1.0.0-alpha.1") < Version("1.0.0-alpha.beta")) self.assertTrue(Version("1.0.0-alpha.beta") < Version("1.0.0-beta")) self.assertTrue(Version("1.0.0-beta") < Version("1.0.0-beta.2")) self.assertTrue(Version("1.0.0-beta.2") < Version("1.0.0-beta.11")) self.assertTrue(Version("1.0.0-beta.11") < Version("1.0.0-rc.1")) self.assertTrue(Version("1.0.0-rc.1") < Version("1.0.0"))
def test_alfred_version(wf): """Workflow: alfred_version correct.""" assert wf.alfred_version == Version('4.0')
def test_info_plist(infopl): """Version from info.plist.""" wf = Workflow3() assert wf.version == Version('1.1.1'), "unexpected version"
def test_update_settings(infopl): """Version from update_settings.""" v = '1.1.3' wf = Workflow3(update_settings={'version': v}) assert wf.version == Version(v), "unexpected version"