New Command

From PyMOLWiki
Revision as of 11:47, 29 November 2025 by PedroLacerda (talk | contribs)
Jump to navigation Jump to search

IN ACTIVE DEVELOPMENT

new_command is an API-only feature which exposes a developer defined Python function as a command to other users.

In a brief

If you need more examples, here a non exhaustive list of examples: [1]

from pymol import cmd
from pathlib import Path
from typing import List, Tuple, Union, Any

Point = Tuple[float, float, float]

@cmd.new_command
def nice_tool(
    my_var: Union[int | float],
    a_point: Point,
    title: str,
    other_point: Tuple[int, int, int] = (0, 0, 0),
    dirname: Path = '.',  # a bit ugly, but works as expected on command-line
    this_list: Union[List[bool], None] = None,
    extended_calculation: bool = True,
    old_style: Any = "Support anything as raw string",
    quiet: bool = 1,  # special 'quiet=False' on command-line
    _self=cmd  # special for multi-threaded applications
):
    "A cool docstring."
    print(this_list)

Details

It improves on extend, the consolidated exposing mechanism, and works by parsing arguments given by users at command-line, enforcing correct types at runtime, freeing developers from it and ensuring typing strictness. It is also advantageous for developers consuming the exposed function/command directly by the API as types can also be enforced statically by MyPy.