HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PY_Python.h File Reference
#include "PY_API.h"
#include "PY_Result.h"
#include <UT/UT_String.h>
+ Include dependency graph for PY_Python.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

PY_API PY_Result PYrunPythonExpression (const char *python_code, PY_Result::Type desired_result_type, PY_EvaluationContext *context=NULL)
 
PY_API PY_Result PYrunPythonExpressionInNewContext (const char *python_code, PY_Result::Type desired_result_type)
 
PY_API PY_Result PYrunPythonExpressionAndExpectNoErrors (const char *python_code, PY_Result::Type desired_result_type, const char *heading=NULL, PY_EvaluationContext *context=NULL)
 
PY_API bool PYrunPythonExpressionOfExactType (const char *python_code, PY_Result::Type desired_result_type, PY_Result &result, const char *error_heading, const char *error_for_wrong_type, PY_EvaluationContext *context=NULL)
 
PY_API PY_Result PYrunPythonStatements (const char *python_code, PY_EvaluationContext *context=NULL)
 
PY_API PY_Result PYrunPythonStatementsInNewContext (const char *python_code)
 
PY_API PY_Result PYrunPythonStatements (const char *python_code, int argc, char *argv[], PY_EvaluationContext *context=NULL, bool update_path=true)
 
PY_API bool PYrunPythonStatementsAndExpectNoErrors (const char *python_code, const char *heading=NULL, PY_EvaluationContext *context=NULL)
 
PY_API bool PYrunPythonStatementsInNewContextAndExpectNoErrors (const char *python_code, const char *heading=NULL)
 
PY_API PY_Result PYrunPythonStatementsFromFile (const char *filename, PY_EvaluationContext *context=NULL)
 
PY_API PY_Result PYrunPythonStatementsFromFile (int argc, char *argv[], PY_EvaluationContext *context=NULL, bool update_path=true)
 
PY_API UT_String PYrunPythonStatementsInNewThread (const char *python_code)
 
PY_API UT_String PYrunPythonStatementsFromFileInNewThread (const char *file_name)
 
PY_API UT_String PYrunPythonStatementsFromFileInNewThread (int argc, char *argv[], bool update_path=true)
 
PY_API PY_Result PYextractPythonException ()
 
PY_API PY_Result PYextractResultFromPythonObject (void *opaque_python_object, PY_Result::Type desired_result_type)
 
PY_API void PYextractResultFromPythonObject (void *opaque_python_object, PY_Result::Type desired_result_type, PY_Result &result)
 
PY_API voidPYcallObjectAndCatchCrashes (void *callable)
 
PY_API PY_EvaluationContextPYgetPythonExpressionEvaluationContext ()
 
PY_API PY_Result PYimportModuleFromString (const char *module_name, const char *module_contents)
 
PY_API voidPYgetCodeObjectForPrevFrame ()
 
PY_API voidPYgetCodeObjectForFunction (void *opaque_python_object)
 Return a PyCodeObject * corresponding to the specified PyObject. More...
 
PY_API void PYsetPythonTracebackDisplayCallback (void(*callback)(const char *heading, const char *error_message))
 
PY_API void PYdisplayPythonTraceback (const char *heading, const char *traceback_message)
 
PY_API void PYsetAutoInitializeFromPython (bool auto_initialize)
 
PY_API bool PYautoInitializeFromPython ()
 
PY_API const char * PYgetHoudiniModulePath ()
 Returns the absolute path to Houdini's Python modules. More...
 
PY_API PY_Result PYbindFunctionFromModule (const char *module_name, const char *func_name)
 
PY_API void PYlogError (PY_Result const &result, const char *title)
 
PY_API UT_StringHolder PYformatError (PY_Result const &result, const char *title, const char *format)
 
PY_API const char * PYgetErrorFormat ()
 
template<typename FUNC >
void PYprocessError (PY_Result const &result, const char *title, const char *format, FUNC const &process_func)
 

Function Documentation

