experimaestro 1.15.2__py3-none-any.whl → 1.16.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,6 @@
1
1
  # flake8: noqa: T201
2
2
  import sys
3
3
  from typing import Set, Optional
4
- import pkg_resources
5
4
  from itertools import chain
6
5
  from shutil import rmtree
7
6
  import click
@@ -15,6 +14,7 @@ import experimaestro
15
14
  from experimaestro.experiments.cli import experiments_cli
16
15
  import experimaestro.launcherfinder.registry as launcher_registry
17
16
  from experimaestro.settings import find_workspace
17
+ from importlib.metadata import entry_points
18
18
 
19
19
  # --- Command line main options
20
20
  logging.basicConfig(level=logging.INFO)
@@ -274,7 +274,7 @@ class Launchers(click.MultiCommand):
274
274
  @cached_property
275
275
  def commands(self):
276
276
  map = {}
277
- for ep in pkg_resources.iter_entry_points(f"experimaestro.{self.name}"):
277
+ for ep in entry_points(group=f"experimaestro.{self.name}"):
278
278
  if get_cli := getattr(ep.load(), "get_cli", None):
279
279
  map[ep.name] = get_cli()
280
280
  return map
@@ -4,7 +4,7 @@ from typing import Any, Callable, Dict, List, Optional
4
4
  import pyparsing as pp
5
5
  from pathlib import Path
6
6
  import json
7
- from experimaestro.compat import cached_property
7
+ from functools import cached_property
8
8
  import re
9
9
  from experimaestro.scheduler import JobState
10
10
 
@@ -16,7 +16,7 @@ from experimaestro.utils import logger
16
16
  from experimaestro.locking import Lock
17
17
  from experimaestro.tokens import Token
18
18
  from experimaestro.utils.asyncio import asyncThreadcheck
19
- import pkg_resources
19
+ from importlib.metadata import entry_points
20
20
 
21
21
 
22
22
  class RedirectType(enum.Enum):
@@ -101,7 +101,7 @@ class Process:
101
101
  """Get a handler"""
102
102
  if Process.HANDLERS is None:
103
103
  Process.HANDLERS = {}
104
- for ep in pkg_resources.iter_entry_points(group="experimaestro.process"):
104
+ for ep in entry_points(group="experimaestro.process"):
105
105
  logging.debug("Adding process handler for type %s", ep.name)
106
106
  handler = ep.load()
107
107
  Process.HANDLERS[ep.name] = handler
@@ -3,16 +3,10 @@
3
3
  from typing import Optional, TypeVar, TYPE_CHECKING, Callable, Any
4
4
  from experimaestro.typingutils import get_optional
5
5
  from pathlib import Path
6
- import sys
6
+ from typing import Annotated
7
7
 
8
8
  if TYPE_CHECKING:
9
- from typing_extensions import Annotated
10
9
  import experimaestro.core.types
11
- else:
12
- if sys.version_info.major == 3 and sys.version_info.minor < 9:
13
- from typing_extensions import Annotated
14
- else:
15
- from typing import Annotated
16
10
 
17
11
 
18
12
  class Argument:
@@ -13,10 +13,7 @@ from enum import Enum
13
13
  import ast
14
14
  import textwrap
15
15
 
16
- if sys.version_info.major == 3 and sys.version_info.minor < 9:
17
- from typing_extensions import _AnnotatedAlias, get_type_hints
18
- else:
19
- from typing import _AnnotatedAlias, get_type_hints
16
+ from typing import _AnnotatedAlias, get_type_hints
20
17
 
21
18
  if typing.TYPE_CHECKING:
22
19
  from experimaestro.scheduler.base import Job
@@ -6,10 +6,10 @@ from typing import ClassVar, Dict, Optional, Set, Type, Union
6
6
  from pathlib import Path
7
7
  import typing
8
8
  from omegaconf import DictConfig, OmegaConf, SCMode
