66import importlib .util
77import importlib .resources
88import json
9+ from typing import Any , Dict , Optional , Union
910
1011import xmltodict
1112from pydantic import TypeAdapter
@@ -25,13 +26,12 @@ def raise_on_error(sc):
2526 raise RuntimeError (_iris .get_iris ().system .Status .GetOneStatusText (sc ))
2627
2728 @staticmethod
28- def setup (path :str = None ):
29+ def setup (path :Optional [ str ] = None ):
2930
3031 if path is None :
3132 # get the path of the data folder with importlib.resources
3233 try :
33- path = importlib .resources .files ('iop' ).joinpath ('cls' )
34- path = str (path )
34+ path = str (importlib .resources .files ('iop' ).joinpath ('cls' ))
3535 except ModuleNotFoundError :
3636 path = None
3737
@@ -40,29 +40,28 @@ def setup(path:str = None):
4040
4141 # for retrocompatibility load grongier.pex
4242 try :
43- path = importlib .resources .files ('grongier' ).joinpath ('cls' )
44- path = str (path )
43+ path = str (importlib .resources .files ('grongier' ).joinpath ('cls' ))
4544 except ModuleNotFoundError :
4645 path = None
4746
4847 if path :
4948 _Utils .raise_on_error (_iris .get_iris ().cls ('%SYSTEM.OBJ' ).LoadDir (path ,'cubk' ,"*.cls" ,1 ))
5049
5150 @staticmethod
52- def register_message_schema (cls ):
51+ def register_message_schema (msg_cls : type ):
5352 """
5453 It takes a class and registers the schema
5554
5655 :param cls: The class to register
5756 """
58- if issubclass (cls ,_PydanticMessage ):
59- schema = cls .model_json_schema ()
60- elif issubclass (cls ,_Message ):
61- type_adapter = TypeAdapter (cls )
57+ if issubclass (msg_cls ,_PydanticMessage ):
58+ schema = msg_cls .model_json_schema ()
59+ elif issubclass (msg_cls ,_Message ):
60+ type_adapter = TypeAdapter (msg_cls )
6261 schema = type_adapter .json_schema ()
6362 else :
6463 raise ValueError ("The class must be a subclass of _Message or _PydanticMessage" )
65- schema_name = cls .__module__ + '.' + cls .__name__
64+ schema_name = msg_cls .__module__ + '.' + msg_cls .__name__
6665 schema_str = json .dumps (schema )
6766 categories = schema_name
6867 _Utils .register_schema (schema_name ,schema_str ,categories )
@@ -172,10 +171,11 @@ def _register_file(filename:str,path:str,overwrite:int=1,iris_package_name:str='
172171 for klass in classes :
173172 extend = ''
174173 if len (klass .bases ) == 1 :
175- if hasattr (klass .bases [0 ],'id' ):
176- extend = klass .bases [0 ].id
177- else :
178- extend = klass .bases [0 ].attr
174+ base = klass .bases [0 ]
175+ if isinstance (base , ast .Name ):
176+ extend = base .id
177+ elif isinstance (base , ast .Attribute ):
178+ extend = base .attr
179179 if extend in ('BusinessOperation' ,'BusinessProcess' ,'BusinessService' ,'DuplexService' ,'DuplexProcess' ,'DuplexOperation' ,'InboundAdapter' ,'OutboundAdapter' ):
180180 module = _Utils .filename_to_module (filename )
181181 iris_class_name = f"{ iris_package_name } .{ module } .{ klass .name } "
@@ -283,7 +283,7 @@ def import_module_from_path(module_name, file_path):
283283 raise ValueError ("The file path must be absolute" )
284284
285285 spec = importlib .util .spec_from_file_location (module_name , file_path )
286- if spec is None :
286+ if spec is None or spec . loader is None :
287287 raise ImportError (f"Cannot find module named { module_name } at { file_path } " )
288288
289289 module = importlib .util .module_from_spec (spec )
0 commit comments