PY_API bool PYautoInitializeFromPython ( )

This function is used by PY_InterpreterAutoLock to determine if it should automatically import the hou module

PY_API PY_Result PYbindFunctionFromModule ( const char *  module_name,
const char *  func_name 
)

Bind and return a PY_Object 'function' from a specific module. The caller is responsible to increment the Python object ref count.

PY_API void* PYcallObjectAndCatchCrashes ( void callable)

Given an (opaque) callable Python object, call it with no arguments and return its Python object result. If an exception occurred, it remains set in the Python interpreter and this function returns null. This function behaves much like calling PyObject_CallObject with a null argument parameter, but the difference is that if calling the code generates a crash, the signal is caught, an exception is set, and this function returns null.

PY_API void PYdisplayPythonTraceback ( const char *  heading,
const char *  traceback_message 
)

Display a Python traceback with a given heading. If the traceback display callback was set, it will be used to display the traceback.

PY_API PY_Result PYextractPythonException ( )

Return the python result containing a stack trace and exception information. If no exception occurred, the result type is none.

PY_API PY_Result PYextractResultFromPythonObject ( void opaque_python_object,
PY_Result::Type  desired_result_type 
)

Given a python object and a desired type, try to convert it to that type. python_object should be a PyObject*, but it's a void* to avoid having to include Python.h from here.

There are two versions: a performance-sensitive version that takes the return PY_Result object by reference, and a convenience version one that returns it by value.

PY_API void PYextractResultFromPythonObject ( void opaque_python_object,
PY_Result::Type  desired_result_type,
PY_Result result 
)
PY_API UT_StringHolder PYformatError ( PY_Result const result,
const char *  title,
const char *  format 
)

Return a formatted error message filled with a title and the detailed error message set in the PY_Result object. Returns an empty string if the PY_Result object is not an ERR type. params: result: PY_Result object title: title to use for building the error message format: error message format. Must be of the form "%s %s". See PYgetErrorFormat for an example.

PY_API void* PYgetCodeObjectForFunction ( void opaque_python_object)

Return a PyCodeObject * corresponding to the specified PyObject.

PY_API void* PYgetCodeObjectForPrevFrame ( )

Return a PyCodeObject * corresponding to the frame before the current eval frame.

PY_API const char* PYgetErrorFormat ( )

Returns the default error format string "%s\n%s\n" usable with PYformatError and PYprocessError.

PY_API const char* PYgetHoudiniModulePath ( )

Returns the absolute path to Houdini's Python modules.

PY_API PY_EvaluationContext& PYgetPythonExpressionEvaluationContext ( )

We don't want to have to prefix things with "hou." in expressions. So, we create a separate evaluation context for expressions where "from hou import *" has been run.

PY_API PY_Result PYimportModuleFromString ( const char *  module_name,
const char *  module_contents 
)

Given a string containing the contents of a module and the module's name, compile the string and import that as a module. If no exception occurred, the result type is none.

PY_API void PYlogError ( PY_Result const result,
const char *  title 
)

Log result on std error, doesn't print anything if result is not an ERR type. The error message is based on the format returned by PYgetErrorFormat() params: result: PY_Result object title: title to use for building the error message

template<typename FUNC >
void PYprocessError ( PY_Result const result,
const char *  title,
const char *  format,
FUNC const process_func 
)

Process a python error object with a user function. PYprocessError creates an error message and passes it to process_func for processing. The process_func function would typically log the error on the console, in a file or throw an exception.

params: result: PY_Result object set to ERR. Function does nothing if not set to ERR. title: title of the error message format: error message format. Must be of the form "%s %s". See PYgetErrorFormat for an example. process_func: user function to process the error, takes a pre-formatted error string of type const char*.

Definition at line 214 of file PY_Python.h.

PY_API PY_Result PYrunPythonExpression ( const char *  python_code,
PY_Result::Type  desired_result_type,
PY_EvaluationContext context = NULL 
)