9
- import pkg_resources
10
9
  from experimaestro.utils import logger
11
10
  from .base import ConnectorConfiguration, TokenConfiguration
12
11
  from .specs import HostRequirement, RequirementUnion
12
+ from importlib.metadata import entry_points
13
13
 
14
14
  if typing.TYPE_CHECKING:
15
15
  from experimaestro.launchers import Launcher
@@ -59,9 +59,9 @@ class LauncherRegistry:
59
59
  ).expanduser()
60
60
 
61
61
  if LauncherRegistry.CURRENT_CONFIG_DIR not in LauncherRegistry.INSTANCES:
62
- LauncherRegistry.INSTANCES[
63
- LauncherRegistry.CURRENT_CONFIG_DIR
64
- ] = LauncherRegistry(LauncherRegistry.CURRENT_CONFIG_DIR)
62
+ LauncherRegistry.INSTANCES[LauncherRegistry.CURRENT_CONFIG_DIR] = (
63
+ LauncherRegistry(LauncherRegistry.CURRENT_CONFIG_DIR)
64
+ )
65
65
 
66
66
  return LauncherRegistry.INSTANCES[LauncherRegistry.CURRENT_CONFIG_DIR]
67
67
 
@@ -75,10 +75,10 @@ class LauncherRegistry:
75
75
  self.find_launcher_fn = None
76
76
 
77
77
  # Use entry points for connectors and launchers
78
- for entry_point in pkg_resources.iter_entry_points("experimaestro.connectors"):
78
+ for entry_point in entry_points(group="experimaestro.connectors"):
79
79
  entry_point.load().init_registry(self)
80
80
 
81
- for entry_point in pkg_resources.iter_entry_points("experimaestro.tokens"):
81
+ for entry_point in entry_points(group="experimaestro.tokens"):
82
82
  entry_point.load().init_registry(self)
83
83
 
84
84
  # Register the find launcher function if it exists
