diff --git a/dvc/analytics.py b/dvc/analytics.py index b38e856d7..452b08c8f 100644 --- a/dvc/analytics.py +++ b/dvc/analytics.py @@ -1,24 +1,6 @@ import json import logging import os -import platform -import sys -import tempfile -import uuid - -import distro -import requests - -from dvc import __version__ -from dvc.config import Config, to_bool -from dvc.daemon import daemon -from dvc.exceptions import NotDvcRepoError -from dvc.lock import Lock, LockError -from dvc.repo import Repo -from dvc.scm import SCM, NoSCM -from dvc.scm.base import SCMError -from dvc.utils import env2bool, is_binary -from dvc.utils.fs import makedirs logger = logging.getLogger(__name__) @@ -35,6 +17,10 @@ def collect_and_send_report(args=None, return_code=None): report as a JSON, where the _collector_ generates it and the _sender_ removes it after sending it. """ + import tempfile + + from dvc.daemon import daemon + report = {} # Include command execution information on the report only when available. @@ -50,6 +36,9 @@ def collect_and_send_report(args=None, return_code=None): def is_enabled(): + from dvc.config import Config, to_bool + from dvc.utils import env2bool + if env2bool("DVC_TEST"): return False @@ -69,6 +58,8 @@ def send(path): `collect_and_send_report`. Sending happens on another process, thus, the need of removing such file afterwards. """ + import requests + url = "https://analytics.dvc.org" headers = {"content-type": "application/json"} @@ -86,6 +77,11 @@ def send(path): def _scm_in_use(): + from dvc.exceptions import NotDvcRepoError + from dvc.repo import Repo + from dvc.scm import SCM, NoSCM + from dvc.scm.base import SCMError + try: scm = SCM(root_dir=Repo.find_root()) return type(scm).__name__ @@ -99,6 +95,9 @@ def _runtime_info(): """ Gather information from the environment where DVC runs to fill a report. """ + from dvc import __version__ + from dvc.utils import is_binary + return { "dvc_version": __version__, "is_binary": is_binary(), @@ -109,6 +108,11 @@ def _runtime_info(): def _system_info(): + import platform + import sys + + import distro + system = platform.system() if system == "Windows": @@ -147,6 +151,12 @@ def _find_or_create_user_id(): IDs are generated randomly with UUID. """ + import uuid + + from dvc.config import Config + from dvc.lock import Lock, LockError + from dvc.utils.fs import makedirs + config_dir = Config.get_dir("global") fname = os.path.join(config_dir, "user_id") lockfile = os.path.join(config_dir, "user_id.lock")