0

Exception When Using IronPython with Shotgun API

I'm trying to use the pixomondo version of the shotgun api (https://github.com/Pixomondo/shotgun-python-api) from C# using IronPython 2.7.5, but I'm running into trouble. I've tried several different ways of calling my python code -- from an external .py file, embedded in C# as a string, etc...-- but I'm always running into the same problem. When importing shotgun_api_3, I get an"Object reference not set to an instance of an object." error.

C#

ScriptEngine engine = Python.CreateEngine(); 
ScriptSource script = engine.CreateScriptSourceFromFile("ShotgunClient.py");
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
code.Execute(scope); // It fails here!!!!!!!!!
Object shotgunClient = engine.Operations.Invoke(scope.GetVariable(" ShotgunClient"));
// connect to shotgun
var sg = engine.Operations.InvokeMember(shotgunClient, "Connect");

Python (ShotgunClient.py)

import sys 
sys.path.append(r"C:\Python27\Lib")
sys.path.append(r"C:\PathToShotgunAPI")
import shotgun_api3 as s

class ShotgunClient:

def Connect(self):
SERVER_PATH = ''
SCRIPT_NAME = ''
SCRIPT_KEY = ''
sg = s.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
return sg

Stacktrace

Exception thrown: 'System.NullReferenceException' in Microsoft.Dynamic.dll
ERROR: Object reference not set to an instance of an object.
   at IronPython.Runtime.LiteralParser.ParseString(Char[] text, Int32 start, Int32 length, Boolean isRaw, Boolean isUni, Boolean normalizeLineEndings)
   at IronPython.Compiler.Tokenizer.MakeStringToken(Char quote, Boolean isRaw, Boolean isUnicode, Boolean isBytes, Boolean isTriple, Int32 start, Int32 length)
   at IronPython.Compiler.Tokenizer.ContinueString(Char quote, Boolean isRaw, Boolean isUnicode, Boolean isBytes, Boolean isTriple, Int32 startAdd)
   at IronPython.Compiler.Tokenizer.ReadString(Char quote, Boolean isRaw, Boolean isUni, Boolean isBytes)
   at IronPython.Compiler.Tokenizer.ReadNameOrUnicodeString()
   at IronPython.Compiler.Tokenizer.Next()
   at IronPython.Compiler.Tokenizer.GetNextToken()
   at IronPython.Compiler.Parser.FetchLookahead()
   at IronPython.Compiler.Parser.AddTrailers(Expression ret, Boolean allowGeneratorExpression)
   at IronPython.Compiler.Parser.ParsePower()
   at IronPython.Compiler.Parser.ParseFactor()
   at IronPython.Compiler.Parser.ParseExpr(Int32 precedence)
   at IronPython.Compiler.Parser.ParseComparison()
   at IronPython.Compiler.Parser.ParseNotTest()
   at IronPython.Compiler.Parser.ParseAndTest()
   at IronPython.Compiler.Parser.ParseOrTest()
   at IronPython.Compiler.Parser.ParseExpression()
   at IronPython.Compiler.Parser.FinishArgumentList(Arg first)
   at IronPython.Compiler.Parser.FinishArgListOrGenExpr()
   at IronPython.Compiler.Parser.AddTrailers(Expression ret, Boolean allowGeneratorExpression)
   at IronPython.Compiler.Parser.ParsePower()
   at IronPython.Compiler.Parser.ParseFactor()
   at IronPython.Compiler.Parser.ParseExpr(Int32 precedence)
   at IronPython.Compiler.Parser.ParseComparison()
   at IronPython.Compiler.Parser.ParseNotTest()
   at IronPython.Compiler.Parser.ParseAndTest()
   at IronPython.Compiler.Parser.ParseOrTest()
   at IronPython.Compiler.Parser.ParseExpression()
   at IronPython.Compiler.Parser.ParseTestListAsExpr()
   at IronPython.Compiler.Parser.ParseExprStmt()
   at IronPython.Compiler.Parser.ParseSmallStmt()
   at IronPython.Compiler.Parser.ParseSimpleStmt()
   at IronPython.Compiler.Parser.ParseStmt()
   at IronPython.Compiler.Parser.ParseSuite()
   at IronPython.Compiler.Parser.ParseClassOrFuncBody()
   at IronPython.Compiler.Parser.ParseFuncDef()
   at IronPython.Compiler.Parser.ParseStmt()
   at IronPython.Compiler.Parser.ParseSuite()
   at IronPython.Compiler.Parser.ParseClassOrFuncBody()
   at IronPython.Compiler.Parser.ParseClassDef()
   at IronPython.Compiler.Parser.ParseStmt()
   at IronPython.Compiler.Parser.ParseSuite()
   at IronPython.Compiler.Parser.ParseIfStmtTest()
   at IronPython.Compiler.Parser.ParseIfStmt()
   at IronPython.Compiler.Parser.ParseStmt()
   at IronPython.Compiler.Parser.ParseFileWorker(Boolean makeModule, Boolean returnValue)
   at IronPython.Compiler.Parser.ParseFile(Boolean makeModule, Boolean returnValue)
   at IronPython.Runtime.PythonContext.ParseAndBindAst(CompilerContext context)
   at IronPython.Runtime.PythonContext.CompilePythonCode(SourceUnit sourceUnit, CompilerOptions options, ErrorSink errorSink)
   at IronPython.Runtime.PythonContext.GetScriptCode(SourceUnit sourceCode, String moduleName, ModuleOptions options, CompilationMode mode)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportWithNames(CodeContext context, String fullName, String[] names, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`5.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run1[T0,TRet](T0 arg0)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadPackageFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportNestedModule(CodeContext context, PythonModule module, String[] parts, Int32 current, List path)
   at IronPython.Runtime.Importer.ImportModuleFrom(CodeContext context, Object from, String[] parts, Int32 current)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`7.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run8[T0,T1,T2,T3,T4,T5,T6,T7,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
   at System.Dynamic.UpdateDelegates.UpdateAndExecute7[T0,T1,T2,T3,T4,T5,T6,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportWithNames(CodeContext context, String fullName, String[] names, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`5.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run1[T0,TRet](T0 arg0)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportStar(CodeContext context, String fullName, Int32 level)
   at Microsoft.Scripting.Interpreter.ActionCallInstruction`3.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run1[T0,TRet](T0 arg0)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`7.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run7[T0,T1,T2,T3,T4,T5,T6,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportWithNames(CodeContext context, String fullName, String[] names, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`5.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run1[T0,TRet](T0 arg0)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadPackageFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, String name)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`7.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run7[T0,T1,T2,T3,T4,T5,T6,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportBottom(CodeContext context, String fullName, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
   at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
   at IronPython.Compiler.PythonScriptCode.Run(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at Microsoft.Scripting.Hosting.CompiledCode.Execute(ScriptScope scope)

It's failing on the import statement. If I remove it, I can get past the code.Execute() call, but then I don't have access to the shotgun api. Should I be calling it in a different way? Has anyone run into a similar problem? Any help would be greatly appreciated. Thanks, Dan.

0 comments

Please sign in to leave a comment.