Public API

PME2 provides a public API for external scripts and other addons.

Quick Start

import pme

# Find a menu
pm = pme.find_pm("My Pie Menu")
pm = pme.find_pm(uid="pm_9f7c2k3h")

# Invoke a menu
pme.invoke_pm("My Pie Menu")
pme.invoke_pm(uid="pm_9f7c2k3h")

# List menus
all_menus = pme.list_pms()
pie_menus = pme.list_pms(mode="PMENU", enabled_only=True)
tags = pme.list_tags()

# Execute code
result = pme.execute("bpy.ops.mesh.primitive_cube_add()")
print(result.ok, result.error)

# Evaluate an expression
value = pme.evaluate("len(C.selected_objects)")

# Validate JSON
result = pme.validate_json(json_string)
for err in result.errors:
    print(err.code, err.message)

Changes from PME1

Topic

PME1

PME2

Import

from pie_menu_editor import pme

import pme

Design

Exposed internal module

Public API facade

Menu invocation

pme.context.open_menu(name)

pme.invoke_pm(name) / pme.invoke_pm(uid=...)

Code execution

pme.context.exe(code)

pme.execute(code) -> ExecuteResult

Menu lookup

None

pme.find_pm(), pme.list_pms()

JSON validation

None

pme.validate_json()

Types and constants

None

pme.types, pme.constants

API Reference

Code execution

Function

Description

execute(code, *, extra_globals=None)

Execute code and return ExecuteResult

evaluate(expr, *, extra_globals=None)

Evaluate an expression and return the result. Raises on failure

check_syntax(code, *, mode="exec")

Syntax-check only. Returns SyntaxResult

Validation

Function

Description

validate_json(json_string, *, strict=False, check_references=True)

Validate against JSON Schema v2. Returns ValidationResult

validate_uid(uid)

Validate a uid string format

Backward compatibility

PME1’s pme.context and pme.props remain available. Existing scripts inside PME command slots continue to work.

# These still work in PME2
pme.context.open_menu("My Menu")
pme.context.event.mouse_x
pme.context.add_global("my_var", value)

Prefer pme.execute() and pme.invoke_pm() for new code.

Note

The public API is currently Experimental. The basic interface is intended to stay stable, but smaller details may change in future versions.

See also

You must enable import pme before using this API. See Boot Options.