Skip to content

Commit d804ec3

Browse files
WIP STATE
1 parent d46b6a4 commit d804ec3

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

src/execnet/_dictimport.py

+26-4
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,48 @@
44

55
import base64
66
import json
7+
import os
78
import sys
89
import types
910
import zlib
1011
from importlib import import_module
1112
from importlib.abc import Loader
1213
from importlib.metadata import Distribution
1314
from importlib.metadata import DistributionFinder
14-
from typing import Any
1515
from typing import IO
16+
from typing import TYPE_CHECKING
17+
from typing import Any
1618
from typing import Iterable
1719
from typing import Sequence
1820

21+
if TYPE_CHECKING:
22+
pass
23+
24+
25+
class DictDistribution(Distribution):
26+
data: dict[str, str]
27+
28+
def __init__(self, data: dict[str, str]) -> None:
29+
self.data = data
30+
31+
def read_text(self, filename):
32+
return self.data[filename]
33+
34+
def locate_file(self, path: str | os.PathLike[str]) -> os.PathLike[str]:
35+
raise FileNotFoundError(path)
36+
1937

2038
class DictImporter(DistributionFinder, Loader):
21-
def __init__(self, sources: dict[str, str]):
39+
"""a limited loader/importer for distributins send via json-lines"""
40+
41+
def __init__(self, sources: dict[str, str], distribution: DictDistribution):
2242
self.sources = sources
43+
self.distribution = distribution
2344

2445
def find_distributions(
2546
self, context: DistributionFinder.Context = DistributionFinder.Context()
2647
) -> Iterable[Distribution]:
27-
return []
48+
return [self.distribution]
2849

2950
def find_module(
3051
self, fullname: str, path: Sequence[str | bytes] | None = None
@@ -64,11 +85,12 @@ def get_source(self, name: str) -> str | None:
6485

6586
def bootstrap(
6687
modules: dict[str, str],
88+
distribution: dict[str, str],
6789
entry: str,
6890
args: dict[str, Any],
6991
set_argv: list[str] | None,
7092
) -> None:
71-
importer = DictImporter(modules)
93+
importer = DictImporter(modules, distribution=DictDistribution(distribution))
7294
sys.meta_path.append(importer)
7395
module, attr = entry.split(":")
7496
loaded_module = import_module(module)

0 commit comments

Comments
 (0)