mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 15:08:51 +00:00
same generate_pset_templates.py for ifcopenshell and ifc dev repos
same script will be easier to maintain
This commit is contained in:
@@ -16,17 +16,31 @@
|
|||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
RUN_FROM_DEV_REPO = False
|
||||||
|
|
||||||
import ifcopenshell.api
|
import ifcopenshell.api
|
||||||
import ifcopenshell.util.attribute
|
import ifcopenshell.util.attribute
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
import zipfile
|
|
||||||
import shutil
|
|
||||||
import glob
|
import glob
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if not RUN_FROM_DEV_REPO:
|
||||||
|
import zipfile
|
||||||
|
import shutil
|
||||||
|
|
||||||
BASE_MODULE_PATH = Path(__file__).parent
|
BASE_MODULE_PATH = Path(__file__).parent
|
||||||
IFC4x3_HTML_LOCATION = BASE_MODULE_PATH / "IFC4.3-html-iso-release"
|
IFC4x3_HTML_LOCATION = BASE_MODULE_PATH / "IFC4.3-html-iso-release"
|
||||||
IFC4x3_OUTPUT_PATH = BASE_MODULE_PATH / "schema/Pset_IFC4X3.ifc"
|
|
||||||
|
if not RUN_FROM_DEV_REPO:
|
||||||
|
IFC4x3_OUTPUT_PATH = BASE_MODULE_PATH / "schema/Pset_IFC4X3.ifc"
|
||||||
|
else:
|
||||||
|
IFC4x3_PSD_LOCATION = BASE_MODULE_PATH / "../output/psd"
|
||||||
|
try:
|
||||||
|
IFC4x3_OUTPUT_PATH = sys.argv[1]
|
||||||
|
except:
|
||||||
|
IFC4x3_OUTPUT_PATH = BASE_MODULE_PATH / "../output/Pset_IFC4X3.ifc"
|
||||||
|
|
||||||
IFC2x3_HTML_ZIP_LOCATION = BASE_MODULE_PATH / "IFC2x3_TC1_HTML_distribution-pset_errata.zip"
|
IFC2x3_HTML_ZIP_LOCATION = BASE_MODULE_PATH / "IFC2x3_TC1_HTML_distribution-pset_errata.zip"
|
||||||
IFC2x3_OUTPUT_PATH = BASE_MODULE_PATH / "schema/Pset_IFC2X3.ifc"
|
IFC2x3_OUTPUT_PATH = BASE_MODULE_PATH / "schema/Pset_IFC2X3.ifc"
|
||||||
|
|
||||||
@@ -47,23 +61,36 @@ PROPERTY_TYPES_DICT = {
|
|||||||
class PsetTemplatesGenerator:
|
class PsetTemplatesGenerator:
|
||||||
def parse_ifc4x3_data(self):
|
def parse_ifc4x3_data(self):
|
||||||
print("Starting parsing data for IFC4X3...")
|
print("Starting parsing data for IFC4X3...")
|
||||||
if not IFC4x3_HTML_LOCATION.is_dir():
|
|
||||||
raise Exception(
|
if not RUN_FROM_DEV_REPO:
|
||||||
f'ISO release for Ifc4.3.0.1 expected to be in folder "{IFC4x3_HTML_LOCATION.resolve()}\\"\n'
|
if not IFC4x3_HTML_LOCATION.is_dir():
|
||||||
"For generating ifc pset library please either setup docs as described above \n"
|
raise Exception(
|
||||||
"or change IFC4x3_HTML_LOCATION in the script accordingly.\n"
|
f'ISO release for Ifc4.3.0.1 expected to be in folder "{IFC4x3_HTML_LOCATION.resolve()}\\"\n'
|
||||||
"You can download docs from the repository: \n"
|
"For generating ifc pset library please either setup docs as described above \n"
|
||||||
"https://github.com/buildingSMART/IFC4.3-html/releases/tag/sep-13-release"
|
"or change IFC4x3_HTML_LOCATION in the script accordingly.\n"
|
||||||
)
|
"You can download docs from the repository: \n"
|
||||||
# unzip the data
|
"https://github.com/buildingSMART/IFC4.3-html/releases/tag/sep-13-release"
|
||||||
pset_data_zip = IFC4x3_HTML_LOCATION / "IFC/RELEASE/IFC4x3/HTML/annex-a-psd.zip"
|
)
|
||||||
pset_data_location = BASE_MODULE_PATH / "temp/annex-a-psd"
|
# unzip the data
|
||||||
with zipfile.ZipFile(pset_data_zip, "r") as fi_zip:
|
if not RUN_FROM_DEV_REPO:
|
||||||
fi_zip.extractall(pset_data_location)
|
pset_data_zip = IFC4x3_HTML_LOCATION / "IFC/RELEASE/IFC4x3/HTML/annex-a-psd.zip"
|
||||||
|
pset_data_location = BASE_MODULE_PATH / "temp/annex-a-psd"
|
||||||
|
with zipfile.ZipFile(pset_data_zip, "r") as fi_zip:
|
||||||
|
fi_zip.extractall(pset_data_location)
|
||||||
|
else:
|
||||||
|
if not IFC4x3_PSD_LOCATION.is_dir():
|
||||||
|
raise Exception(
|
||||||
|
f'Psets xmls files expected to be in folder "{IFC4x3_PSD_LOCATION.resolve()}\\"\n'
|
||||||
|
"For generating ifc pset library please either setup docs as described above \n"
|
||||||
|
"or change IFC4x3_PSD_LOCATION in the script accordingly."
|
||||||
|
)
|
||||||
|
pset_data_location = IFC4x3_PSD_LOCATION
|
||||||
|
|
||||||
pset_data_glob = f"{pset_data_location}/*.xml"
|
pset_data_glob = f"{pset_data_location}/*.xml"
|
||||||
self.parse_psets_data("IFC4X3", pset_data_glob, "IFC4X3 Property Set Templates", str(IFC4x3_OUTPUT_PATH))
|
self.parse_psets_data("IFC4X3", pset_data_glob, "IFC4X3 Property Set Templates", str(IFC4x3_OUTPUT_PATH))
|
||||||
shutil.rmtree(pset_data_location)
|
|
||||||
|
if not RUN_FROM_DEV_REPO:
|
||||||
|
shutil.rmtree(pset_data_location)
|
||||||
|
|
||||||
def parse_ifc2x3_data(self):
|
def parse_ifc2x3_data(self):
|
||||||
print("Starting parsing data for IFC2X3...")
|
print("Starting parsing data for IFC2X3...")
|
||||||
@@ -296,4 +323,5 @@ class PsetTemplatesGenerator:
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
templates_generator = PsetTemplatesGenerator()
|
templates_generator = PsetTemplatesGenerator()
|
||||||
templates_generator.parse_ifc4x3_data()
|
templates_generator.parse_ifc4x3_data()
|
||||||
templates_generator.parse_ifc2x3_data()
|
if not RUN_FROM_DEV_REPO:
|
||||||
|
templates_generator.parse_ifc2x3_data()
|
||||||
|
|||||||
Reference in New Issue
Block a user