Skip to content

Commit 1afbe09

Browse files
author
Christopher Doris
committed
tweak python meta
1 parent 7c1baed commit 1afbe09

File tree

3 files changed

+14
-30
lines changed

3 files changed

+14
-30
lines changed

juliacall/deps.py

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import os
23
import sys
34

@@ -8,41 +9,23 @@
89

910
### META
1011

12+
META_VERSION = 1 # increment whenever the format changes
13+
1114
def load_meta():
12-
import json, os.path
1315
fn = CONFIG['meta']
1416
if os.path.exists(fn):
1517
with open(fn) as fp:
16-
return json.load(fp)
17-
else:
18-
return {}
18+
meta = json.load(fp)
19+
if meta.get('meta_version') == META_VERSION:
20+
return meta
1921

2022
def save_meta(meta):
21-
import json
23+
assert isinstance(meta, dict)
24+
assert meta.get('meta_version') == META_VERSION
2225
fn = CONFIG['meta']
2326
with open(fn, 'w') as fp:
2427
json.dump(meta, fp)
2528

26-
def get_meta(*keys):
27-
meta = load_meta()
28-
for key in keys:
29-
if key in meta:
30-
meta = meta[key]
31-
else:
32-
return None
33-
return meta
34-
35-
def set_meta(*args):
36-
if len(args) < 2:
37-
raise TypeError('set_meta requires at least two arguments')
38-
keys = args[:-1]
39-
value = args[-1]
40-
meta2 = meta = load_meta()
41-
for key in keys[:-1]:
42-
meta2 = meta2.setdefault(key, {})
43-
meta2[keys[-1]] = value
44-
save_meta(meta)
45-
4629
### RESOLVE
4730

4831
class PackageSpec:
@@ -83,7 +66,7 @@ def dict(self):
8366

8467
def can_skip_resolve():
8568
# resolve if we haven't resolved before
86-
deps = get_meta("pydeps")
69+
deps = load_meta()
8770
if deps is None:
8871
return False
8972
# resolve whenever the version changes
@@ -240,7 +223,8 @@ def best_julia_version(compat=None, upstream=None):
240223
return max(releases, key=lambda x: jill.utils.version_utils.Version(x[0]))[0]
241224

242225
def record_resolve(pkgs):
243-
set_meta("pydeps", {
226+
save_meta({
227+
"meta_version": META_VERSION,
244228
"version": __version__,
245229
"dev": CONFIG["dev"],
246230
"jlversion": CONFIG.get("exever"),

juliacall/init.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@
129129
else:
130130
pkgs.append(deps.PackageSpec(name="PythonCall", uuid="6099a3de-0909-46bc-b1f4-468b9a2dfc0d", compat="= "+__version__))
131131
# check if pkgs has changed at all
132-
prev_pkgs = deps.get_meta("pydeps", "pkgs")
132+
meta = deps.load_meta()
133+
prev_pkgs = None if meta is None else meta.get('pkgs')
133134
if prev_pkgs is not None and sorted(prev_pkgs, key=lambda p: p['name']) == sorted([p.dict() for p in pkgs], key=lambda p: p['name']):
134135
install = ''
135136
else:

src/juliacall.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,14 @@ function init_juliacall()
1010
if C.CTX.is_embedded
1111
# in this case, Julia is being embedded into Python by juliacall, which already exists
1212
pycopy!(jl, sys.modules["juliacall"])
13-
@assert pystr_asstring(jl.CONFIG["meta"]) == Deps.meta_file()
1413
@assert pystr_asstring(jl.__version__) == string(VERSION)
1514
elseif "juliacall" in sys.modules
1615
# otherwise, Python is being embedded into Julia by PythonCall, so should not exist
1716
error("'juliacall' module already exists")
1817
else
1918
# create the juliacall module and save it in sys.modules
2019
pycopy!(jl, pytype(sys)("juliacall"))
21-
jl.CONFIG = pydict(embedded=true, meta=Deps.meta_file())
20+
jl.CONFIG = pydict(embedded=true)
2221
jl.__version__ = string(VERSION)
2322
jl.__path__ = pylist((joinpath(dirname(dirname(pathof(PythonCall))), "juliacall"),))
2423
sys.modules["juliacall"] = jl

0 commit comments

Comments
 (0)