Nyx Node
Toggle main menu visibility
Loading...
Searching...
No Matches
utils.py
1
# -*- coding: utf-8 -*-
2
########################################################################################################################
3
# NyxNode
4
# Author: Jérôme ODIER <jerome.odier@lpsc.in2p3.fr>
5
# SPDX-License-Identifier: GPL-3.0+
6
########################################################################################################################
7
8
import
typing
9
10
########################################################################################################################
11
12
def
nyx_property(name: str, key: str, kind: typing.Type = str, getter: typing.Callable[[typing.Any], typing.Any] |
None
=
None
, setter: typing.Callable |
None
=
None
) -> typing.Callable:
13
14
def
decorate(cls: type) -> type:
15
16
################################################################################################################
17
18
if
name
in
cls.__dict__:
19
20
raise
AttributeError(f
'Nyx property already exists: {name}'
)
21
22
################################################################################################################
23
24
def
get_value(self) -> kind:
25
f
"""
26
@brief Gets the @c {name} attribute of this object (type: @c {kind.__name__}).'
27
28
@return The current value.
29
"""
30
31
value = self[key].value
32
33
if
getter
is
not
None
:
34
35
value = getter(value)
36
37
return
kind(value)
38
39
################################################################################################################
40
41
def
set_value(self, value: kind) ->
None
:
42
f
"""
43
@brief Sets the @c {name} attribute of this object (type: @c {kind.__name__}).'
44
45
@return None
46
"""
47
48
if
setter
is
not
None
:
49
50
value = setter(value)
51
52
self[key].value = value
53
54
################################################################################################################
55
56
setattr(cls, name, property(get_value, set_value))
57
58
################################################################################################################
59
60
return
cls
61
62
return
decorate
63
64
########################################################################################################################
65
66
__all__ = [name
for
name
in
globals()
if
name.lower().startswith(
'nyx'
)]
67
68
########################################################################################################################
Author:
Jérôme ODIER
License:
LGPL-3.0-or-later
Copyright:
LPSC / CNRS