diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_recurrence_pattern.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_recurrence_pattern.py
index 0ae92e66aa..278016bde0 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_recurrence_pattern.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/assign_recurrence_pattern.py
@@ -16,10 +16,13 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
import ifcopenshell
+import ifcopenshell.util.sequence
def assign_recurrence_pattern(
- file: ifcopenshell.file, parent: ifcopenshell.entity_instance, recurrence_type: str = "WEEKLY"
+ file: ifcopenshell.file,
+ parent: ifcopenshell.entity_instance,
+ recurrence_type: ifcopenshell.util.sequence.RECURRENCE_TYPE = "WEEKLY",
) -> ifcopenshell.entity_instance:
"""Define a time to recur at a particular interval
diff --git a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_time.py b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_time.py
index f6914fefbd..c3cadfe42a 100644
--- a/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_time.py
+++ b/src/ifcopenshell-python/ifcopenshell/api/sequence/remove_work_time.py
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see .
import ifcopenshell
+import ifcopenshell.api.sequence
def remove_work_time(file: ifcopenshell.file, work_time: ifcopenshell.entity_instance) -> None:
@@ -40,6 +41,10 @@ def remove_work_time(file: ifcopenshell.file, work_time: ifcopenshell.entity_ins
# And remove it immediately
ifcopenshell.api.run("sequence.remove_work_time", model, work_time=work_time)
"""
- settings = {"work_time": work_time}
- file.remove(settings["work_time"])
+ # Currently in API recurrence patterns are created during assignment
+ # and removed during unassignment, so they are never reused.
+ if recurrence_pattern := work_time.RecurrencePattern:
+ ifcopenshell.api.sequence.unassign_recurrence_pattern(file, recurrence_pattern)
+
+ file.remove(work_time)
diff --git a/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py
new file mode 100644
index 0000000000..d0318c5c7a
--- /dev/null
+++ b/src/ifcopenshell-python/test/api/sequence/test_remove_work_time.py
@@ -0,0 +1,41 @@
+# IfcOpenShell - IFC toolkit and geometry engine
+# Copyright (C) 2021 Dion Moult
+#
+# This file is part of IfcOpenShell.
+#
+# IfcOpenShell is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# IfcOpenShell is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with IfcOpenShell. If not, see .
+
+import pytest
+import test.bootstrap
+import ifcopenshell.api
+import ifcopenshell.api.sequence
+
+
+# NOTE: sequence module features relies on entities introduced in IFC4
+# therefore no IFC2X3 tests
+class TestRemoveWorkTime(test.bootstrap.IFC4):
+ def test_remove_work_time(self):
+ self.file.create_entity("IfcProject")
+ work_calendar = ifcopenshell.api.sequence.add_work_calendar(self.file)
+ work_time = ifcopenshell.api.sequence.add_work_time(self.file, work_calendar)
+ ifcopenshell.api.sequence.assign_recurrence_pattern(self.file, work_time)
+ assert len(self.file.by_type("IfcRecurrencePattern")) == 1
+
+ ifcopenshell.api.sequence.remove_work_time(self.file, work_time)
+ assert len(self.file.by_type("IfcWorkTime")) == 0
+ assert len(self.file.by_type("IfcRecurrencePattern")) == 0
+
+
+class TestRemoveWorkTimeIFC4X3(test.bootstrap.IFC4X3, TestRemoveWorkTime):
+ pass