-m ifcopenshell.validate to print a message if file is valid

This commit is contained in:
Andrej730
2024-06-27 14:43:15 +05:00
parent eb67ffcbec
commit 07a0b4fe2d
@@ -39,7 +39,7 @@ import functools
from collections import namedtuple from collections import namedtuple
from typing import Union, Iterator, Any, Optional from typing import Union, Iterator, Any, Optional
from logging import Logger from logging import Logger, Handler
import ifcopenshell import ifcopenshell
import ifcopenshell.ifcopenshell_wrapper import ifcopenshell.ifcopenshell_wrapper
@@ -502,6 +502,14 @@ def validate(f: Union[ifcopenshell.file, str], logger: Logger, express_rules=Fal
ifcopenshell.express.rule_executor.run(f, logger) ifcopenshell.express.rule_executor.run(f, logger)
class LogDetectionHandler(Handler):
message_logged = False
def emit(self, record):
if not self.message_logged:
self.message_logged = True
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
import logging import logging
@@ -510,10 +518,13 @@ if __name__ == "__main__":
flags = set(x for x in sys.argv[1:] if x.startswith("--")) flags = set(x for x in sys.argv[1:] if x.startswith("--"))
for fn in filenames: for fn in filenames:
handler = None
if "--json" in flags: if "--json" in flags:
logger = json_logger() logger = json_logger()
else: else:
logger = logging.getLogger("validate") logger = logging.getLogger("validate")
handler = LogDetectionHandler()
logger.addHandler(handler)
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)
print("Validating", fn, file=sys.stderr) print("Validating", fn, file=sys.stderr)
@@ -533,3 +544,12 @@ if __name__ == "__main__":
return str(x) return str(x)
print("\n".join(json.dumps(x, default=conv) for x in logger.statements)) print("\n".join(json.dumps(x, default=conv) for x in logger.statements))
if handler:
logger.removeHandler(handler)
invalid_ifc = handler.message_logged
else: # json_logger.
invalid_ifc = bool(logger.statements)
if not invalid_ifc:
print("No validation issues found.")