2018-04-26 20:22:47 +00:00
|
|
|
import tempfile, os, sys, shutil
|
2017-09-06 16:13:56 +00:00
|
|
|
import pyqtgraph as pg
|
|
|
|
import pyqtgraph.reload
|
2018-04-26 20:22:47 +00:00
|
|
|
|
|
|
|
|
2017-09-06 16:13:56 +00:00
|
|
|
pgpath = os.path.join(os.path.dirname(pg.__file__), '..')
|
|
|
|
|
|
|
|
# make temporary directory to write module code
|
2018-04-26 20:22:47 +00:00
|
|
|
path = None
|
|
|
|
|
|
|
|
def setup_module():
|
|
|
|
# make temporary directory to write module code
|
|
|
|
global path
|
|
|
|
path = tempfile.mkdtemp()
|
|
|
|
sys.path.insert(0, path)
|
|
|
|
|
|
|
|
def teardown_module():
|
|
|
|
global path
|
2017-09-06 16:13:56 +00:00
|
|
|
shutil.rmtree(path)
|
2018-04-26 20:22:47 +00:00
|
|
|
sys.path.remove(path)
|
2017-09-06 16:13:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
code = """
|
|
|
|
import sys
|
|
|
|
sys.path.append('{path}')
|
|
|
|
|
|
|
|
import pyqtgraph as pg
|
|
|
|
|
|
|
|
class C(pg.QtCore.QObject):
|
|
|
|
sig = pg.QtCore.Signal()
|
|
|
|
def fn(self):
|
|
|
|
print("{msg}")
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
2017-09-06 16:39:26 +00:00
|
|
|
def remove_cache(mod):
|
|
|
|
if os.path.isfile(mod+'c'):
|
|
|
|
os.remove(mod+'c')
|
|
|
|
cachedir = os.path.join(os.path.dirname(mod), '__pycache__')
|
|
|
|
if os.path.isdir(cachedir):
|
|
|
|
shutil.rmtree(cachedir)
|
|
|
|
|
|
|
|
|
2017-09-06 16:13:56 +00:00
|
|
|
def test_reload():
|
2018-04-26 20:22:47 +00:00
|
|
|
py3 = sys.version_info >= (3,)
|
|
|
|
|
2017-09-06 16:13:56 +00:00
|
|
|
# write a module
|
|
|
|
mod = os.path.join(path, 'reload_test.py')
|
|
|
|
open(mod, 'w').write(code.format(path=path, msg="C.fn() Version1"))
|
|
|
|
|
|
|
|
# import the new module
|
|
|
|
import reload_test
|
|
|
|
|
|
|
|
c = reload_test.C()
|
|
|
|
c.sig.connect(c.fn)
|
2018-04-26 20:22:47 +00:00
|
|
|
if py3:
|
|
|
|
v1 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, c.sig, c.fn, c.fn.__func__)
|
|
|
|
else:
|
|
|
|
v1 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, reload_test.C.fn.__func__, c.sig, c.fn, c.fn.__func__)
|
2017-09-06 16:13:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# write again and reload
|
|
|
|
open(mod, 'w').write(code.format(path=path, msg="C.fn() Version2"))
|
2017-09-06 16:39:26 +00:00
|
|
|
remove_cache(mod)
|
2017-09-06 16:13:56 +00:00
|
|
|
pg.reload.reloadAll(path, debug=True)
|
2018-04-26 20:22:47 +00:00
|
|
|
if py3:
|
|
|
|
v2 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, c.sig, c.fn, c.fn.__func__)
|
|
|
|
else:
|
|
|
|
v2 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, reload_test.C.fn.__func__, c.sig, c.fn, c.fn.__func__)
|
2017-09-06 16:13:56 +00:00
|
|
|
|
2018-04-26 20:22:47 +00:00
|
|
|
if not py3:
|
|
|
|
assert c.fn.im_class is v2[0]
|
2017-09-06 16:13:56 +00:00
|
|
|
oldcfn = pg.reload.getPreviousVersion(c.fn)
|
2017-09-06 16:39:26 +00:00
|
|
|
if oldcfn is None:
|
|
|
|
# Function did not reload; are we using pytest's assertion rewriting?
|
|
|
|
raise Exception("Function did not reload. (This can happen when using py.test"
|
2017-09-06 16:58:42 +00:00
|
|
|
" with assertion rewriting; use --assert=plain for this test.)")
|
2018-04-26 20:22:47 +00:00
|
|
|
if py3:
|
|
|
|
assert oldcfn.__func__ is v1[2]
|
|
|
|
else:
|
|
|
|
assert oldcfn.im_class is v1[0]
|
|
|
|
assert oldcfn.__func__ is v1[2].__func__
|
|
|
|
assert oldcfn.__self__ is c
|
2017-09-06 16:13:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
# write again and reload
|
|
|
|
open(mod, 'w').write(code.format(path=path, msg="C.fn() Version2"))
|
2017-09-06 16:39:26 +00:00
|
|
|
remove_cache(mod)
|
2017-09-06 16:13:56 +00:00
|
|
|
pg.reload.reloadAll(path, debug=True)
|
2018-04-26 20:22:47 +00:00
|
|
|
if py3:
|
|
|
|
v3 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, c.sig, c.fn, c.fn.__func__)
|
|
|
|
else:
|
|
|
|
v3 = (reload_test.C, reload_test.C.sig, reload_test.C.fn, reload_test.C.fn.__func__, c.sig, c.fn, c.fn.__func__)
|
2017-09-06 16:13:56 +00:00
|
|
|
|
|
|
|
#for i in range(len(old)):
|
|
|
|
#print id(old[i]), id(new1[i]), id(new2[i]), old[i], new1[i]
|
|
|
|
|
|
|
|
cfn1 = pg.reload.getPreviousVersion(c.fn)
|
|
|
|
cfn2 = pg.reload.getPreviousVersion(cfn1)
|
|
|
|
|
2018-04-26 20:22:47 +00:00
|
|
|
if py3:
|
|
|
|
assert cfn1.__func__ is v2[2]
|
|
|
|
assert cfn2.__func__ is v1[2]
|
|
|
|
else:
|
|
|
|
assert cfn1.__func__ is v2[2].__func__
|
|
|
|
assert cfn2.__func__ is v1[2].__func__
|
|
|
|
assert cfn1.im_class is v2[0]
|
|
|
|
assert cfn2.im_class is v1[0]
|
|
|
|
assert cfn1.__self__ is c
|
|
|
|
assert cfn2.__self__ is c
|
2017-09-06 16:13:56 +00:00
|
|
|
c.sig.disconnect(cfn2)
|
|
|
|
|