From d0a1e69c64c6785107dbd8d22464ee056e56027e Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 10:16:36 -0700 Subject: [PATCH 1/8] [patch] Use Singleton from pyiron_snippets --- .ci_support/environment-docs.yml | 1 + .ci_support/environment-old.yml | 1 + .ci_support/environment.yml | 1 + pyiron_base/database/manager.py | 2 +- pyiron_base/interfaces/singleton.py | 37 ----------------------------- pyiron_base/jobs/job/jobtype.py | 2 +- pyiron_base/state/__init__.py | 2 +- pyiron_base/state/publications.py | 2 +- pyiron_base/state/queue_adapter.py | 2 +- pyiron_base/state/settings.py | 2 +- pyproject.toml | 1 + tests/generic/test_singleton.py | 19 --------------- 12 files changed, 10 insertions(+), 62 deletions(-) delete mode 100644 pyiron_base/interfaces/singleton.py delete mode 100644 tests/generic/test_singleton.py diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 2a15b3096..342d54de0 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -16,6 +16,7 @@ dependencies: - pint =0.23 - psutil =5.9.8 - pyfileindex =0.0.24 +- pyiron_snippets =0.1.0 - pympipool =0.8.3 - pysqa =0.1.20 - pytables =3.9.2 diff --git a/.ci_support/environment-old.yml b/.ci_support/environment-old.yml index 7c052422f..036f9431d 100644 --- a/.ci_support/environment-old.yml +++ b/.ci_support/environment-old.yml @@ -12,6 +12,7 @@ dependencies: - pint =0.18 - psutil =5.8.0 - pyfileindex =0.0.16 +- pyiron_snippets =0.1.0 - pympipool =0.8.0 - pysqa =0.1.12 - pytables =3.6.1 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 03268dde9..6187d7763 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -16,6 +16,7 @@ dependencies: - pint =0.23 - psutil =5.9.8 - pyfileindex =0.0.24 +- pyiron_snippets =0.1.0 - pympipool =0.8.3 - pysqa =0.1.20 - pytables =3.9.2 diff --git a/pyiron_base/database/manager.py b/pyiron_base/database/manager.py index bb83805c5..6974075ec 100644 --- a/pyiron_base/database/manager.py +++ b/pyiron_base/database/manager.py @@ -7,7 +7,7 @@ from urllib.parse import quote_plus from pyiron_base.state.logger import logger -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from pyiron_base.state.settings import settings as s import os diff --git a/pyiron_base/interfaces/singleton.py b/pyiron_base/interfaces/singleton.py deleted file mode 100644 index 3917b0093..000000000 --- a/pyiron_base/interfaces/singleton.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding: utf-8 -# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department -# Distributed under the terms of "New BSD License", see the LICENSE file. - -""" -Utility functions used in pyiron. -In order to be accessible from anywhere in pyiron, they *must* remain free of any imports from pyiron! -""" - -from abc import ABCMeta - -__author__ = "Joerg Neugebauer, Jan Janssen" -__copyright__ = ( - "Copyright 2020, Max-Planck-Institut für Eisenforschung GmbH - " - "Computational Materials Design (CM) Department" -) -__version__ = "1.0" -__maintainer__ = "Jan Janssen" -__email__ = "janssen@mpie.de" -__status__ = "production" -__date__ = "Sep 1, 2017" - - -class Singleton(ABCMeta): - """ - Implemented with suggestions from - - http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python - - """ - - _instances = {} - - def __call__(cls, *args, **kwargs): - if cls not in cls._instances: - cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) - return cls._instances[cls] diff --git a/pyiron_base/jobs/job/jobtype.py b/pyiron_base/jobs/job/jobtype.py index 131053616..bb73f5633 100644 --- a/pyiron_base/jobs/job/jobtype.py +++ b/pyiron_base/jobs/job/jobtype.py @@ -10,7 +10,7 @@ import os from pyiron_base.jobs.job.util import _get_safe_job_name from pyiron_base.storage.hdfio import ProjectHDFio -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from pyiron_base.interfaces.factory import PyironFactory from pyiron_base.jobs.job.extension.jobstatus import job_status_finished_lst from typing import Union diff --git a/pyiron_base/state/__init__.py b/pyiron_base/state/__init__.py index 84a07e70c..db573c65f 100644 --- a/pyiron_base/state/__init__.py +++ b/pyiron_base/state/__init__.py @@ -19,7 +19,7 @@ from pyiron_base.state.publications import publications as _publications from pyiron_base.state.queue_adapter import queue_adapters as _queue_adapters from pyiron_base.state.settings import settings as _settings -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from typing import Dict, Union __author__ = "Liam Huber" diff --git a/pyiron_base/state/publications.py b/pyiron_base/state/publications.py index 527695f6a..ad202c1c3 100644 --- a/pyiron_base/state/publications.py +++ b/pyiron_base/state/publications.py @@ -10,7 +10,7 @@ """ import pandas -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from typing import Dict, Union, List from typing_extensions import Literal diff --git a/pyiron_base/state/queue_adapter.py b/pyiron_base/state/queue_adapter.py index f2d8a98cc..2344e4306 100644 --- a/pyiron_base/state/queue_adapter.py +++ b/pyiron_base/state/queue_adapter.py @@ -8,7 +8,7 @@ multiple adapters. """ -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from pysqa import QueueAdapter as PySQAAdpter import os from pyiron_base.state.settings import settings diff --git a/pyiron_base/state/settings.py b/pyiron_base/state/settings.py index 021287a39..2e093fca1 100644 --- a/pyiron_base/state/settings.py +++ b/pyiron_base/state/settings.py @@ -40,7 +40,7 @@ from pyiron_base.state.publications import publications from pyiron_base.utils.strtobool import strtobool from pathlib import Path -from pyiron_base.interfaces.singleton import Singleton +from pyiron_snippets.singleton import Singleton from typing import Union, Dict, List from copy import deepcopy diff --git a/pyproject.toml b/pyproject.toml index ef2fd7076..e182f4f87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ dependencies = [ "pint==0.23", "psutil==5.9.8", "pyfileindex==0.0.24", + "pyiron_snippets==0.1.0", "pympipool==0.8.3", "pysqa==0.1.20", "sqlalchemy==2.0.30", diff --git a/tests/generic/test_singleton.py b/tests/generic/test_singleton.py deleted file mode 100644 index e1e26fe3c..000000000 --- a/tests/generic/test_singleton.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding: utf-8 -# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department -# Distributed under the terms of "New BSD License", see the LICENSE file. - -from unittest import TestCase -from pyiron_base.interfaces.singleton import Singleton - - -class TestSingleton(TestCase): - def test_uniqueness(self): - class Foo(metaclass=Singleton): - def __init__(self): - self.x = 1 - - f1 = Foo() - f2 = Foo() - self.assertIs(f1, f2) - f2.x = 2 - self.assertEqual(2, f1.x) From 1dc1cd727513ddc5707fb8c1f9d5dcb91ef5e258 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 10:21:15 -0700 Subject: [PATCH 2/8] [patch] Use ImportAlarm from pyiron_snippets --- pyiron_base/__init__.py | 2 - pyiron_base/storage/filedata.py | 2 +- pyiron_base/utils/error.py | 78 --------------------------------- tests/generic/test_util.py | 67 ---------------------------- 4 files changed, 1 insertion(+), 148 deletions(-) diff --git a/pyiron_base/__init__.py b/pyiron_base/__init__.py index f198fc51b..7581ad2f3 100644 --- a/pyiron_base/__init__.py +++ b/pyiron_base/__init__.py @@ -13,7 +13,6 @@ from pyiron_base.storage.inputlist import InputList from pyiron_base.storage.parameters import GenericParameters from pyiron_base.utils.deprecate import Deprecator, deprecate, deprecate_soon -from pyiron_base.utils.error import ImportAlarm from pyiron_base.jobs.job.extension.executable import Executable from pyiron_base.project.external import Notebook, load, dump from pyiron_base.jobs.dynamic import warn_dynamic_job_classes @@ -77,7 +76,6 @@ Deprecator, deprecate, deprecate_soon, - ImportAlarm, Executable, Notebook, load, diff --git a/pyiron_base/storage/filedata.py b/pyiron_base/storage/filedata.py index 0e3f74c34..151a6a1d0 100644 --- a/pyiron_base/storage/filedata.py +++ b/pyiron_base/storage/filedata.py @@ -11,7 +11,7 @@ import pandas from pyiron_base.storage.hdfio import FileHDFio, ProjectHDFio -from pyiron_base.utils.error import ImportAlarm +from pyiron_snippets.import_alarm import ImportAlarm __author__ = "Niklas Siemer" __copyright__ = ( diff --git a/pyiron_base/utils/error.py b/pyiron_base/utils/error.py index 95682606f..723fe2497 100644 --- a/pyiron_base/utils/error.py +++ b/pyiron_base/utils/error.py @@ -27,84 +27,6 @@ __date__ = "Sep 1, 2017" -class ImportAlarm: - """ - In many places we have try/except loops around imports. This class is meant to accompany that code so that users - get an early warning when they instantiate a job that won't work when run. - - Example: - - >>> try: - ... from mystery_package import Enigma, Puzzle, Conundrum - ... import_alarm = ImportAlarm() - >>> except ImportError: - >>> import_alarm = ImportAlarm( - ... "MysteryJob relies on mystery_package, but this was unavailable. Please ensure your python environment " - ... "has access to mystery_package, e.g. with `conda install -c conda-forge mystery_package`" - ... ) - ... - >>> class MysteryJob(GenericJob): - ... @import_alarm - ... def __init__(self, project, job_name) - ... super().__init__() - ... self.riddles = [Enigma(), Puzzle(), Conundrum()] - - This class is also a context manager that can be used as a short-cut, like this: - - >>> with ImportAlarm("MysteryJob relies on mystery_package, but this was unavailable.") as import_alarm: - ... import mystery_package - - If you do not use `import_alarm` as a decorator, but only to get a consistent warning message, call - :meth:`.warn_if_failed()` after the with statement. - - >>> import_alarm.warn_if_failed() - """ - - def __init__(self, message=None): - """ - Initialize message value. - - Args: - message (str): What to say alongside your ImportError when the decorated function is called. (Default is - None, which says nothing and raises no error.) - """ - self.message = message - - def __call__(self, func): - return self.wrapper(func) - - def wrapper(self, function): - @functools.wraps(function) - def decorator(*args, **kwargs): - self.warn_if_failed() - return function(*args, **kwargs) - - return decorator - - def warn_if_failed(self): - """ - Print warning message if import has failed. In case you are not using `ImportAlarm` as a decorator you can call - this method manually to trigger the warning. - """ - if self.message is not None: - warnings.warn(self.message, category=ImportWarning) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - if exc_type is None and exc_value is None and traceback is None: - # import successful, so silence our warning - self.message = None - return - if issubclass(exc_type, ImportError): - # import broken; retain message, but suppress error - return True - else: - # unrelated error during import, re-raise - return False - - T = TypeVar("T") diff --git a/tests/generic/test_util.py b/tests/generic/test_util.py index 68448383c..b31139bfc 100644 --- a/tests/generic/test_util.py +++ b/tests/generic/test_util.py @@ -6,7 +6,6 @@ import warnings from pyiron_base.utils.instance import static_isinstance from pyiron_base.utils.deprecate import deprecate, deprecate_soon -from pyiron_base.utils.error import ImportAlarm from pyiron_base._tests import PyironTestCase @@ -145,71 +144,5 @@ def food(bar=None, baz=None): self.assertEqual(len(w), 2, "Not all warnings preserved.") -class TestImportAlarm(PyironTestCase): - def setUp(self): - super().setUp() - self.import_alarm = ImportAlarm() - - @self.import_alarm - def add_one(x): - return x + 1 - - with ImportAlarm("Broken import") as alarm_broken: - import ASDF - - @alarm_broken - def add_two(x): - return x + 2 - - with ImportAlarm("Working import") as alarm_working: - import sys - - @alarm_working - def add_three(x): - return x + 3 - - self.add_one = add_one - self.add_two = add_two - self.add_three = add_three - - def test_no_warning(self): - with warnings.catch_warnings(record=True) as w: - self.add_one(0) - self.assertEqual( - len(w), 0, "Expected no warnings, but got {} warnings.".format(len(w)) - ) - - def test_has_warning(self): - self.import_alarm.message = "Now add_one should throw an ImportWarning" - - with warnings.catch_warnings(record=True) as w: - self.add_one(1) - self.assertEqual( - len(w), 1, "Expected one warning, but got {} warnings.".format(len(w)) - ) - - def test_context(self): - """ - Usage via context manager should give same results and not suppress other errors. - """ - - with warnings.catch_warnings(record=True) as w: - self.add_two(0) - self.assertEqual( - len(w), 1, "Expected one warning, but got {} warnings.".format(len(w)) - ) - - with warnings.catch_warnings(record=True) as w: - self.add_three(0) - self.assertEqual( - len(w), 0, "Expected one warning, but got {} warnings.".format(len(w)) - ) - - with self.assertRaises( - ZeroDivisionError, msg="Context manager should swallow unrelated exceptions" - ), ImportAlarm("Unrelated"): - print(1 / 0) - - if __name__ == "__main__": unittest.main() From 58f1f64c2fa99a0310534780067f3ac630525b9f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 17:26:36 +0000 Subject: [PATCH 3/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyiron_base/utils/error.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyiron_base/utils/error.py b/pyiron_base/utils/error.py index 723fe2497..e7af617d6 100644 --- a/pyiron_base/utils/error.py +++ b/pyiron_base/utils/error.py @@ -7,11 +7,9 @@ In order to be accessible from anywhere in pyiron, they *must* remain free of any imports from pyiron! """ -import functools from itertools import count import time from typing import Callable, TypeVar, Type, Tuple, Optional, Union -import warnings from pyiron_base.state.logger import logger From 8005fe2b1c1f090551b6e222d0aa61cabab04a22 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 10:30:21 -0700 Subject: [PATCH 4/8] Run unittests on stacked PRs too --- .github/workflows/unittests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index b860dec7e..22daea3e2 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -6,7 +6,6 @@ on: push: branches: [ main ] pull_request: - branches: [ main ] jobs: build: From 7839866ce663e8460b4d760b29b7bcade37b5d61 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 10:32:06 -0700 Subject: [PATCH 5/8] Make the API backwards compatible again --- pyiron_base/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyiron_base/__init__.py b/pyiron_base/__init__.py index 7581ad2f3..0faab3f7b 100644 --- a/pyiron_base/__init__.py +++ b/pyiron_base/__init__.py @@ -45,6 +45,9 @@ from pyiron_base.jobs.job.toolkit import Toolkit, BaseTools +# Expose snippets references in base API for backwards compatibility +from pyiron_snippets.import_alarm import ImportAlarm + # Internal init from ._version import get_versions from pyiron_base.utils.jedi import fix_ipython_autocomplete @@ -76,6 +79,7 @@ Deprecator, deprecate, deprecate_soon, + ImportAlarm, Executable, Notebook, load, From fed48f3ce0ba9c6d70c2788f9348a9228834d16e Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 10:42:39 -0700 Subject: [PATCH 6/8] [patch] use retry from pyiron_snippets --- pyiron_base/database/generic.py | 2 +- pyiron_base/utils/error.py | 77 --------------------------------- tests/utils/test_error.py | 56 ------------------------ 3 files changed, 1 insertion(+), 134 deletions(-) delete mode 100644 pyiron_base/utils/error.py delete mode 100644 tests/utils/test_error.py diff --git a/pyiron_base/database/generic.py b/pyiron_base/database/generic.py index 0b073a03d..ea33a6da1 100644 --- a/pyiron_base/database/generic.py +++ b/pyiron_base/database/generic.py @@ -25,8 +25,8 @@ from sqlalchemy.exc import OperationalError, DatabaseError from threading import Thread, Lock from queue import SimpleQueue, Empty as QueueEmpty +from pyiron_snippets.retry import retry from pyiron_base.database.tables import get_historical_table -from pyiron_base.utils.error import retry from pyiron_base.database.interface import IsDatabase from pyiron_base.database.sqlcolumnlength import CHEMICALFORMULA_STR_LENGTH diff --git a/pyiron_base/utils/error.py b/pyiron_base/utils/error.py deleted file mode 100644 index e7af617d6..000000000 --- a/pyiron_base/utils/error.py +++ /dev/null @@ -1,77 +0,0 @@ -# coding: utf-8 -# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department -# Distributed under the terms of "New BSD License", see the LICENSE file. - -""" -Utility functions used in pyiron. -In order to be accessible from anywhere in pyiron, they *must* remain free of any imports from pyiron! -""" - -from itertools import count -import time -from typing import Callable, TypeVar, Type, Tuple, Optional, Union - -from pyiron_base.state.logger import logger - -__author__ = "Joerg Neugebauer, Jan Janssen" -__copyright__ = ( - "Copyright 2020, Max-Planck-Institut für Eisenforschung GmbH - " - "Computational Materials Design (CM) Department" -) -__version__ = "1.0" -__maintainer__ = "Jan Janssen" -__email__ = "janssen@mpie.de" -__status__ = "production" -__date__ = "Sep 1, 2017" - - -T = TypeVar("T") - - -def retry( - func: Callable[[], T], - error: Union[Type[Exception], Tuple[Type[Exception], ...]], - msg: str, - at_most: Optional[int] = None, - delay: float = 1.0, - delay_factor: float = 1.0, -) -> T: - """ - Try to call `func` until it no longer raises `error`. - - Any other exception besides `error` is still raised. - - Args: - func (callable): function to call, should take no arguments - error (Exception or tuple thereof): any exceptions to be caught - msg (str): messing to be written to the log if `error` occurs. - at_most (int, optional): retry at most this many times, None means retry - forever - delay (float): time to wait between retries in seconds - delay_factor (float): multiply `delay` between retries by this factor - - Raises: - `error`: if `at_most` is exceeded the last error is re-raised - Exception: any exception raised by `func` that does not match `error` - - Returns: - object: whatever is returned by `func` - """ - if at_most is None: - tries = count() - else: - tries = range(at_most) - for i in tries: - try: - return func() - except error as e: - logger.warn( - f"{msg} Trying again in {delay}s. Tried {i + 1} times so far..." - ) - time.sleep(delay) - delay *= delay_factor - # e drops out of the namespace after the except clause ends, so - # assign it here to a dummy variable so that we can re-raise it - # in case the error persists - err = e - raise err from None diff --git a/tests/utils/test_error.py b/tests/utils/test_error.py deleted file mode 100644 index 629303cf6..000000000 --- a/tests/utils/test_error.py +++ /dev/null @@ -1,56 +0,0 @@ -import unittest - -from pyiron_base.utils.error import retry - - -class TestRetry(unittest.TestCase): - def test_return_value(self): - """retry should return the exact value that the function returns.""" - - def func(): - return 42 - - self.assertEqual( - func(), - retry(func, error=ValueError, msg=""), - "retry returned a different value!", - ) - - def test_unrelated_exception(self): - """retry should not catch exception that are not explicitely passed.""" - - def func(): - raise ValueError() - - with self.assertRaises( - ValueError, msg="retry caught an exception it was not supposed to!" - ): - retry(func, error=TypeError, msg="") - - def test_exception(self): - """retry should catch explicitely passed exceptions.""" - - class Func: - """Small helper to simulate a stateful function.""" - - def __init__(self): - self.n = 0 - - def __call__(self): - self.n += 1 - if self.n < 4: - raise ValueError(self.n) - else: - return self.n - - func = Func() - try: - retry(func, error=ValueError, msg="", delay=1e-6) - except ValueError: - self.fail("retry did not catch exception!") - - func = Func() - with self.assertRaises( - ValueError, msg="retry did re-raise exception after insufficient tries!" - ): - retry(func, error=ValueError, msg="", at_most=2, delay=1e-6) From 62738778a4bbc8947063ffe2a4bac4ad25e67b77 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 31 May 2024 11:06:33 -0700 Subject: [PATCH 7/8] Bump snippets dependency It's not available yet, but the next patch will import annotations from future for retry. --- .ci_support/environment-docs.yml | 2 +- .ci_support/environment-old.yml | 2 +- .ci_support/environment.yml | 2 +- pyproject.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 342d54de0..eb4785e23 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -16,7 +16,7 @@ dependencies: - pint =0.23 - psutil =5.9.8 - pyfileindex =0.0.24 -- pyiron_snippets =0.1.0 +- pyiron_snippets =0.1.1 - pympipool =0.8.3 - pysqa =0.1.20 - pytables =3.9.2 diff --git a/.ci_support/environment-old.yml b/.ci_support/environment-old.yml index 036f9431d..26e181194 100644 --- a/.ci_support/environment-old.yml +++ b/.ci_support/environment-old.yml @@ -12,7 +12,7 @@ dependencies: - pint =0.18 - psutil =5.8.0 - pyfileindex =0.0.16 -- pyiron_snippets =0.1.0 +- pyiron_snippets =0.1.1 - pympipool =0.8.0 - pysqa =0.1.12 - pytables =3.6.1 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 6187d7763..dafd01c2d 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -16,7 +16,7 @@ dependencies: - pint =0.23 - psutil =5.9.8 - pyfileindex =0.0.24 -- pyiron_snippets =0.1.0 +- pyiron_snippets =0.1.1 - pympipool =0.8.3 - pysqa =0.1.20 - pytables =3.9.2 diff --git a/pyproject.toml b/pyproject.toml index e182f4f87..6595a3e31 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ dependencies = [ "pint==0.23", "psutil==5.9.8", "pyfileindex==0.0.24", - "pyiron_snippets==0.1.0", + "pyiron_snippets==0.1.1", "pympipool==0.8.3", "pysqa==0.1.20", "sqlalchemy==2.0.30", From c19de48196c0b5e37f9aaa4cb28972afc04bcaa4 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 3 Jun 2024 20:47:44 +0200 Subject: [PATCH 8/8] Update pyiron_base/__init__.py --- pyiron_base/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyiron_base/__init__.py b/pyiron_base/__init__.py index 0faab3f7b..7688607f3 100644 --- a/pyiron_base/__init__.py +++ b/pyiron_base/__init__.py @@ -45,9 +45,6 @@ from pyiron_base.jobs.job.toolkit import Toolkit, BaseTools -# Expose snippets references in base API for backwards compatibility -from pyiron_snippets.import_alarm import ImportAlarm - # Internal init from ._version import get_versions from pyiron_base.utils.jedi import fix_ipython_autocomplete