示例#1
0
文件: convert.py 项目: oscu0/orpheus
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')
示例#2
0
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)
示例#8
0
 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()
示例#9
0
    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()
示例#10
0
 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()
示例#13
0
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)
示例#14
0
 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()
示例#15
0
 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)
示例#19
0
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')
示例#20
0
 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()
示例#23
0
    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()
示例#24
0
 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)
示例#25
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"
示例#26
0
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"