Skip to content

python_class

Classes

PythonClass

Bases: KiaraModel

Python class and module information.

Source code in kiara/models/python_class.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class PythonClass(KiaraModel):

    """Python class and module information."""

    _kiara_model_id = "instance.wrapped_python_class"

    @classmethod
    def from_class(cls, item_cls: Type, attach_context_metadata: bool = False):

        cls_name = item_cls.__name__
        module_name = item_cls.__module__

        if module_name == "builtins":
            full_name = cls_name
        else:
            full_name = f"{item_cls.__module__}.{item_cls.__name__}"

        conf: Dict[str, Any] = {
            "python_class_name": cls_name,
            "python_module_name": module_name,
            "full_name": full_name,
        }

        if attach_context_metadata:
            raise NotImplementedError()
            ctx_md = ContextMetadataModel.from_class(item_cls=item_cls)
            conf["items"] = ctx_md

        result = PythonClass.construct(**conf)
        result._cls_cache = item_cls
        return result

    python_class_name: str = Field(description="The name of the Python class.")
    python_module_name: str = Field(
        description="The name of the Python module this class lives in."
    )
    full_name: str = Field(description="The full class namespace.")

    # context_metadata: Optional[ContextMetadataModel] = Field(
    #     description="Context metadata for the class.", default=None
    # )

    _module_cache: ModuleType = PrivateAttr(default=None)
    _cls_cache: Type = PrivateAttr(default=None)

    def _retrieve_id(self) -> str:
        return self.full_name

    def _retrieve_data_to_hash(self) -> Any:
        return self.full_name

    def get_class(self) -> Type:

        if self._cls_cache is None:
            m = self.get_python_module()
            self._cls_cache = getattr(m, self.python_class_name)
        return self._cls_cache

    def get_python_module(self) -> ModuleType:
        if self._module_cache is None:
            self._module_cache = importlib.import_module(self.python_module_name)
        return self._module_cache

Attributes

python_class_name: str = Field(description='The name of the Python class.') class-attribute
python_module_name: str = Field(description='The name of the Python module this class lives in.') class-attribute
full_name: str = Field(description='The full class namespace.') class-attribute

Functions

from_class(item_cls: Type, attach_context_metadata: bool = False) classmethod
Source code in kiara/models/python_class.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@classmethod
def from_class(cls, item_cls: Type, attach_context_metadata: bool = False):

    cls_name = item_cls.__name__
    module_name = item_cls.__module__

    if module_name == "builtins":
        full_name = cls_name
    else:
        full_name = f"{item_cls.__module__}.{item_cls.__name__}"

    conf: Dict[str, Any] = {
        "python_class_name": cls_name,
        "python_module_name": module_name,
        "full_name": full_name,
    }

    if attach_context_metadata:
        raise NotImplementedError()
        ctx_md = ContextMetadataModel.from_class(item_cls=item_cls)
        conf["items"] = ctx_md

    result = PythonClass.construct(**conf)
    result._cls_cache = item_cls
    return result
get_class() -> Type
Source code in kiara/models/python_class.py
74
75
76
77
78
79
def get_class(self) -> Type:

    if self._cls_cache is None:
        m = self.get_python_module()
        self._cls_cache = getattr(m, self.python_class_name)
    return self._cls_cache
get_python_module() -> ModuleType
Source code in kiara/models/python_class.py
81
82
83
84
def get_python_module(self) -> ModuleType:
    if self._module_cache is None:
        self._module_cache = importlib.import_module(self.python_module_name)
    return self._module_cache

KiaraModuleInstance

Bases: PythonClass

Source code in kiara/models/python_class.py
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
class KiaraModuleInstance(PythonClass):

    _kiara_model_id: str = "metadata.kiara_module_class"

    @classmethod
    def from_module(cls, module: "KiaraModule"):

        item_cls = module.__class__

        cls_name = item_cls.__name__
        module_name = item_cls.__module__
        if module_name == "builtins":
            full_name = cls_name
        else:
            full_name = f"{item_cls.__module__}.{item_cls.__name__}"

        conf: Dict[str, Any] = {
            "python_class_name": cls_name,
            "python_module_name": module_name,
            "full_name": full_name,
        }

        conf["module_config"] = module.config
        conf["inputs_schema"] = module.inputs_schema
        conf["outputs_schema"] = module.outputs_schema

        result = KiaraModuleInstance.construct(**conf)
        result._cls_cache = item_cls
        result._module_instance_cache = module
        return result

    module_config: Dict[str, Any] = Field(description="The module config.")
    inputs_schema: Dict[str, ValueSchema] = Field(
        description="The schema for the module input(s)."
    )
    outputs_schema: Dict[str, ValueSchema] = Field(
        description="The schema for the module output(s)."
    )

    _module_instance_cache: "KiaraModule" = PrivateAttr(default=None)

    def get_kiara_module_instance(self) -> "KiaraModule":

        if self._module_instance_cache is not None:
            return self._module_instance_cache

        m_cls = self.get_class()
        self._module_instance_cache = m_cls(module_config=self.module_config)
        return self._module_instance_cache

Attributes

module_config: Dict[str, Any] = Field(description='The module config.') class-attribute
inputs_schema: Dict[str, ValueSchema] = Field(description='The schema for the module input(s).') class-attribute
outputs_schema: Dict[str, ValueSchema] = Field(description='The schema for the module output(s).') class-attribute

Functions

from_module(module: KiaraModule) classmethod
Source code in kiara/models/python_class.py
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
@classmethod
def from_module(cls, module: "KiaraModule"):

    item_cls = module.__class__

    cls_name = item_cls.__name__
    module_name = item_cls.__module__
    if module_name == "builtins":
        full_name = cls_name
    else:
        full_name = f"{item_cls.__module__}.{item_cls.__name__}"

    conf: Dict[str, Any] = {
        "python_class_name": cls_name,
        "python_module_name": module_name,
        "full_name": full_name,
    }

    conf["module_config"] = module.config
    conf["inputs_schema"] = module.inputs_schema
    conf["outputs_schema"] = module.outputs_schema

    result = KiaraModuleInstance.construct(**conf)
    result._cls_cache = item_cls
    result._module_instance_cache = module
    return result
get_kiara_module_instance() -> KiaraModule
Source code in kiara/models/python_class.py
128
129
130
131
132
133
134
135
def get_kiara_module_instance(self) -> "KiaraModule":

    if self._module_instance_cache is not None:
        return self._module_instance_cache

    m_cls = self.get_class()
    self._module_instance_cache = m_cls(module_config=self.module_config)
    return self._module_instance_cache