secop_ophyd.GenNodeCode#

Code generation for annotated ophyd device classes using Jinja2 templates.

Module Contents#

Classes#

EnumMember

Represents an enum member with name and value.

EnumClass

Represents an enum class definition.

ModuleAttribute

Represents a module attribute with name, type, and optional description.

PropertyAttribute

Represents a module property attribute with name, type

ParameterAttribute

Represents a module parameter attribute with name, type, and optional description.

Method

Represents a class method with signature and description.

ModuleClass

Represents a module class to be generated.

NodeClass

Represents a node class to be generated.

GenNodeCode

Generates annotated Python classes for SECoP ophyd devices.

Functions#

internalize_name

how to create internal names

get_type_param

get_type_prop

API#

secop_ophyd.GenNodeCode.internalize_name(name: str) str[source]#

how to create internal names

class secop_ophyd.GenNodeCode.EnumMember[source]#

Represents an enum member with name and value.

name: str = None#
value: str = None#
description: str | None = None#
class secop_ophyd.GenNodeCode.EnumClass[source]#

Represents an enum class definition.

name: str = None#
members: list[secop_ophyd.GenNodeCode.EnumMember] = None#
description: str | None = None#
base_enum_class: str = 'StrictEnum'#
class secop_ophyd.GenNodeCode.ModuleAttribute[source]#

Represents a module attribute with name, type, and optional description.

name: str = None#
type: str = None#
class secop_ophyd.GenNodeCode.PropertyAttribute[source]#

Represents a module property attribute with name, type

name: str = None#
type_param: str | None = None#
path_annotation: str | None = None#
type: str = 'SignalR'#
class secop_ophyd.GenNodeCode.ParameterAttribute[source]#

Represents a module parameter attribute with name, type, and optional description.

name: str = None#
type: str = None#
type_param: str | None = None#
description: str | None = None#
path_annotation: str | None = None#
format_annotation: str | None = None#
class secop_ophyd.GenNodeCode.Method(cmd_name: str, description: str, cmd_sign: inspect.Signature)[source]#

Represents a class method with signature and description.

This class supports both old-style initialization (for backward compatibility) and new-style dataclass initialization.

Initialization

Initialize Method (backward compatibility constructor).

Args:

cmd_name: Name of the command description: Description of the command cmd_sign: Signature of the command

class secop_ophyd.GenNodeCode.ModuleClass[source]#

Represents a module class to be generated.

name: str = None#
bases: list[str] = None#
parameters: list[secop_ophyd.GenNodeCode.ParameterAttribute] = 'field(...)'#
properties: list[secop_ophyd.GenNodeCode.PropertyAttribute] = 'field(...)'#
methods: list[secop_ophyd.GenNodeCode.Method] = 'field(...)'#
description: str = <Multiline-String>#
enums: list[secop_ophyd.GenNodeCode.EnumClass] = 'field(...)'#
class secop_ophyd.GenNodeCode.NodeClass[source]#

Represents a node class to be generated.

name: str = None#
bases: list[str] = None#
properties: list[secop_ophyd.GenNodeCode.PropertyAttribute] = 'field(...)'#
modules: list[secop_ophyd.GenNodeCode.ModuleAttribute] = 'field(...)'#
description: str = <Multiline-String>#
class secop_ophyd.GenNodeCode.GenNodeCode(path: str | None = None, log=None)[source]#

Generates annotated Python classes for SECoP ophyd devices.

This class can generate Python code in two ways: 1. By introspecting a fully instantiated SECoP ophyd device 2. From a SECoP JSON describe message (future feature)

The generated code uses Jinja2 templates and is formatted with Black.

Initialization

Initialize the code generator.

Args:

path: Optional path to the module folder log: Optional logger instance

ModName: str = 'genNodeClass'#
add_import(module: str, class_str: str | None = None)[source]#

Add an import to the import dictionary.

Args:

module: Python module to import from class_str: Class/symbol to import. If None or empty, imports the module directly.

add_mod_class(module_cls: str, bases: list[str], parameters: list[secop_ophyd.GenNodeCode.ParameterAttribute], properties: list[secop_ophyd.GenNodeCode.PropertyAttribute], cmd_plans: list[secop_ophyd.GenNodeCode.Method], description: str = '', enum_classes: list[secop_ophyd.GenNodeCode.EnumClass] | None = None)[source]#

Add a module class to be generated.

Args:

module_cls: Name of the module class bases: Base classes parameters: List of parameter attributes properties: List of property attributes cmd_plans: List of method definitions description: Optional class description

add_node_class(node_cls: str, bases: list[str], properties: list[secop_ophyd.GenNodeCode.PropertyAttribute], modules: list[secop_ophyd.GenNodeCode.ModuleAttribute], description: str = '')[source]#

Add a node class to be generated.

Args:

node_cls: Name of the node class bases: Base classes attrs: List of attribute tuples. Supported formats:

  • (name, type)

  • (name, type, type_param)

  • (name, type, type_param, description, category)

from_json_describe(json_data: str | dict)[source]#

Generate classes from a SECoP JSON describe message.

Args:

json_data: JSON string or dict containing SECoP describe data

generate_code() str[source]#

Generate Python code using Jinja2 template.

Returns:

Generated Python code as string

write_gen_node_class_file()[source]#

Generate and write the class file to disk.

secop_ophyd.GenNodeCode.get_type_param(secop_dtype: frappy.datatypes.DataType) str | None[source]#
secop_ophyd.GenNodeCode.get_type_prop(prop_value) str | None[source]#