mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-14 03:14:23 +00:00
Replace all ifcopenshell.api.run with ifcopenshell.api static functions.
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.sequence
|
||||
|
||||
|
||||
class TestAssignProduct(test.bootstrap.IFC4):
|
||||
@@ -25,16 +25,16 @@ class TestAssignProduct(test.bootstrap.IFC4):
|
||||
wall = self.file.createIfcWall()
|
||||
task = self.file.createIfcTask()
|
||||
task2 = self.file.createIfcTask()
|
||||
ifcopenshell.api.run("sequence.assign_product", self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.sequence.assign_product(self.file, relating_product=wall, related_object=task)
|
||||
assert wall.ReferencedBy[0].RelatedObjects == (task,)
|
||||
ifcopenshell.api.run("sequence.assign_product", self.file, relating_product=wall, related_object=task2)
|
||||
ifcopenshell.api.sequence.assign_product(self.file, relating_product=wall, related_object=task2)
|
||||
assert wall.ReferencedBy[0].RelatedObjects == (task, task2)
|
||||
|
||||
def test_not_assigning_twice(self):
|
||||
wall = self.file.createIfcWall()
|
||||
task = self.file.createIfcTask()
|
||||
ifcopenshell.api.run("sequence.assign_product", self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.run("sequence.assign_product", self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.sequence.assign_product(self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.sequence.assign_product(self.file, relating_product=wall, related_object=task)
|
||||
assert wall.ReferencedBy[0].RelatedObjects == (task,)
|
||||
|
||||
|
||||
|
||||
@@ -17,74 +17,77 @@
|
||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.root
|
||||
import ifcopenshell.api.pset
|
||||
import ifcopenshell.api.sequence
|
||||
import ifcopenshell.api.resource
|
||||
|
||||
|
||||
# NOTE: sequence module features relies on entities introduced in IFC4
|
||||
# therefore no IFC2X3 tests
|
||||
class TestCalculateTaskDuration(test.bootstrap.IFC4):
|
||||
def test_calculating_the_duration_based_on_a_labour_resource_with_work_hours(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.run("resource.add_resource_time", self.file, resource=resource)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.resource.add_resource_time(self.file, resource=resource)
|
||||
resource_time.ScheduleWork = "PT48H"
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=task)
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleDuration == "P6D"
|
||||
|
||||
def test_calculating_the_duration_based_on_a_labour_resource_with_work_days(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.run("resource.add_resource_time", self.file, resource=resource)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.resource.add_resource_time(self.file, resource=resource)
|
||||
resource_time.ScheduleWork = "P3.5D"
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=task)
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleDuration == "P4D"
|
||||
|
||||
def test_calculating_a_task_duration_without_a_work_schedule_defining_workday_duration(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.run("resource.add_resource_time", self.file, resource=resource)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
task = ifcopenshell.api.sequence.add_task(self.file)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.resource.add_resource_time(self.file, resource=resource)
|
||||
resource_time.ScheduleWork = "P2D"
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=task)
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleDuration == "P2D"
|
||||
|
||||
def test_calculating_a_task_duration_with_a_custom_workday_duration(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
pset = ifcopenshell.api.run("pset.add_pset", self.file, product=schedule, name="Pset_WorkControlCommon")
|
||||
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"WorkDayDuration": "PT2H"})
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.run("resource.add_resource_time", self.file, resource=resource)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
pset = ifcopenshell.api.pset.add_pset(self.file, product=schedule, name="Pset_WorkControlCommon")
|
||||
ifcopenshell.api.pset.edit_pset(self.file, pset=pset, properties={"WorkDayDuration": "PT2H"})
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.resource.add_resource_time(self.file, resource=resource)
|
||||
resource_time.ScheduleWork = "PT48H"
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=task)
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleDuration == "P24D"
|
||||
|
||||
def test_failing_to_calculate_if_no_schedule_work_usage(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=task)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=schedule)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=task, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=task)
|
||||
assert task.TaskTime is None
|
||||
|
||||
def test_calculating_a_nested_task_duration_based_on_a_labour_resource_with_work_hours(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=schedule)
|
||||
subtask = ifcopenshell.api.run("sequence.add_task", self.file, parent_task=task)
|
||||
resource = ifcopenshell.api.run("resource.add_resource", self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.run("resource.add_resource_time", self.file, resource=resource)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=schedule)
|
||||
subtask = ifcopenshell.api.sequence.add_task(self.file, parent_task=task)
|
||||
resource = ifcopenshell.api.resource.add_resource(self.file, ifc_class="IfcLaborResource")
|
||||
resource_time = ifcopenshell.api.resource.add_resource_time(self.file, resource=resource)
|
||||
resource_time.ScheduleWork = "PT48H"
|
||||
ifcopenshell.api.run("sequence.assign_process", self.file, relating_process=subtask, related_object=resource)
|
||||
ifcopenshell.api.run("sequence.calculate_task_duration", self.file, task=subtask)
|
||||
ifcopenshell.api.sequence.assign_process(self.file, relating_process=subtask, related_object=resource)
|
||||
ifcopenshell.api.sequence.calculate_task_duration(self.file, task=subtask)
|
||||
assert subtask.TaskTime.ScheduleDuration == "P6D"
|
||||
|
||||
@@ -19,22 +19,22 @@
|
||||
import pytest
|
||||
import datetime
|
||||
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 TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
def test_doing_nothing_if_the_task_has_no_successors(self):
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file)
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime is None
|
||||
|
||||
def test_not_affecting_tasks_that_are_not_related(self):
|
||||
task = self._create_task("P1D")
|
||||
task2 = self._create_task("P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
@@ -47,7 +47,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task, task3, "FINISH_START", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task2)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task2)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "2000-01-02T09:00:00"
|
||||
@@ -62,7 +62,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
with pytest.raises(RecursionError):
|
||||
self._create_sequence(task2, task, "FINISH_START")
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
|
||||
def test_cascading_finish_to_start(self):
|
||||
task = self._create_task("P1D")
|
||||
@@ -71,7 +71,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task, task3, "FINISH_START", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "2000-01-02T09:00:00"
|
||||
@@ -86,7 +86,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task, task3, "FINISH_START", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T09:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
@@ -101,7 +101,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "FINISH_FINISH")
|
||||
self._create_sequence(task, task3, "FINISH_FINISH", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "1999-12-31T09:00:00"
|
||||
@@ -116,7 +116,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "START_START")
|
||||
self._create_sequence(task, task3, "START_START", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
@@ -131,7 +131,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "START_FINISH")
|
||||
self._create_sequence(task, task3, "START_FINISH", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "1999-12-30T09:00:00"
|
||||
@@ -146,7 +146,7 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
self._create_sequence(task, task2, "START_FINISH")
|
||||
self._create_sequence(task, task3, "START_FINISH", lag="P1D")
|
||||
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T09:00:00"
|
||||
assert task2.TaskTime.ScheduleStart == "1999-12-30T09:00:00"
|
||||
@@ -155,12 +155,11 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
assert task3.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
|
||||
def _create_task(self, duration):
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file)
|
||||
if duration == "P0D":
|
||||
task.IsMilestone = True
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=task)
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={"ScheduleStart": datetime.date(2000, 1, 1), "ScheduleDuration": duration},
|
||||
@@ -168,13 +167,11 @@ class TestCascadeSchedule(test.bootstrap.IFC4):
|
||||
return task
|
||||
|
||||
def _create_sequence(self, predecessor, successor, relationship, lag=None):
|
||||
rel = ifcopenshell.api.run(
|
||||
"sequence.assign_sequence", self.file, relating_process=predecessor, related_process=successor
|
||||
)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_sequence", self.file, rel_sequence=rel, attributes={"SequenceType": relationship}
|
||||
rel = ifcopenshell.api.sequence.assign_sequence(
|
||||
self.file, relating_process=predecessor, related_process=successor
|
||||
)
|
||||
ifcopenshell.api.sequence.edit_sequence(self.file, rel_sequence=rel, attributes={"SequenceType": relationship})
|
||||
if lag:
|
||||
ifcopenshell.api.run(
|
||||
"sequence.assign_lag_time", self.file, rel_sequence=rel, lag_value=lag, duration_type="WORKTIME"
|
||||
ifcopenshell.api.sequence.assign_lag_time(
|
||||
self.file, rel_sequence=rel, lag_value=lag, duration_type="WORKTIME"
|
||||
)
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
|
||||
import datetime
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.root
|
||||
import ifcopenshell.api.control
|
||||
import ifcopenshell.api.sequence
|
||||
|
||||
|
||||
# NOTE: IfcTaskTime was introduced in IFC4
|
||||
@@ -26,9 +28,8 @@ import ifcopenshell.api
|
||||
|
||||
class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
def test_editing_all_attributes(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -76,9 +77,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.Completion == 0.5
|
||||
|
||||
def test_editing_just_a_start_date_with_no_duration_or_finish(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -92,13 +92,12 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleDuration is None
|
||||
|
||||
def test_editing_just_a_start_date_with_no_duration_or_finish_but_with_a_calendar(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
calendar = ifcopenshell.api.run("sequence.add_work_calendar", self.file)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
calendar = ifcopenshell.api.sequence.add_work_calendar(self.file)
|
||||
task = self.file.createIfcTask()
|
||||
ifcopenshell.api.run("control.assign_control", self.file, relating_control=calendar, related_object=task)
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
ifcopenshell.api.control.assign_control(self.file, relating_control=calendar, related_object=task)
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=task)
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -112,9 +111,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleDuration is None
|
||||
|
||||
def test_schedule_finish_dates_are_auto_calculated_if_possible(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -129,9 +127,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
|
||||
def test_schedule_durations_are_auto_calculated_if_possible(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -146,9 +143,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
|
||||
def test_a_duration_takes_priority_over_start_and_finish_dates(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -164,9 +160,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
|
||||
def test_durations_can_be_specified_in_datetime_objects(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -181,9 +176,8 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
|
||||
def test_zero_durations_are_allowed(self):
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=self.file.createIfcTask())
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -198,13 +192,12 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2000-01-01T09:00:00"
|
||||
|
||||
def test_editing_a_start_date_and_duration_with_a_calendar(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
calendar = ifcopenshell.api.run("sequence.add_work_calendar", self.file)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
calendar = ifcopenshell.api.sequence.add_work_calendar(self.file)
|
||||
task = self.file.createIfcTask()
|
||||
ifcopenshell.api.run("control.assign_control", self.file, relating_control=calendar, related_object=task)
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
ifcopenshell.api.control.assign_control(self.file, relating_control=calendar, related_object=task)
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=task)
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
@@ -217,23 +210,19 @@ class TestEditTaskTime(test.bootstrap.IFC4):
|
||||
assert task_time.ScheduleFinish == "2020-01-07T17:00:00"
|
||||
assert task_time.ScheduleDuration == "P7D"
|
||||
|
||||
work_time = ifcopenshell.api.run(
|
||||
"sequence.add_work_time", self.file, work_calendar=calendar, time_type="WorkingTimes"
|
||||
work_time = ifcopenshell.api.sequence.add_work_time(self.file, work_calendar=calendar, time_type="WorkingTimes")
|
||||
pattern = ifcopenshell.api.sequence.assign_recurrence_pattern(
|
||||
self.file, parent=work_time, recurrence_type="WEEKLY"
|
||||
)
|
||||
pattern = ifcopenshell.api.run(
|
||||
"sequence.assign_recurrence_pattern", self.file, parent=work_time, recurrence_type="WEEKLY"
|
||||
)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_recurrence_pattern",
|
||||
ifcopenshell.api.sequence.edit_recurrence_pattern(
|
||||
self.file,
|
||||
recurrence_pattern=pattern,
|
||||
attributes={"WeekdayComponent": [1, 2, 3, 4, 5]},
|
||||
)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.add_time_period", self.file, recurrence_pattern=pattern, start_time="09:00", end_time="17:00"
|
||||
ifcopenshell.api.sequence.add_time_period(
|
||||
self.file, recurrence_pattern=pattern, start_time="09:00", end_time="17:00"
|
||||
)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
import datetime
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.sequence
|
||||
|
||||
|
||||
# NOTE: IfcWorkTime was introduced in IFC4
|
||||
@@ -34,7 +34,7 @@ class TestEditWorkTime(test.bootstrap.IFC4):
|
||||
"Start": datetime.datetime(2020, 1, 1),
|
||||
"Finish": datetime.datetime(2020, 2, 1),
|
||||
}
|
||||
ifcopenshell.api.run("sequence.edit_work_time", self.file, work_time=work_time, attributes=attributes)
|
||||
ifcopenshell.api.sequence.edit_work_time(self.file, work_time=work_time, attributes=attributes)
|
||||
assert work_time.Name == attributes["Name"]
|
||||
assert work_time.DataOrigin == attributes["DataOrigin"]
|
||||
assert work_time.UserDefinedDataOrigin == attributes["UserDefinedDataOrigin"]
|
||||
@@ -55,7 +55,7 @@ class TestEditWorkTimeIFC4X3(test.bootstrap.IFC4X3):
|
||||
"StartDate": datetime.datetime(2020, 1, 1),
|
||||
"FinishDate": datetime.datetime(2020, 2, 1),
|
||||
}
|
||||
ifcopenshell.api.run("sequence.edit_work_time", self.file, work_time=work_time, attributes=attributes)
|
||||
ifcopenshell.api.sequence.edit_work_time(self.file, work_time=work_time, attributes=attributes)
|
||||
assert work_time.Name == attributes["Name"]
|
||||
assert work_time.DataOrigin == attributes["DataOrigin"]
|
||||
assert work_time.UserDefinedDataOrigin == attributes["UserDefinedDataOrigin"]
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
import pytest
|
||||
import datetime
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.root
|
||||
import ifcopenshell.api.sequence
|
||||
|
||||
|
||||
# NOTE: sequence module features relies on entities introduced in IFC4
|
||||
@@ -28,8 +29,8 @@ import ifcopenshell.api
|
||||
class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
def test_doing_nothing_if_the_task_has_no_time(self):
|
||||
self._add_work_schedule()
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file)
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime is None
|
||||
|
||||
def test_catching_cyclic_relationships(self):
|
||||
@@ -44,12 +45,12 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
with pytest.raises(RecursionError):
|
||||
self._create_sequence(task3, task2, "FINISH_START")
|
||||
with pytest.raises(RecursionError):
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
|
||||
def test_recalculating_for_a_single_task(self):
|
||||
self._add_work_schedule()
|
||||
task = self._create_task("P1D")
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -65,7 +66,7 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task = self._create_task("P1D")
|
||||
task2 = self._create_task("P2D")
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -92,8 +93,8 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task3 = self._create_task("P3D")
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task, task3, "FINISH_START", lag="P1D")
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -129,8 +130,8 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task3 = self._create_task("P0D")
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task, task3, "FINISH_START", lag="P1D")
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -166,8 +167,8 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task3 = self._create_task("P0D")
|
||||
self._create_sequence(task, task2, "FINISH_START")
|
||||
self._create_sequence(task2, task3, "FINISH_START")
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=task)
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.cascade_schedule(self.file, task=task)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -201,7 +202,7 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task = self._create_task("P1D")
|
||||
task2 = self._create_task("P2D")
|
||||
self._create_sequence(task, task2, "FINISH_FINISH")
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -226,7 +227,7 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task = self._create_task("P1D")
|
||||
task2 = self._create_task("P2D")
|
||||
self._create_sequence(task, task2, "START_START")
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -251,7 +252,7 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
task = self._create_task("P1D")
|
||||
task2 = self._create_task("P2D")
|
||||
self._create_sequence(task, task2, "START_FINISH")
|
||||
ifcopenshell.api.run("sequence.recalculate_schedule", self.file, work_schedule=self.work_schedule)
|
||||
ifcopenshell.api.sequence.recalculate_schedule(self.file, work_schedule=self.work_schedule)
|
||||
assert task.TaskTime.ScheduleStart == "2000-01-01T09:00:00"
|
||||
assert task.TaskTime.ScheduleFinish == "2000-01-01T17:00:00"
|
||||
assert task.TaskTime.EarlyStart == "2000-01-01T09:00:00"
|
||||
@@ -272,16 +273,15 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
assert task2.TaskTime.IsCritical is True
|
||||
|
||||
def _add_work_schedule(self):
|
||||
ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcProject")
|
||||
self.work_schedule = ifcopenshell.api.run("sequence.add_work_schedule", self.file)
|
||||
ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcProject")
|
||||
self.work_schedule = ifcopenshell.api.sequence.add_work_schedule(self.file)
|
||||
|
||||
def _create_task(self, duration):
|
||||
task = ifcopenshell.api.run("sequence.add_task", self.file, work_schedule=self.work_schedule)
|
||||
task = ifcopenshell.api.sequence.add_task(self.file, work_schedule=self.work_schedule)
|
||||
if duration == "P0D":
|
||||
task.IsMilestone = True
|
||||
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_task_time",
|
||||
task_time = ifcopenshell.api.sequence.add_task_time(self.file, task=task)
|
||||
ifcopenshell.api.sequence.edit_task_time(
|
||||
self.file,
|
||||
task_time=task_time,
|
||||
attributes={"ScheduleStart": datetime.date(2000, 1, 1), "ScheduleDuration": duration},
|
||||
@@ -289,13 +289,11 @@ class TestRecalculateSchedule(test.bootstrap.IFC4):
|
||||
return task
|
||||
|
||||
def _create_sequence(self, predecessor, successor, relationship, lag=None):
|
||||
rel = ifcopenshell.api.run(
|
||||
"sequence.assign_sequence", self.file, relating_process=predecessor, related_process=successor
|
||||
)
|
||||
ifcopenshell.api.run(
|
||||
"sequence.edit_sequence", self.file, rel_sequence=rel, attributes={"SequenceType": relationship}
|
||||
rel = ifcopenshell.api.sequence.assign_sequence(
|
||||
self.file, relating_process=predecessor, related_process=successor
|
||||
)
|
||||
ifcopenshell.api.sequence.edit_sequence(self.file, rel_sequence=rel, attributes={"SequenceType": relationship})
|
||||
if lag:
|
||||
ifcopenshell.api.run(
|
||||
"sequence.assign_lag_time", self.file, rel_sequence=rel, lag_value=lag, duration_type="WORKTIME"
|
||||
ifcopenshell.api.sequence.assign_lag_time(
|
||||
self.file, rel_sequence=rel, lag_value=lag, duration_type="WORKTIME"
|
||||
)
|
||||
|
||||
@@ -17,15 +17,15 @@
|
||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import test.bootstrap
|
||||
import ifcopenshell.api
|
||||
import ifcopenshell.api.sequence
|
||||
|
||||
|
||||
class TestUnassignProduct(test.bootstrap.IFC4):
|
||||
def test_unassigning_a_product(self):
|
||||
wall = self.file.createIfcWall()
|
||||
task = self.file.createIfcTask()
|
||||
ifcopenshell.api.run("sequence.assign_product", self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.run("sequence.unassign_product", self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.sequence.assign_product(self.file, relating_product=wall, related_object=task)
|
||||
ifcopenshell.api.sequence.unassign_product(self.file, relating_product=wall, related_object=task)
|
||||
assert len(self.file.by_type("IfcRelAssignsToProduct")) == 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user