From 768a5db47448bbbeaf59ad9ef4602907023097bc Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 11:59:25 +0100 Subject: [PATCH 01/15] fix config path --- src/iterative_telemetry/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 4dc1f9b..82a6025 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -196,7 +196,7 @@ def _find_or_create_user_id(): IDs are generated randomly with UUID. """ - config_dir = user_config_dir("telemetry", "iterative") + config_dir = user_config_dir(os.path.join("iterative", "telemetry"), False) fname = os.path.join(config_dir, "user_id") lockfile = os.path.join(config_dir, "user_id.lock") From 7bacccde4a6c1fb4fad4763fdf7a0c7bcaa9a11a Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 12:29:00 +0100 Subject: [PATCH 02/15] fix implementation as per spec --- src/iterative_telemetry/__init__.py | 52 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 82a6025..0f5622f 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -8,6 +8,7 @@ import sys import uuid from functools import lru_cache +from pathlib import Path from threading import Thread from typing import Any, Callable, Dict, Union @@ -187,39 +188,44 @@ def _system_info(): raise NotImplementedError +def generate_id(): + """TODO: check environ for CI-based ID""" + return str(uuid.uuid4()) + + @lru_cache(None) def _find_or_create_user_id(): """ The user's ID is stored on a file under the global config directory. - The file should contain a JSON with a "user_id" key: - {"user_id": "16fd2706-8baf-433b-82eb-8c7fada847da"} - IDs are generated randomly with UUID. + The file should contain a single string: + 16fd2706-8baf-433b-82eb-8c7fada847da + IDs are generated randomly with UUID4. """ - - config_dir = user_config_dir(os.path.join("iterative", "telemetry"), False) - fname = os.path.join(config_dir, "user_id") - lockfile = os.path.join(config_dir, "user_id.lock") - - # Since the `fname` and `lockfile` are under the global config, - # we need to make sure such directory exist already. - os.makedirs(config_dir, exist_ok=True) + # DVC backwards-compatibility + old = Path(user_config_dir(str(Path("dvc") / "user_id"), "iterative")) + # cross-product path + new = Path(user_config_dir(str(Path("iterative") / "telemetry"), False)) + new.parent.mkdir(mode=0o755, parents=True, exist_ok=True) + lockfile = str(new.with_suffix(".lock")) try: with FileLock( # pylint: disable=abstract-class-instantiated lockfile, timeout=5 ): - try: - with open(fname, encoding="utf8") as fobj: - user_id = json.load(fobj)["user_id"] - - except (FileNotFoundError, ValueError, KeyError): - user_id = str(uuid.uuid4()) - - with open(fname, "w", encoding="utf8") as fobj: - json.dump({"user_id": user_id}, fobj) - - return user_id - + uid = generate_id() + if new.exists(): + uid = new.read_text().strip() + else: + if old.exists(): + uid = json.load(old.open(encoding="utf8"))["user_id"] + new.write_text(uid) + + # only for non-DVC packages, + # write legacy file in case legacy DVC is installed later + if not old.exists() and uid.lower() != "do-not-track": + old.write_text(f'{{"user_id": "{uid}"}}') + + return uid except Timeout: logger.debug("Failed to acquire %s", lockfile) return None From 263fdd140b0e9ed2da76cb998dec4c61331bf5fe Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 12:52:47 +0100 Subject: [PATCH 03/15] lint --- src/iterative_telemetry/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 0f5622f..514e672 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -214,16 +214,16 @@ def _find_or_create_user_id(): ): uid = generate_id() if new.exists(): - uid = new.read_text().strip() + uid = new.read_text(encoding="utf8").strip() else: if old.exists(): uid = json.load(old.open(encoding="utf8"))["user_id"] - new.write_text(uid) + new.write_text(uid, encoding="utf8") # only for non-DVC packages, # write legacy file in case legacy DVC is installed later if not old.exists() and uid.lower() != "do-not-track": - old.write_text(f'{{"user_id": "{uid}"}}') + old.write_text(f'{{"user_id": "{uid}"}}', encoding="utf8") return uid except Timeout: From f7cb07374cbe93e0a4959b0e865fa0faacf4ebfa Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:08:13 +0100 Subject: [PATCH 04/15] json everything --- src/iterative_telemetry/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 514e672..b3695a5 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -214,16 +214,16 @@ def _find_or_create_user_id(): ): uid = generate_id() if new.exists(): - uid = new.read_text(encoding="utf8").strip() + uid = json.load(new.open(encoding="utf8"))["user_id"] else: if old.exists(): uid = json.load(old.open(encoding="utf8"))["user_id"] - new.write_text(uid, encoding="utf8") + json.dump({"user_id": uid}, new.open("w", encoding="utf8")) # only for non-DVC packages, # write legacy file in case legacy DVC is installed later if not old.exists() and uid.lower() != "do-not-track": - old.write_text(f'{{"user_id": "{uid}"}}', encoding="utf8") + json.dump({"user_id": uid}, old.open("w", encoding="utf8")) return uid except Timeout: From d30edc63522a58e3aa39a78fefe47b117568e670 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:48:44 +0100 Subject: [PATCH 05/15] use DO_NOT_TRACK_VALUE --- src/iterative_telemetry/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index b3695a5..cf6afaf 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -222,7 +222,7 @@ def _find_or_create_user_id(): # only for non-DVC packages, # write legacy file in case legacy DVC is installed later - if not old.exists() and uid.lower() != "do-not-track": + if not old.exists() and uid.lower() != DO_NOT_TRACK_VALUE.lower(): json.dump({"user_id": uid}, old.open("w", encoding="utf8")) return uid From 1b7369040b221c2587e97f95697a2fadc8c46dd7 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:52:57 +0100 Subject: [PATCH 06/15] careful do not track handling --- src/iterative_telemetry/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index cf6afaf..696f9fb 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -75,8 +75,7 @@ def is_enabled(self): return ( os.environ.get(DO_NOT_TRACK_ENV, None) is None and self.enabled() if callable(self.enabled) - else self.enabled - and _find_or_create_user_id() != DO_NOT_TRACK_VALUE + else self.enabled and _find_or_create_user_id() is not None ) def send( @@ -225,7 +224,8 @@ def _find_or_create_user_id(): if not old.exists() and uid.lower() != DO_NOT_TRACK_VALUE.lower(): json.dump({"user_id": uid}, old.open("w", encoding="utf8")) - return uid + if uid.lower() != DO_NOT_TRACK_VALUE.lower(): + return uid except Timeout: logger.debug("Failed to acquire %s", lockfile) return None From 58a01f28b2ce81522f17f64b12751ee3b3117b91 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:53:14 +0100 Subject: [PATCH 07/15] remove bad GIDs --- src/iterative_telemetry/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 696f9fb..6d8af27 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -154,7 +154,7 @@ def _runtime_info(self): # "scm_class": _scm_in_use(), **_system_info(), "user_id": _find_or_create_user_id(), - "group_id": _find_or_create_user_id(), # TODO + "group_id": "", # TODO } From 9f89299f3c8296def075ce5843be93c84a6e1c7f Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:56:56 +0100 Subject: [PATCH 08/15] update comment --- src/iterative_telemetry/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 6d8af27..d90c150 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -196,8 +196,8 @@ def generate_id(): def _find_or_create_user_id(): """ The user's ID is stored on a file under the global config directory. - The file should contain a single string: - 16fd2706-8baf-433b-82eb-8c7fada847da + The file should contain JSON with a `user_id` key: + {"user_id": "16fd2706-8baf-433b-82eb-8c7fada847da"} IDs are generated randomly with UUID4. """ # DVC backwards-compatibility From af1366f23a2991328539c870a7cc25a3ae73f415 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Tue, 5 Jul 2022 20:57:26 +0100 Subject: [PATCH 09/15] expose `write_legacy` --- src/iterative_telemetry/__init__.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index d90c150..7af4b70 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -37,6 +37,7 @@ def __init__( url=URL, token=TOKEN, debug: bool = False, + write_legacy: bool = True, ): self.tool_name = tool_name self.tool_version = tool_version @@ -44,6 +45,7 @@ def __init__( self.url = url self.token = token self.debug = debug + self.write_legacy = write_legacy if self.debug: logger.setLevel(logging.DEBUG) logger.debug("IterativeTelemetryLogger is in debug mode") @@ -75,7 +77,8 @@ def is_enabled(self): return ( os.environ.get(DO_NOT_TRACK_ENV, None) is None and self.enabled() if callable(self.enabled) - else self.enabled and _find_or_create_user_id() is not None + else self.enabled + and _find_or_create_user_id(self.write_legacy) is not None ) def send( @@ -153,7 +156,7 @@ def _runtime_info(self): # "tool_source": self.tool_source, # TODO # "scm_class": _scm_in_use(), **_system_info(), - "user_id": _find_or_create_user_id(), + "user_id": _find_or_create_user_id(self.write_legacy), "group_id": "", # TODO } @@ -193,7 +196,7 @@ def generate_id(): @lru_cache(None) -def _find_or_create_user_id(): +def _find_or_create_user_id(write_legacy=True): """ The user's ID is stored on a file under the global config directory. The file should contain JSON with a `user_id` key: @@ -221,7 +224,11 @@ def _find_or_create_user_id(): # only for non-DVC packages, # write legacy file in case legacy DVC is installed later - if not old.exists() and uid.lower() != DO_NOT_TRACK_VALUE.lower(): + if ( + write_legacy + and not old.exists() + and uid.lower() != DO_NOT_TRACK_VALUE.lower() + ): json.dump({"user_id": uid}, old.open("w", encoding="utf8")) if uid.lower() != DO_NOT_TRACK_VALUE.lower(): From 79529a7776f5ffa4af6eddcb3c4d494343619377 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Wed, 6 Jul 2022 16:30:03 +0100 Subject: [PATCH 10/15] Revert "expose `write_legacy`" This reverts commit af1366f23a2991328539c870a7cc25a3ae73f415. --- src/iterative_telemetry/__init__.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 7af4b70..d90c150 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -37,7 +37,6 @@ def __init__( url=URL, token=TOKEN, debug: bool = False, - write_legacy: bool = True, ): self.tool_name = tool_name self.tool_version = tool_version @@ -45,7 +44,6 @@ def __init__( self.url = url self.token = token self.debug = debug - self.write_legacy = write_legacy if self.debug: logger.setLevel(logging.DEBUG) logger.debug("IterativeTelemetryLogger is in debug mode") @@ -77,8 +75,7 @@ def is_enabled(self): return ( os.environ.get(DO_NOT_TRACK_ENV, None) is None and self.enabled() if callable(self.enabled) - else self.enabled - and _find_or_create_user_id(self.write_legacy) is not None + else self.enabled and _find_or_create_user_id() is not None ) def send( @@ -156,7 +153,7 @@ def _runtime_info(self): # "tool_source": self.tool_source, # TODO # "scm_class": _scm_in_use(), **_system_info(), - "user_id": _find_or_create_user_id(self.write_legacy), + "user_id": _find_or_create_user_id(), "group_id": "", # TODO } @@ -196,7 +193,7 @@ def generate_id(): @lru_cache(None) -def _find_or_create_user_id(write_legacy=True): +def _find_or_create_user_id(): """ The user's ID is stored on a file under the global config directory. The file should contain JSON with a `user_id` key: @@ -224,11 +221,7 @@ def _find_or_create_user_id(write_legacy=True): # only for non-DVC packages, # write legacy file in case legacy DVC is installed later - if ( - write_legacy - and not old.exists() - and uid.lower() != DO_NOT_TRACK_VALUE.lower() - ): + if not old.exists() and uid.lower() != DO_NOT_TRACK_VALUE.lower(): json.dump({"user_id": uid}, old.open("w", encoding="utf8")) if uid.lower() != DO_NOT_TRACK_VALUE.lower(): From a86ca2dc3fd1154fe4b8970e89f0adc42061d2ca Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Wed, 6 Jul 2022 17:09:40 +0100 Subject: [PATCH 11/15] overhaul logic - drop writing to legacy location, vis.: https://github.com/iterative/iterative-telemetry/pull/32#discussion_r914971248 - lint & update names --- src/iterative_telemetry/__init__.py | 50 +++++++++++++++++------------ 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index d90c150..54c169d 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -200,32 +200,42 @@ def _find_or_create_user_id(): {"user_id": "16fd2706-8baf-433b-82eb-8c7fada847da"} IDs are generated randomly with UUID4. """ + config_file = Path( + user_config_dir(os.path.join("iterative", "telemetry"), False) + ) + config_file.parent.mkdir(mode=0o755, parents=True, exist_ok=True) + lockfile = str(config_file.with_suffix(".lock")) # DVC backwards-compatibility - old = Path(user_config_dir(str(Path("dvc") / "user_id"), "iterative")) - # cross-product path - new = Path(user_config_dir(str(Path("iterative") / "telemetry"), False)) - new.parent.mkdir(mode=0o755, parents=True, exist_ok=True) - lockfile = str(new.with_suffix(".lock")) + config_file_old = Path( + user_config_dir(os.path.join("dvc", "user_id"), "iterative") + ) + lockfile_old = str(config_file_old.with_suffix(".lock")) try: with FileLock( # pylint: disable=abstract-class-instantiated lockfile, timeout=5 ): - uid = generate_id() - if new.exists(): - uid = json.load(new.open(encoding="utf8"))["user_id"] - else: - if old.exists(): - uid = json.load(old.open(encoding="utf8"))["user_id"] - json.dump({"user_id": uid}, new.open("w", encoding="utf8")) - - # only for non-DVC packages, - # write legacy file in case legacy DVC is installed later - if not old.exists() and uid.lower() != DO_NOT_TRACK_VALUE.lower(): - json.dump({"user_id": uid}, old.open("w", encoding="utf8")) - - if uid.lower() != DO_NOT_TRACK_VALUE.lower(): - return uid + user_id = read_user_id(config_file) + if user_id is None: + if config_file_old.parent.is_dir(): + with FileLock(lockfile_old, timeout=5): + user_id = read_user_id(config_file_old) + if user_id is None: + user_id = generate_id() + with config_file.open(mode="w", encoding="utf8") as fd: + json.dump({"user_id": user_id}, fd) + + if user_id.lower() != DO_NOT_TRACK_VALUE.lower(): + return user_id except Timeout: logger.debug("Failed to acquire %s", lockfile) return None + + +def read_user_id(config_file: Path): + try: + with config_file.open(encoding="utf8") as fd: + return json.load(fd)["user_id"] + except (FileNotFoundError, ValueError, KeyError): + pass + return None From c1cfc98122c48f707c77f5b3c80df20da7af5a8c Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Wed, 6 Jul 2022 17:11:10 +0100 Subject: [PATCH 12/15] minor docstring updates --- src/iterative_telemetry/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 54c169d..4849040 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -188,15 +188,15 @@ def _system_info(): def generate_id(): - """TODO: check environ for CI-based ID""" - return str(uuid.uuid4()) + """A randomly generated ID string""" + return str(uuid.uuid4()) # TODO: CI env-based ID @lru_cache(None) def _find_or_create_user_id(): """ The user's ID is stored on a file under the global config directory. - The file should contain JSON with a `user_id` key: + The file should contain a JSON with a "user_id" key: {"user_id": "16fd2706-8baf-433b-82eb-8c7fada847da"} IDs are generated randomly with UUID4. """ From 821aa567e4d934a43ca9009fd3c8172b72c54c8d Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Wed, 6 Jul 2022 17:16:01 +0100 Subject: [PATCH 13/15] fd => fobj --- docs/gen_ref_pages.py | 4 ++-- src/iterative_telemetry/__init__.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/gen_ref_pages.py b/docs/gen_ref_pages.py index 9d5b680..1b70597 100644 --- a/docs/gen_ref_pages.py +++ b/docs/gen_ref_pages.py @@ -18,8 +18,8 @@ elif parts[-1] == "__main__": continue - with mkdocs_gen_files.open(full_doc_path, "w") as fd: + with mkdocs_gen_files.open(full_doc_path, "w") as fobj: identifier = ".".join(parts) - print("::: " + identifier, file=fd) + print("::: " + identifier, file=fobj) mkdocs_gen_files.set_edit_path(full_doc_path, path) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 4849040..3eac344 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -222,8 +222,8 @@ def _find_or_create_user_id(): user_id = read_user_id(config_file_old) if user_id is None: user_id = generate_id() - with config_file.open(mode="w", encoding="utf8") as fd: - json.dump({"user_id": user_id}, fd) + with config_file.open(mode="w", encoding="utf8") as fobj: + json.dump({"user_id": user_id}, fobj) if user_id.lower() != DO_NOT_TRACK_VALUE.lower(): return user_id @@ -234,8 +234,8 @@ def _find_or_create_user_id(): def read_user_id(config_file: Path): try: - with config_file.open(encoding="utf8") as fd: - return json.load(fd)["user_id"] + with config_file.open(encoding="utf8") as fobj: + return json.load(fobj)["user_id"] except (FileNotFoundError, ValueError, KeyError): pass return None From 38e9573f3a3be43416c1f47a42059def3c3dcbff Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Mon, 18 Jul 2022 12:25:24 +0100 Subject: [PATCH 14/15] misc linting & abstraction --- src/iterative_telemetry/__init__.py | 39 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index 3eac344..ac71667 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -187,11 +187,28 @@ def _system_info(): raise NotImplementedError -def generate_id(): +def _generate_id(): """A randomly generated ID string""" return str(uuid.uuid4()) # TODO: CI env-based ID +def _read_user_id(config_file: Path): + try: + with config_file.open(encoding="utf8") as fobj: + return json.load(fobj)["user_id"] + except (FileNotFoundError, ValueError, KeyError): + pass + return None + + +def _read_user_id_locked(config_file: Path): + lockfile = str(config_file.with_suffix(".lock")) + if config_file.parent.is_dir(): + with FileLock(lockfile, timeout=5): + return _read_user_id(config_file) + return None + + @lru_cache(None) def _find_or_create_user_id(): """ @@ -209,19 +226,16 @@ def _find_or_create_user_id(): config_file_old = Path( user_config_dir(os.path.join("dvc", "user_id"), "iterative") ) - lockfile_old = str(config_file_old.with_suffix(".lock")) try: with FileLock( # pylint: disable=abstract-class-instantiated lockfile, timeout=5 ): - user_id = read_user_id(config_file) + user_id = _read_user_id(config_file) if user_id is None: - if config_file_old.parent.is_dir(): - with FileLock(lockfile_old, timeout=5): - user_id = read_user_id(config_file_old) - if user_id is None: - user_id = generate_id() + user_id = _read_user_id_locked(config_file_old) + if user_id is None: + user_id = _generate_id() with config_file.open(mode="w", encoding="utf8") as fobj: json.dump({"user_id": user_id}, fobj) @@ -230,12 +244,3 @@ def _find_or_create_user_id(): except Timeout: logger.debug("Failed to acquire %s", lockfile) return None - - -def read_user_id(config_file: Path): - try: - with config_file.open(encoding="utf8") as fobj: - return json.load(fobj)["user_id"] - except (FileNotFoundError, ValueError, KeyError): - pass - return None From 5c639b3eaee2da271cdd94705b4358fe5687f9e0 Mon Sep 17 00:00:00 2001 From: Casper da Costa-Luis Date: Mon, 18 Jul 2022 15:31:47 +0100 Subject: [PATCH 15/15] correct error message --- src/iterative_telemetry/__init__.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/iterative_telemetry/__init__.py b/src/iterative_telemetry/__init__.py index ac71667..a34e837 100644 --- a/src/iterative_telemetry/__init__.py +++ b/src/iterative_telemetry/__init__.py @@ -233,14 +233,18 @@ def _find_or_create_user_id(): ): user_id = _read_user_id(config_file) if user_id is None: - user_id = _read_user_id_locked(config_file_old) + try: + user_id = _read_user_id_locked(config_file_old) + except Timeout: + logger.debug( + "Failed to acquire %s", + config_file_old.with_suffix(".lock"), + ) + return None if user_id is None: user_id = _generate_id() with config_file.open(mode="w", encoding="utf8") as fobj: json.dump({"user_id": user_id}, fobj) - - if user_id.lower() != DO_NOT_TRACK_VALUE.lower(): - return user_id except Timeout: logger.debug("Failed to acquire %s", lockfile) - return None + return user_id if user_id.lower() != DO_NOT_TRACK_VALUE.lower() else None