Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: patch changed behavior of setproperty! for modules #583

Merged
merged 15 commits into from
Jan 20, 2025
2 changes: 0 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
Serialization = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
Expand All @@ -24,7 +23,6 @@ Libdl = "1"
MacroTools = "0.5"
Markdown = "1"
Pkg = "1"
REPL = "1"
Requires = "1"
Serialization = "1"
Tables = "1"
Expand Down
4 changes: 4 additions & 0 deletions pytest/test_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ def test_issue_433():
def test_julia_gc():
from juliacall import Main as jl

if jl.seval('v"1.11.0-" <= VERSION < v"1.11.3"'):
# Seems to be a Julia bug - hopefully fixed in 1.11.3
pytest.skip("Test not yet supported on Julia 1.11+")

# We make a bunch of python objects with no reference to them,
# then call GC to try to finalize them.
# We want to make sure we don't segfault.
Expand Down
2 changes: 1 addition & 1 deletion src/Convert/rules.jl
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ for N = 0:16
end
# Tuple with N elements plus Vararg
@eval function pyconvert_rule_iterable(
::Type{Tuple{$(Ts...),Vararg{V}}},
::Type{Tuple{$(Ts...),V,Vararg{V}}},
xs::Py,
) where {$(Ts...),V}
xs = pytuple(xs)
Expand Down
4 changes: 4 additions & 0 deletions src/JlWrap/any.jl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ function pyjlany_setattr(self, k_::Py, v_::Py)
k = Symbol(pyjl_attr_py2jl(pyconvert(String, k_)))
pydel!(k_)
v = pyconvert(Any, v_)
if self isa Module && !isdefined(self, k)
# Fix for https://github.com/JuliaLang/julia/pull/54678
Base.Core.eval(self, Expr(:global, k))
end
setproperty!(self, k, v)
Py(nothing)
end
Expand Down
4 changes: 1 addition & 3 deletions test/Aqua.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
@testitem "Aqua" begin
# The unbound_args test fails on methods with signature like foo(::Type{Tuple{Vararg{V}}}) where V
# Seems like a bug.
import Aqua
Aqua.test_all(PythonCall, unbound_args = false)
Aqua.test_all(PythonCall)
end
8 changes: 6 additions & 2 deletions test/GC.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
finalize(obj)
end
end
Threads.nthreads() > 1 && @test !isempty(PythonCall.GC.QUEUE.items)
Threads.nthreads() > 1 &&
VERSION >= v"1.10.0-" &&
@test !isempty(PythonCall.GC.QUEUE.items)
PythonCall.GC.gc()
@test isempty(PythonCall.GC.QUEUE.items)
end
Expand All @@ -17,7 +19,9 @@ end
finalize(obj)
end
end
Threads.nthreads() > 1 && @test !isempty(PythonCall.GC.QUEUE.items)
Threads.nthreads() > 1 &&
VERSION >= v"1.10.0-" &&
@test !isempty(PythonCall.GC.QUEUE.items)
GC.gc()
@test isempty(PythonCall.GC.QUEUE.items)
end
4 changes: 2 additions & 2 deletions test/JlWrap.jl
Original file line number Diff line number Diff line change
Expand Up @@ -210,8 +210,8 @@
pyjl(Foo(1))._jl_display(mime = "text/plain")
end
@testset "help" begin
pyjl(Foo(1))._jl_help()
pyjl(Foo(1))._jl_help(mime = "text/plain")
@test_skip pyis(pyjl(Foo(1))._jl_help(), nothing)
@test_skip pyis(pyjl(Foo(1))._jl_help(mime = "text/plain"), nothing)
end
end

Expand Down
Loading