mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-12 10:33:20 +00:00
IfcTester now groups results by types to make long failure lists more useful
This commit is contained in:
@@ -110,8 +110,8 @@ ResultsEntity = TypedDict(
|
||||
"ResultsEntity",
|
||||
{
|
||||
"reason": str,
|
||||
"element": str,
|
||||
"element_type": str,
|
||||
"element": ifcopenshell.entity_instance,
|
||||
"element_type": Union[ifcopenshell.entity_instance, None],
|
||||
"class": str,
|
||||
"predefined_type": str,
|
||||
"name": Union[str, None],
|
||||
@@ -428,23 +428,60 @@ class Json(Reporter):
|
||||
|
||||
class Html(Json):
|
||||
def __init__(self, ids: Ids):
|
||||
self.entity_limit = 100
|
||||
super().__init__(ids)
|
||||
|
||||
def report(self) -> None:
|
||||
super().report()
|
||||
entity_limit = 100
|
||||
for spec in self.results["specifications"]:
|
||||
for requirement in spec["requirements"]:
|
||||
total_passed_entities = len(requirement["passed_entities"])
|
||||
total_failed_entities = len(requirement["failed_entities"])
|
||||
requirement["passed_entities"] = requirement["passed_entities"][0:entity_limit]
|
||||
requirement["failed_entities"] = requirement["failed_entities"][0:entity_limit]
|
||||
requirement["passed_entities"] = self.limit_entities(requirement["passed_entities"])
|
||||
requirement["failed_entities"] = self.limit_entities(requirement["failed_entities"])
|
||||
requirement["total_failed_entities"] = total_failed_entities
|
||||
requirement["total_omitted_failures"] = total_failed_entities - entity_limit
|
||||
requirement["has_omitted_failures"] = total_failed_entities > entity_limit
|
||||
requirement["total_omitted_failures"] = total_failed_entities - self.entity_limit
|
||||
requirement["has_omitted_failures"] = total_failed_entities > self.entity_limit
|
||||
requirement["total_passed_entities"] = total_passed_entities
|
||||
requirement["total_omitted_passes"] = total_passed_entities - entity_limit
|
||||
requirement["has_omitted_passes"] = total_passed_entities > entity_limit
|
||||
requirement["total_omitted_passes"] = total_passed_entities - self.entity_limit
|
||||
requirement["has_omitted_passes"] = total_passed_entities > self.entity_limit
|
||||
|
||||
def limit_entities(self, entities):
|
||||
if len(entities) > self.entity_limit:
|
||||
if entities[0]["element_type"]:
|
||||
return self.group_by_type(entities)
|
||||
return entities[0 : self.entity_limit]
|
||||
return entities
|
||||
|
||||
def group_by_type(self, entities):
|
||||
results = []
|
||||
group_limit = 5
|
||||
grouped_by_type = {}
|
||||
[grouped_by_type.setdefault(e["element_type"], []).append(e) for e in entities]
|
||||
total_entities = 0
|
||||
for element_type, entities in grouped_by_type.items():
|
||||
for i, entity in enumerate(entities):
|
||||
results.append(entity)
|
||||
total_entities += 1
|
||||
|
||||
if element_type and i > group_limit:
|
||||
results[-1]["type_name"] = element_type.Name if element_type else "Untyped"
|
||||
if element_type:
|
||||
results[-1]["type_tag"] = element_type.Tag
|
||||
results[-1]["type_global_id"] = element_type.GlobalId
|
||||
results[-1]["extra_of_type"] = len(entities) - i
|
||||
if total_entities == self.entity_limit:
|
||||
return results
|
||||
break
|
||||
|
||||
if total_entities == self.entity_limit:
|
||||
results[-1]["type_name"] = element_type.Name if element_type else "Untyped"
|
||||
if element_type:
|
||||
results[-1]["type_tag"] = element_type.Tag
|
||||
results[-1]["type_global_id"] = element_type.GlobalId
|
||||
results[-1]["extra_of_type"] = len(entities) - i
|
||||
return results
|
||||
return results
|
||||
|
||||
def to_string(self) -> str:
|
||||
import pystache
|
||||
|
||||
@@ -167,6 +167,11 @@
|
||||
<td>{{global_id}}</td>
|
||||
<td>{{tag}}</td>
|
||||
</tr>
|
||||
{{#extra_of_type}}
|
||||
<tr>
|
||||
<td colspan="7">... {{extra_of_type}} more of the same element type ({{type_name}} with Tag {{type_tag}} and GlobalId {{type_global_id}}) not shown ...</td>
|
||||
</tr>
|
||||
{{/extra_of_type}}
|
||||
{{/passed_entities}}
|
||||
{{#has_omitted_passes}}
|
||||
<tr>
|
||||
@@ -200,6 +205,11 @@
|
||||
<td>{{global_id}}</td>
|
||||
<td>{{tag}}</td>
|
||||
</tr>
|
||||
{{#extra_of_type}}
|
||||
<tr>
|
||||
<td colspan="7">... {{extra_of_type}} more of the same element type ({{type_name}} with Tag {{type_tag}} and GlobalId {{type_global_id}}) not shown ...</td>
|
||||
</tr>
|
||||
{{/extra_of_type}}
|
||||
{{/failed_entities}}
|
||||
{{#has_omitted_failures}}
|
||||
<tr>
|
||||
|
||||
Reference in New Issue
Block a user