from behave import step import attributes_psets_methods as apm from utils import assert_elements from utils import IfcFile from utils import switch_locale the_lang = "en" @step("all {ifc_class} elements have an {aproperty} property in the {pset} pset") def step_impl(context, ifc_class, aproperty, pset): switch_locale(context.localedir, the_lang) apm.eleclass_has_property_in_pset( context, ifc_class, aproperty, pset ) # ------------------------------------------------------------------------ # STEPS with Regular Expression Matcher ("re") # ------------------------------------------------------------------------ use_step_matcher("re") @step("all (?P.*) elements have an? (?P.*\..*) property") def step_impl(context, ifc_class, property_path): pset_name, property_name = property_path.split(".") elements = IfcFile.get().by_type(ifc_class) for element in elements: if not IfcFile.get_property(element, pset_name, property_name): assert False @step( 'all (?P.*) elements have an? (?P.*\..*) property value matching the pattern "(?P.*)"' ) def step_impl(context, ifc_class, property_path, pattern): import re pset_name, property_name = property_path.split(".") elements = IfcFile.get().by_type(ifc_class) for element in elements: prop = IfcFile.get_property(element, pset_name, property_name) if not prop: assert False # For now, we only check single values if prop.is_a("IfcPropertySingleValue"): if not (prop.NominalValue and re.search(pattern, prop.NominalValue.wrappedValue)): assert False