Expressions cannot contain multiple statements (defs, classes, print statements, etc.) and they cannot contain multiple expressions. The *InNewContext version creates a new PY_EvaluationContext, run the Python code inside it, and destroys the context afterward.

PY_API PY_Result PYrunPythonExpressionAndExpectNoErrors ( const char *  python_code,
PY_Result::Type  desired_result_type,
const char *  heading = NULL,
PY_EvaluationContext context = NULL 
)

Evaluate a Python expression that should not generate any exceptions. If an exception is raised the traceback will be displayed to the user, prefixed by the specified heading.

PY_API PY_Result PYrunPythonExpressionInNewContext ( const char *  python_code,
PY_Result::Type  desired_result_type 
)
PY_API bool PYrunPythonExpressionOfExactType ( const char *  python_code,
PY_Result::Type  desired_result_type,
PY_Result result,
const char *  error_heading,
const char *  error_for_wrong_type,
PY_EvaluationContext context = NULL 
)

Evaluate a Python expression that should not generate any exceptions and should evaluate to an exact type. If an exception is raised a traceback is displayed with the specified heading. If the wrong type is returned, the specified error message is displayed with the heading. Returns true on success and stores the result in "result".

PY_API PY_Result PYrunPythonStatements ( const char *  python_code,
PY_EvaluationContext context = NULL 
)

The result type from running statements in the current thread can be none (indicating normal completion), error, or exit. The *InNewContext version creates a new PY_EvaluationContext, run the Python code inside it, and destroys the context afterward.

PY_API PY_Result PYrunPythonStatements ( const char *  python_code,
int  argc,
char *  argv[],
PY_EvaluationContext context = NULL,
bool  update_path = true 
)

This version of PYrunPythonStatements will set Python's sys.argv to the arguments you supply. argv[0] will be the name of the Python file.

PY_API bool PYrunPythonStatementsAndExpectNoErrors ( const char *  python_code,
const char *  heading = NULL,
PY_EvaluationContext context = NULL 
)

Run Python code that should not generate any exceptions. If an exception is raised the traceback will be displayed to the user, prefixed by the specified heading.

Examples:
HOM/ObjNode_setSelectable.C.
PY_API PY_Result PYrunPythonStatementsFromFile ( const char *  filename,
PY_EvaluationContext context = NULL 
)

The argv version of PYrunPythonStatementsFromFile will set Python's sys.argv to the arguments you supply. argv[0] will be the name of the Python file.

PY_API PY_Result PYrunPythonStatementsFromFile ( int  argc,
char *  argv[],
PY_EvaluationContext context = NULL,
bool  update_path = true 
)
PY_API UT_String PYrunPythonStatementsFromFileInNewThread ( const char *  file_name)
PY_API UT_String PYrunPythonStatementsFromFileInNewThread ( int  argc,
char *  argv[],
bool  update_path = true 
)
PY_API PY_Result PYrunPythonStatementsInNewContext ( const char *  python_code)
PY_API bool PYrunPythonStatementsInNewContextAndExpectNoErrors ( const char *  python_code,
const char *  heading = NULL 
)
PY_API UT_String PYrunPythonStatementsInNewThread ( const char *  python_code)

A non-empty string is returned if there are parse errors, a new thread could not be started, or the file could not be loaded.

PY_API void PYsetAutoInitializeFromPython ( bool  auto_initialize)

This function controls whether running Python code automatically sets the HOM_Module implementation (by importing the hou Python module). Call PYsetAutoInitializeFromPython to false if you don't hou to be imported automatically; otherwise, it will. You must call this static method before running any Python code. Once any Python code is run, this setting has no effect.

PY_API void PYsetPythonTracebackDisplayCallback ( void(*)(const char *heading, const char *error_message)  callback)

Set a callback that will be invoked by PYrunPython*AndExpectNoErrors whenever an error occurs. If this callback is not set, the errors will be printed to the console. This callback provides an opportunity to pop up a dialog to display the errors.