mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
|
|
import gc
|
||
|
|
import sys
|
||
|
|
import pytest
|
||
|
|
import pprint
|
||
|
|
import weakref
|
||
|
|
import itertools
|
||
|
|
import ifcopenshell
|
||
|
|
import ifcopenshell.api
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.parametrize(
|
||
|
|
"args",
|
||
|
|
itertools.product((0, 1), (0, 1), (0, 1), (0, 1, 2)),
|
||
|
|
)
|
||
|
|
def test_file_gc(args):
|
||
|
|
do_run_api, do_delete_ref, file_first, api = args
|
||
|
|
|
||
|
|
f = ifcopenshell.file()
|
||
|
|
if api == 0:
|
||
|
|
inst = f.createIfcPerson()
|
||
|
|
elif api in (1, 2):
|
||
|
|
inst = f.createIfcSite()
|
||
|
|
|
||
|
|
r = weakref.ref(f)
|
||
|
|
|
||
|
|
if do_run_api:
|
||
|
|
if api == 0:
|
||
|
|
ifcopenshell.api.run(
|
||
|
|
"attribute.edit_attributes",
|
||
|
|
f,
|
||
|
|
product=inst,
|
||
|
|
attributes={"FamilyName": "Bimson"},
|
||
|
|
)
|
||
|
|
elif api == 1:
|
||
|
|
ifcopenshell.api.run(
|
||
|
|
"pset.add_pset", f, product=inst, name="ePSet_MapConversion"
|
||
|
|
)
|
||
|
|
elif api == 2:
|
||
|
|
pset = f.create_entity(
|
||
|
|
"IfcPropertySet",
|
||
|
|
**{
|
||
|
|
"GlobalId": ifcopenshell.guid.new(),
|
||
|
|
"OwnerHistory": ifcopenshell.api.run(
|
||
|
|
"owner.create_owner_history", f
|
||
|
|
),
|
||
|
|
"Name": "ePSet_MapConversion",
|
||
|
|
}
|
||
|
|
)
|
||
|
|
f.create_entity(
|
||
|
|
"IfcRelDefinesByProperties",
|
||
|
|
**{
|
||
|
|
"GlobalId": ifcopenshell.guid.new(),
|
||
|
|
"OwnerHistory": ifcopenshell.api.run(
|
||
|
|
"owner.create_owner_history", f
|
||
|
|
),
|
||
|
|
"RelatedObjects": [inst],
|
||
|
|
"RelatingPropertyDefinition": pset,
|
||
|
|
}
|
||
|
|
)
|
||
|
|
del pset
|
||
|
|
|
||
|
|
if file_first:
|
||
|
|
del f
|
||
|
|
else:
|
||
|
|
del inst
|
||
|
|
|
||
|
|
# File should still exist, because we either have a direct ref
|
||
|
|
# or the instance from the file still available
|
||
|
|
assert r()
|
||
|
|
|
||
|
|
if not file_first:
|
||
|
|
del f
|
||
|
|
else:
|
||
|
|
del inst
|
||
|
|
|
||
|
|
# With both deleted we should have no longer access to the file.
|
||
|
|
assert r() is None
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
pytest.main(["-sx", __file__])
|