Skip to content

DynamicParameter class #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions lib/pycsh_core/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@ pycsh_sources = [

# Classes
'src/parameter/parameter.c',
'src/parameter/parameterarray.c',
'src/parameter/pythonparameter.c',
'src/parameter/pythonarrayparameter.c',
'src/parameter/pythongetsetparameter.c',
'src/parameter/pythongetsetarrayparameter.c',
'src/parameter/dynamicparameter.c',
'src/parameter/getsetparameter.c',
'src/parameter/parameterlist.c',
'src/csp_classes/ident.c',
'src/csp_classes/vmem.c',
Expand Down
39 changes: 30 additions & 9 deletions lib/pycsh_core/pycsh.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,11 @@ class ParameterArray(Parameter):
"""


class PythonParameter(Parameter):
class DynamicParameter(Parameter):
""" Parameter created in Python. """

def __new__(cls, id: int, name: str, type: int, mask: int | str, unit: str = None, docstr: str = None, array_size: int = 0,
callback: _Callable[[Parameter, int], None] = None, host: int = None, timeout: int = None,
callback: _Callable[[Parameter, int], None] = None, host: int = None, node: int = None, timeout: int = None,
retries: int = 0, paramver: int = 2) -> PythonParameter:
"""
Create a new parameter from the provided options, and add it to the global list.
Expand All @@ -295,13 +295,37 @@ class PythonParameter(Parameter):
:param docstr: Docstring of the new parameter.
:param array_size: Array size of the new parameter. Creates a ParameterArray when > 1.
:param callback: Python function called when the parameter is set, signature: def callback(param: Parameter, offset: int) -> None
:param host:
:param node: 0 for local parameter, otherwise declares a remote parameter.
:param timeout: Timeout to use when setting remote parameters.
:param retries: Amount of retries when setting remote parameters.
:param paramver: Parameter version to use for this parameter.
:return: The created Parameter instance.
"""

def list_add(self, override: bool = False) -> DynamicParameter:
"""
Adds `self` to the global parameter list,
making it available to others on the network.

Will never error if `self` is already in the list.

:param override: How to handle an existing overlapping parameter in the list:
False = Raise exception
True = Override/Replace

:returns: self or an existing parameter with overlapping node and ID
"""

def list_forget(self) -> bool:
"""
Removes `self` from the global parameter list.

Will not remove overlapping parameters,
those should first be found using Parameter()

:returns: True if `self` was removed from the list, False if `self` was not found in the list.
"""

@property
def keep_alive(self) -> bool:
"""
Expand Down Expand Up @@ -329,20 +353,17 @@ class PythonParameter(Parameter):
Change the callback of the parameter
"""

class PythonArrayParameter(PythonParameter, ParameterArray):
""" ParameterArray created in Python. """
class PythonParameter(DynamicParameter):
""" Parameter created in Python. """

class PythonGetSetParameter(PythonParameter):
class GetSetParameter(PythonParameter):
""" ParameterArray created in Python. """

def __new__(cls, id: int, name: str, type: int, mask: int | str, unit: str = None, docstr: str = None, array_size: int = 0,
callback: _Callable[[Parameter, int], None] = None, host: int = None, timeout: int = None,
retries: int = 0, paramver: int = 2, getter: _Callable[[Parameter, int], _Any] = None, setter: _Callable[[Parameter, int, _Any], None] = None) -> PythonGetSetParameter:
""" """

class PythonGetSetArrayParameter(PythonGetSetParameter, PythonArrayParameter):
""" ParameterArray created in Python. """

# PyCharm may refuse to acknowledge that a list subclass is iterable, so we explicitly state that it is.
class ParameterList(_pylist[Parameter | ParameterArray], _Iterable):
"""
Expand Down
Loading