mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
dvc: move Updater out of Repo()
Fixes #2039 Required by #2012 to be able to fetch data through the API without interuption from updater. Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
@@ -38,10 +38,13 @@ def append_doc_link(help_message, path):
|
||||
class CmdBase(object):
|
||||
def __init__(self, args):
|
||||
from dvc.repo import Repo
|
||||
from dvc.updater import Updater
|
||||
|
||||
self.repo = Repo()
|
||||
self.config = self.repo.config
|
||||
self.args = args
|
||||
updater = Updater(self.repo.dvc_dir)
|
||||
updater.check()
|
||||
|
||||
@property
|
||||
def default_targets(self):
|
||||
|
||||
@@ -47,7 +47,6 @@ class Repo(object):
|
||||
from dvc.scm import SCM
|
||||
from dvc.cache import Cache
|
||||
from dvc.data_cloud import DataCloud
|
||||
from dvc.updater import Updater
|
||||
from dvc.repo.metrics import Metrics
|
||||
from dvc.scm.tree import WorkingTree
|
||||
from dvc.repo.tag import Tag
|
||||
@@ -76,7 +75,6 @@ class Repo(object):
|
||||
|
||||
self.cache = Cache(self)
|
||||
self.cloud = DataCloud(self)
|
||||
self.updater = Updater(self.dvc_dir)
|
||||
|
||||
self.metrics = Metrics(self)
|
||||
self.tag = Tag(self)
|
||||
@@ -84,8 +82,6 @@ class Repo(object):
|
||||
|
||||
self._ignore()
|
||||
|
||||
self.updater.check()
|
||||
|
||||
def __repr__(self):
|
||||
return "Repo: '{root_dir}'".format(root_dir=self.root_dir)
|
||||
|
||||
@@ -121,12 +117,16 @@ class Repo(object):
|
||||
return self.cache.local.unprotect(PathInfo(target))
|
||||
|
||||
def _ignore(self):
|
||||
from dvc.updater import Updater
|
||||
|
||||
updater = Updater(self.dvc_dir)
|
||||
|
||||
flist = [
|
||||
self.state.state_file,
|
||||
self.lock.lock_file,
|
||||
self.config.config_local_file,
|
||||
self.updater.updater_file,
|
||||
self.updater.lock.lock_file,
|
||||
updater.updater_file,
|
||||
updater.lock.lock_file,
|
||||
] + self.state.temp_files
|
||||
|
||||
if self.cache.local.cache_dir.startswith(self.root_dir):
|
||||
|
||||
+37
-29
@@ -1,43 +1,51 @@
|
||||
import os
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
from tests.basic_env import TestDvc
|
||||
from dvc.updater import Updater
|
||||
|
||||
|
||||
class TestUpdater(TestDvc):
|
||||
def test(self):
|
||||
# NOTE: only test on travis CRON to avoid generating too much logs
|
||||
travis = os.getenv("TRAVIS") == "true"
|
||||
if not travis:
|
||||
return
|
||||
@pytest.fixture
|
||||
def updater(dvc_repo):
|
||||
return Updater(dvc_repo.dvc_dir)
|
||||
|
||||
cron = os.getenv("TRAVIS_EVENT_TYPE") == "cron"
|
||||
if not cron:
|
||||
return
|
||||
|
||||
env = os.environ.copy()
|
||||
if os.getenv("CI"):
|
||||
del os.environ["CI"]
|
||||
def test_updater(updater):
|
||||
# NOTE: only test on travis CRON to avoid generating too much logs
|
||||
travis = os.getenv("TRAVIS") == "true"
|
||||
if not travis:
|
||||
return
|
||||
|
||||
self.dvc.updater.check()
|
||||
self.dvc.updater.check()
|
||||
self.dvc.updater.check()
|
||||
cron = os.getenv("TRAVIS_EVENT_TYPE") == "cron"
|
||||
if not cron:
|
||||
return
|
||||
|
||||
os.environ = env.copy()
|
||||
env = os.environ.copy()
|
||||
if env.get("CI"):
|
||||
del env["CI"]
|
||||
|
||||
def test_check_version_newer(self):
|
||||
self.dvc.updater.latest = "0.20.8"
|
||||
self.dvc.updater.current = "0.21.0"
|
||||
with mock.patch.dict(os.environ, env):
|
||||
updater.check()
|
||||
updater.check()
|
||||
updater.check()
|
||||
|
||||
self.assertFalse(self.dvc.updater._is_outdated())
|
||||
|
||||
def test_check_version_equal(self):
|
||||
self.dvc.updater.latest = "0.20.8"
|
||||
self.dvc.updater.current = "0.20.8"
|
||||
def test_check_version_newer(updater):
|
||||
updater.latest = "0.20.8"
|
||||
updater.current = "0.21.0"
|
||||
|
||||
self.assertFalse(self.dvc.updater._is_outdated())
|
||||
assert not updater._is_outdated()
|
||||
|
||||
def test_check_version_outdated(self):
|
||||
self.dvc.updater.latest = "0.21.0"
|
||||
self.dvc.updater.current = "0.20.8"
|
||||
|
||||
self.assertTrue(self.dvc.updater._is_outdated())
|
||||
def test_check_version_equal(updater):
|
||||
updater.latest = "0.20.8"
|
||||
updater.current = "0.20.8"
|
||||
|
||||
assert not updater._is_outdated()
|
||||
|
||||
|
||||
def test_check_version_outdated(updater):
|
||||
updater.latest = "0.21.0"
|
||||
updater.current = "0.20.8"
|
||||
|
||||
assert updater._is_outdated()
|
||||
|
||||
+13
-12
@@ -1,9 +1,8 @@
|
||||
import os
|
||||
import json
|
||||
import mock
|
||||
|
||||
from dvc import __version__
|
||||
from tests.basic_env import TestDvc
|
||||
from dvc.updater import Updater
|
||||
|
||||
|
||||
class MockResponse(object):
|
||||
@@ -27,13 +26,15 @@ def mocked_requests_get(*args, **kwargs):
|
||||
return MockResponse({"version": __version__}, 200)
|
||||
|
||||
|
||||
class TestUpdater(TestDvc):
|
||||
@mock.patch("requests.get", side_effect=mocked_requests_get)
|
||||
def test_fetch(self, mock_get):
|
||||
self.assertFalse(os.path.exists(self.dvc.updater.updater_file))
|
||||
self.dvc.updater.fetch(detach=False)
|
||||
mock_get.assert_called_once()
|
||||
self.assertTrue(os.path.isfile(self.dvc.updater.updater_file))
|
||||
with open(self.dvc.updater.updater_file, "r") as fobj:
|
||||
info = json.load(fobj)
|
||||
self.assertEqual(info["version"], __version__)
|
||||
def test_fetch(dvc_repo, mocker):
|
||||
updater = Updater(dvc_repo.dvc_dir)
|
||||
assert not os.path.exists(updater.updater_file)
|
||||
|
||||
mock_get = mocker.patch("requests.get", side_effect=mocked_requests_get)
|
||||
updater.fetch(detach=False)
|
||||
mock_get.assert_called_once_with(Updater.URL, timeout=Updater.TIMEOUT_GET)
|
||||
|
||||
assert os.path.isfile(updater.updater_file)
|
||||
with open(updater.updater_file, "r") as fobj:
|
||||
info = json.load(fobj)
|
||||
assert info["version"] == __version__
|
||||
|
||||
Reference in New Issue
Block a user