@@ -20,7 +20,7 @@ from experimaestro.launcherfinder.registry import (
20
20
  from experimaestro.utils import ThreadingCondition
21
21
  from experimaestro.tests.connectors.utils import OutputCaptureHandler
22
22
  from experimaestro.utils.asyncio import asyncThreadcheck
23
- from experimaestro.compat import cached_property
23
+ from functools import cached_property
24
24
  from experimaestro.launchers import Launcher
25
25
  from experimaestro.scriptbuilder import PythonScriptBuilder
26
26
  from experimaestro.connectors import (
@@ -992,9 +992,7 @@ class experiment:
992
992
  self.server.start()
993
993
 
994
994
  self.workspace.__enter__()
995
- (self.workspace.path / ".__experimaestro__").touch()
996
995
 
997
- global SIGNAL_HANDLER
998
996
  # Number of unfinished jobs
999
997
  self.unfinishedJobs = 0
1000
998
  self.taskOutputQueueSize = 0
@@ -2,10 +2,14 @@ from collections import ChainMap
2
2
  from enum import Enum
3
3
  from functools import cached_property
4
4
  from pathlib import Path
5
- from typing import Iterator, Optional
5
+ from typing import Optional
6
6
  from experimaestro.settings import WorkspaceSettings, Settings
7
7
 
8
8
 
9
+ # Current workspace version
10
+ WORKSPACE_VERSION = 0
11
+
12
+
9
13
  class RunMode(str, Enum):
10
14
  NORMAL = "normal"
11
15
  """Normal run"""
@@ -54,6 +58,45 @@ class Workspace:
54
58
  self.env = ChainMap({}, workspace_settings.env, settings.env)
55
59
 
56
60
  def __enter__(self):
61
+ # Check and update workspace version
62
+ version_file = self.path / ".__experimaestro__"
63
+
64
+ if version_file.exists():
65
+ # Read existing version
66
+ content = version_file.read_text().strip()
67
+ if content == "":
68
+ # Empty file = v0
69
+ workspace_version = 0
70
+ else:
71
+ try:
72
+ workspace_version = int(content)
73
+ except ValueError:
74
+ raise RuntimeError(
75
+ f"Invalid workspace version file at {version_file}: "
76
+ f"expected integer, got '{content}'"
77
+ )
78
+
79
+ # Check if workspace version is supported
80
+ if workspace_version > WORKSPACE_VERSION:
81
+ raise RuntimeError(
82
+ f"Workspace version {workspace_version} is not supported by "
83
+ f"this version of experimaestro (supports up to version "
84
+ f"{WORKSPACE_VERSION}). Please upgrade experimaestro."
85
+ )
86
+ if workspace_version < WORKSPACE_VERSION:
87
+ raise RuntimeError(
88
+ f"Workspace version {workspace_version} is not supported by "
89
+ "this version of experimaestro (please upgrade the experimaestro "
90
+ "workspace)"
91
+ )
92
+ else:
93
+ # New workspace - create the file
94
+ workspace_version = WORKSPACE_VERSION
95
+
96
+ # Write current version to file (update empty v0 workspaces)
97
+ if not version_file.exists() or version_file.read_text().strip() == "":
98
+ version_file.write_text(str(WORKSPACE_VERSION))
99
+
57
100
  self.old_workspace = Workspace.CURRENT
58
101
  Workspace.CURRENT = self
59
102
 
@@ -5,7 +5,7 @@ import platform
5
5
  import socket
6
6
  import uuid
7
7
  from experimaestro.scheduler.base import Job
8
- import pkg_resources
8
+ from importlib.metadata import files
9
9
  import http
10
10
  import threading
11
11
  from typing import Optional, Tuple
@@ -143,7 +143,7 @@ def proxy_response(base_url: str, request: Request, path: str):
143
143
  return flask_response
144
144
 
145
145
 
146
- def start_app(server: "Server"):
146
+ def start_app(server: "Server"): # noqa: C901
147
147
  logging.debug("Starting Flask server...")
148
148
  app = Flask("experimaestro")
149
149
 
@@ -256,10 +256,16 @@ def start_app(server: "Server"):
256
256
 
257
257
  datapath = "data/%s" % path
258
258
  logging.debug("Looking for %s", datapath)
259
- if pkg_resources.resource_exists("experimaestro.server", datapath):
260
- mimetype = MIMETYPES[datapath.rsplit(".", 1)[1]]
261
- content = pkg_resources.resource_string("experimaestro.server", datapath)
262
- return Response(content, mimetype=mimetype)
259
+ try:
260
+ package_files = files("experimaestro.server")
261
+ resource_file = package_files / datapath
262
+ if resource_file.is_file():
263
+ mimetype = MIMETYPES[datapath.rsplit(".", 1)[1]]
264
+ content = resource_file.read_bytes()
265
+ return Response(content, mimetype=mimetype)
266
+ except (FileNotFoundError, KeyError):
267
+ pass
268
+
263
269
  return Response("Page not found", status=404)
264
270
 
265
271
  # Start the app
@@ -5,7 +5,6 @@ Test annotation handling for configurations and tasks
5
5
 
6
6
  # Annotation specific tests
7
7
 
8
- import sys
9
8
  from pathlib import Path
10
9
  from typing import Dict, Optional, List
11
10
  from experimaestro.core.context import SerializationContext
@@ -336,6 +335,4 @@ def test_help():
336
335
  assert xpmtype.description.strip() == "Long description of A."
337
336
  assert xpmtype.arguments["y"].help == "Parameter y"
338
337
 
339
- # Only python >= 3.9
340
- if sys.version_info.major == 3 and sys.version_info.minor > 8:
341
- assert xpmtype.arguments["x"].help == "Parameter x"
338
+ assert xpmtype.arguments["x"].help == "Parameter x"
@@ -3,7 +3,7 @@ from os import PathLike
3
3
  from pathlib import Path
4
4
  from typing import Union
5
5
  from importlib import resources
6
- from experimaestro.compat import cached_property
6
+ from functools import cached_property
7
7
 
8
8
 
9
9
  class ResourcePathWrapper(PathLike):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: experimaestro
3
- Version: 1.15.2
3
+ Version: 1.16.0
4
4
  Summary: "Experimaestro is a computer science experiment manager"
5
5
  License: GPL-3
6
6
  License-File: LICENSE
@@ -2,17 +2,16 @@ experimaestro/__init__.py,sha256=XCSuw7ozZZxL9ugnkIhqAaG7CQ6dE9NeSiDJ93QFH_I,164
2
2
  experimaestro/__main__.py,sha256=Dv9lFl03yt1dswd0Xb9NIJRgHpA5_IwH4RfQPEHyFz0,158
3
3
  experimaestro/annotations.py,sha256=wyVmPlkXuoT6IxJ-ti8bFo6HxhGY1BYBxM5-pib6shU,8773
4
4
  experimaestro/checkers.py,sha256=ZCMbnE_GFC5compWjt-fuHhPImi9fCPjImF8Ow9NqK8,696
5
- experimaestro/cli/__init__.py,sha256=mzc-qqTFtZnFwCQl7IiwlYXEx08kLGwdntWayCerZ6E,9610
6
- experimaestro/cli/filter.py,sha256=bINAF-O7CwJ2u3T6xG_Q_niqDbPeoEASyYLuCeNlbFw,6313
5
+ experimaestro/cli/__init__.py,sha256=NcALMvzZeSR1JMcllS7y9gl2BvIBxXM64f-ipVCx8No,9620
6
+ experimaestro/cli/filter.py,sha256=Y_ykQ0KcU7HeW7E-U_mtpkyMAZtO3EEOHxSy9tlhu2k,6302
7
7
  experimaestro/cli/jobs.py,sha256=BnejUnhKAgMBVgwANfQYj5mLzknXVohveg7NpovNZ8o,7925
8
8
  experimaestro/click.py,sha256=6BkeQHEgcxaxzq3xEvEEzwzuBj5-dkfrpOGikuA8L00,1377
9
9
  experimaestro/commandline.py,sha256=MJIJcfppGCjNA8ozxXUzbUSeDOlTExuzhxryGx3_lIo,9314
10
- experimaestro/compat.py,sha256=dQqE2ZNHLM2wtdfp7fBRYMfC33qNehVf9J6FGRBUQhs,171
11
- experimaestro/connectors/__init__.py,sha256=UKhDU3uv9jFH37oUb0JiejrekA85xtEirn79pA7DFhI,6125
10
+ experimaestro/connectors/__init__.py,sha256=_8jETUTM3Ecdm8azNrxCSCXyXWso0mwDFnTrcNV3a4w,6129
12
11
  experimaestro/connectors/local.py,sha256=lCGIubqmUJZ1glLtLRXOgakTMfEaEmFtNkEcw9qV5vw,6143
13
12
  experimaestro/connectors/ssh.py,sha256=5giqvv1y0QQKF-GI0IFUzI_Z5H8Bj9EuL_Szpvk899Q,8600
14
13
  experimaestro/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- experimaestro/core/arguments.py,sha256=jlK2_EILKLblLSomUDjlGmR-_xq3rAZPgAwbUjU4boc,6710
14
+ experimaestro/core/arguments.py,sha256=ouEyEyOIneKTKD1nSkHjQkbtiTXNSC8lHqCtB6ERnd8,6516
16
15
  experimaestro/core/callbacks.py,sha256=59JfeUgWcCCdIQ3pvh-xNnoRp9BX8f4iOAkgm16wBzE,1660
17
16
  experimaestro/core/context.py,sha256=1tLmX7WcgEKSbGw77vfziTzS8KNsoZJ02JBWMBCqqOk,2606
18
17
  experimaestro/core/identifier.py,sha256=5r2F425yX7Sfeub3EJZCs2Q4Qggifgi4uxMGcpI-ex0,10473
@@ -23,7 +22,7 @@ experimaestro/core/objects/config_walk.py,sha256=SYBrGuT7HV12no9mQd1HjnebiyygHyO
23
22
  experimaestro/core/objects.pyi,sha256=Q1tq4F8LrExPm00E-P5aaygxMvViYZqhHvByo_TTZRE,6315
24
23
  experimaestro/core/serialization.py,sha256=CSPEwOzlDsgAz6V2og-TgyU0RXDtzt_nXaoXFZleDZE,5775
25
24
  experimaestro/core/serializers.py,sha256=iOBuASEgD8dRKPnL16iOLBsM0GHChCJgjBd7LixFui4,919
26
- experimaestro/core/types.py,sha256=AH3ni1nIKGTeRmc7ECL6GH_dYqiuZp_mAN4E-JqdqnY,21741
25
+ experimaestro/core/types.py,sha256=7sHDPmWQRZZBDtdqShxrIXkJiQM9Z37gLRNYFQGSMSo,21602
27
26
  experimaestro/core/utils.py,sha256=JfC3qGUS9b6FUHc2VxIYUI9ysNpXSQ1LjOBkjfZ8n7o,495
28
27
  experimaestro/exceptions.py,sha256=cUy83WHM3GeynxmMk6QRr5xsnpqUAdAoc-m3KQVrE2o,44
29
28
  experimaestro/experiments/__init__.py,sha256=GcpDUIbCvhnv6rxFdAp4wTffCVNTv-InY6fbQAlTy-o,159
@@ -35,13 +34,13 @@ experimaestro/ipc.py,sha256=Xn3tYME83jLEB0nFak3DwEIhpL5IRZpCl3jirBF_jl4,1570
35
34
  experimaestro/launcherfinder/__init__.py,sha256=qRUDyv3B9UsAM8Q31mRrZrTZox0AptwdmOY4f2K-TUo,279
36
35
  experimaestro/launcherfinder/base.py,sha256=q47SsF_cXdo5O6ZhFKn5385WVFcx8Wd-BcEpd6tRpbs,515
37
36
  experimaestro/launcherfinder/parser.py,sha256=MIHhjs2sTVxLHLcc1CgFid9XxhInXker8QdA-GBA-Bk,2364
38
- experimaestro/launcherfinder/registry.py,sha256=F16A7SE_CgzaTBC-LBlurbthTDvYUa5iyjJftkDNN4M,6420
37
+ experimaestro/launcherfinder/registry.py,sha256=dUsGtSbojUZKt_gwB4xBOQSMhJAQ51gEkVSu8_6CzPo,6419
39
38
  experimaestro/launcherfinder/specs.py,sha256=eQC2pwAnvq7kF2xmAfHpg_Wx6_lH6YMf3ZCDwqatjKk,7898
40
39
  experimaestro/launchers/__init__.py,sha256=lXn544sgJExr6uirILWzAXu_IfmfyqFZOt4OzRnjHXg,2525
41
40
  experimaestro/launchers/direct.py,sha256=JZh6WOPnO6ED_xlOs8pL4MRFmnRhmXzpVxTl-ByaD2A,258
42
41
  experimaestro/launchers/oar.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
42
  experimaestro/launchers/slurm/__init__.py,sha256=R1Zwd4phZaXV8FwCYhzfB44n0V4cf-hBQzOc6NkFQ0s,41
44
- experimaestro/launchers/slurm/base.py,sha256=2CPNJeTNuwPOjqgmdkZ3MfdZbKQTIwlJtu_JL-IClg8,15753
43
+ experimaestro/launchers/slurm/base.py,sha256=wbSMzbQk3pfOQWf4HSAkYtMo2TZklLEE3jev1gGvJFs,15742
45
44
  experimaestro/locking.py,sha256=hPT-LuDGZTijpbme8O0kEoB9a3WjdVzI2h31OT44UxE,1477
46
45
  experimaestro/mkdocs/__init__.py,sha256=L9UDM7vOrRZl41zXTBOaHKSINEEsbmxwjIMIGESmLfU,46
47
46
  experimaestro/mkdocs/annotations.py,sha256=qpDw8lzrxpsOShXcpcP_LAeR3UhiIXAybG8UvS64-OU,263
@@ -54,14 +53,14 @@ experimaestro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
53
  experimaestro/rpyc.py,sha256=ZRKol-3tVoeoUITLNFenLF4dhWBLW_FvSV_GvsypmeI,3605
55
54
  experimaestro/run.py,sha256=_szMzKn-67ulT6Wy21dzhB1g6_fiL379JnBC0zJqpIY,5332
56
55
  experimaestro/scheduler/__init__.py,sha256=ERmmOxz_9mUkIuccNbzUa5Y6gVLLVDdyc4cCxbCCUbY,20
57
- experimaestro/scheduler/base.py,sha256=294a_29UtsSfoW4NpL4_6mvDyDslG0qDXGmVkcGRUDA,35829
56
+ experimaestro/scheduler/base.py,sha256=gkwFPCNKQDsEmYtvOwaczf9HIP7SHHuMuJs8_PnsapM,35738
58
57
  experimaestro/scheduler/dependencies.py,sha256=n9XegwrmjayOIxt3xhuTEBVEBGSq4oeVdzz-FviDGXo,1994
59
58
  experimaestro/scheduler/dynamic_outputs.py,sha256=yYPL98I0nSgDjlE3Sk9dtvovh2PZ6rUDnKjDNnAg1dc,5732
60
59
  experimaestro/scheduler/services.py,sha256=aCKkNZMULlceabqf-kOs_-C7KPINnjU3Q-I00o5x6iY,2189
61
60
  experimaestro/scheduler/state.py,sha256=szTgnI_hAVqU2OWrrIXsZrO3VsrJlHryXUU0r95w_sw,2367
62
- experimaestro/scheduler/workspace.py,sha256=KNdxPBwUk7gO8h2utMCrlIVKB-f2Ylqg_IxLc4okp_8,2320
61
+ experimaestro/scheduler/workspace.py,sha256=S4Nal-RicYheWxHMrLC22LOB6csZDNHWUBz1oXOg1Qs,4048
63
62
  experimaestro/scriptbuilder.py,sha256=6GKUkgixLqSEy41sNr-_HNcrjKb8uxaoQ65DywRYsC0,5027
64
- experimaestro/server/__init__.py,sha256=F2bzLf2q29Haj2OIbPA26r5WVbaipBNylIozg-As758,10854
63
+ experimaestro/server/__init__.py,sha256=vN0Z6sgYXMhYAn1OZdoRkaEwiHjvySuXSIxDpi-ONE4,11011
65
64
  experimaestro/server/data/0c35d18bf06992036b69.woff2,sha256=gmX2R4Y5fWuDLRygqv3xSa2E5ydZ__qfcnLpGg-wFdE,128352
66
65
  experimaestro/server/data/1815e00441357e01619e.ttf,sha256=gIRDrmyCBDla3YVD2oqQpguTdvsPh-2OjqN9EJWW2AU,210792
67
66
  experimaestro/server/data/219aa9140e099e6c72ed.woff2,sha256=0xv7gdVueQ4Nni-gC4Pfj3FZ-QYxFM3AFIWbHUg5Vsg,135984
@@ -126,7 +125,7 @@ experimaestro/tests/test_identifier.py,sha256=REFB9RGyVlSdAPMpmvJ9a0WbAoe6ZTR1xl
126
125
  experimaestro/tests/test_instance.py,sha256=xLdSNVo_vAEaOWmjik1tAOYgyOkJPbmnwopyuDEQm1A,1147
127
126
  experimaestro/tests/test_objects.py,sha256=zycxjvWuJAbPR8-q2T3zuBY9xfmlhf1YvtOcrImHxnc,2431
128
127
  experimaestro/tests/test_outputs.py,sha256=DYzPk5TT_yLumy8SsQbl-S66ivVxJ-ERFrZ68KQZ4KU,781
129
- experimaestro/tests/test_param.py,sha256=7BltCUm9uhtEupJZ-QSaj7MxuXoUl73NjE8NfzJD5BA,7290
128
+ experimaestro/tests/test_param.py,sha256=vPfPd9l-Id9EqLmd0-XklvTRje1hHrkIdLIfHKbXImE,7183
130
129
  experimaestro/tests/test_progress.py,sha256=wtIGQzlV3ldd_wMng11LinVESchW-1J954mCJNlG28E,7580
131
130
  experimaestro/tests/test_serializers.py,sha256=dQkiuvHAQ1g-SCRCfOy977nQMWR7CFuBUud65N_vfiI,1248
132
131
  experimaestro/tests/test_snippets.py,sha256=rojnyDjtmAMnSuDUj6Bv9XEgdP8oQf2nVc132JF8vsM,3081
@@ -149,11 +148,11 @@ experimaestro/utils/asyncio.py,sha256=9r_vFQs6T6tqmymC_DbHVFhY9YVRO6X48uEuyL_ugP
149
148
  experimaestro/utils/jobs.py,sha256=42FAdKcn_v_-M6hcQZPUBr9kbDt1eVsk3a4E8Gc4eu8,2394
150
149
  experimaestro/utils/jupyter.py,sha256=JcEo2yQK7x3Cr1tNl5FqGMZOICxCv9DwMvL5xsWdQPk,2183
151
150
  experimaestro/utils/multiprocessing.py,sha256=am3DkHP_kmWbpynbck2c9QystCUtPBoSAC0ViBVzndU,1275
152
- experimaestro/utils/resources.py,sha256=j-nvsTFwmgENMoVGOD2Ap-UD3WU85WkI0IgeSszMCX4,1328
151
+ experimaestro/utils/resources.py,sha256=I0UPGMhQ_bttWt5JJLs1r-CmQsCHwtbmYjUN8JJLFKg,1317
153
152
  experimaestro/utils/settings.py,sha256=jpFMqF0DLL4_P1xGal0zVR5cOrdD8O0Y2IOYvnRgN3k,793
154
153
  experimaestro/xpmutils.py,sha256=S21eMbDYsHfvmZ1HmKpq5Pz5O-1HnCLYxKbyTBbASyQ,638
155
- experimaestro-1.15.2.dist-info/METADATA,sha256=lDwMv32GlAuuL-qMEkBdoceHkk4coJNjYt7z44hqKHE,5705
156
- experimaestro-1.15.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
157
- experimaestro-1.15.2.dist-info/entry_points.txt,sha256=TppTNiz5qm5xm1fhAcdLKdCLMrlL-eQggtCrCI00D9c,446
158
- experimaestro-1.15.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
159
- experimaestro-1.15.2.dist-info/RECORD,,
154
+ experimaestro-1.16.0.dist-info/METADATA,sha256=qxLrpuKm5vBrGrKsNFT7eneNLw_SzEUkrL-6mha7e1Y,5705
155
+ experimaestro-1.16.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
156
+ experimaestro-1.16.0.dist-info/entry_points.txt,sha256=TppTNiz5qm5xm1fhAcdLKdCLMrlL-eQggtCrCI00D9c,446
157
+ experimaestro-1.16.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
158
+ experimaestro-1.16.0.dist-info/RECORD,,
experimaestro/compat.py DELETED
@@ -1,6 +0,0 @@
1
- import sys
2
-
3
- if sys.version_info.major == 3 and sys.version_info.minor < 9:
4
- from cached_property import cached_property
5
- else:
6
- from functools import cached_property