tests/testthat/test-finalize.R

test_that("py_finalize() works", {
  # make sure that on R session termination, Python finalizers are run.

  file <- tempfile()

  callr::r(function(file) {
    library(reticulate)

    py_run_string(sprintf("
import weakref

class Foo:
  def __init__(self):
    weakref.finalize(self, self.on_finalize)

  def on_finalize(self):
    with open('%s', 'a') as f:
      f.write('Foo.finalize ran\\n')

import atexit
def on_exit():
  with open('%s', 'a') as f:
    f.write('on_exit finalizer ran\\n')

atexit.register(on_exit)
obj = Foo()
", file, file))

    invisible()
  }, list(file))

  x <- readLines(file)

  # check that the finalizers ran
  expect_contains(x, "Foo.finalize ran")
  expect_contains(x, "on_exit finalizer ran")
})

Try the reticulate package in your browser

Any scripts or data that you put into this service are public.

reticulate documentation built on Sept. 11, 2024, 8:31 p.m.