In an application I'm working on, I'm trying to write an IronPython script that 
queries Azure Tables, returning a result into a class defined in Python.  I 
keep running into the following error when I do this:
Unhandled Exception: System.InvalidOperationException: The type 
'IronPython.NewTypes.IPAzureTest.BaseModelClass_1$1' is not supported by the 
client library.   at System.Data.Services.Client.ClientType.Create(Type type, 
Boolean expectModelType)   at 
System.Data.Services.Client.AtomMaterializer.ResolveByCreating(AtomEntry entry, 
Type expectedEntryType)   at 
System.Data.Services.Client.AtomMaterializer.ResolveOrCreateInstance(AtomEntry 
entry, Type expectedEntryType)   at 
System.Data.Services.Client.AtomMaterializerInvoker.DirectMaterializePlan(Object
 materializer, Object entry, Type expectedEntryType)   at 
System.Data.Services.Client.ProjectionPlan.Run(AtomMaterializer materializer, 
AtomEntry entry, Type expectedType)   at 
System.Data.Services.Client.AtomMaterializer.Read()   at 
System.Data.Services.Client.MaterializeAtom.MoveNextInternal()   at 
System.Data.Services.Client.MaterializeAtom.MoveNext()   at 
System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()   at 
System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)   at 
System.Data.Services.Client.DataServiceQueryProvider.ReturnSingleton[TElement](Expression
 expression)   at 
System.Data.Services.Client.DataServiceQueryProvider.Execute[TResult](Expression
 expression)   at System.Linq.Queryable.Single[TSource](IQueryable`1 source)   
at Microsoft.Scripting.Interpreter.FuncCallInstruction`2.Run(InterpretedFrame 
frame)   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame 
frame)   at Microsoft.Scripting.Interpreter.LightLambda.Run3[T0,T1,T2,TRet](T0 
arg0, T1 arg1, T2 arg2)   at 
System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 
arg0, T1 arg1)   at 
Microsoft.Scripting.Interpreter.DynamicInstruction`3.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.SourceUnit.Execute(Scope scope, ErrorSink errorSink)   at 
Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)   at 
IPAzureTest.IPScriptHost.RunEdit() in 
d:\Development\Utilities\IPAzureTest\IPAzureTest\IPScriptHost.cs:line 31   at 
IPAzureTest.Program.Main(String[] args) in 
d:\Development\Utilities\IPAzureTest\IPAzureTest\Program.cs:line 12

If I define the model class in C#, I do not run into this issue.  The data I'm 
working with changes often.  Being able to define the model in Python will make 
it so new builds are not necessary when additional tables are added.  
Here is what my python script looks like:
import clrimport 
Systemclr.AddReference("System.Core")clr.ImportExtensions(System.Linq)
class MyTable(AzureTableService.BaseModelClass):        def __new__(self, 
partitionKey, rowKey):                self.PartitionKey = partitionKey          
      self.RowKey = rowKey            return super.__new__(self)                
      MyTableDetails = "";
y = AzureTableService.GetAzureTableQuery[MyTable]("MyTable")z = y.Where(lambda 
c: c.PartitionKey == "10" and c.RowKey == "10040").Single()
print(z.MyTableDetails)
And my C# Code:
    public class AzureTableService {
        private CloudStorageAccount mStorageAccount;
        public AzureTableService() {
            CloudStorageAccount.SetConfigurationSettingPublisher((configName, 
configSetter) => {
                var connectionString = 
ConfigurationManager.AppSettings[configName];
                configSetter(connectionString);
            });
            mStorageAccount = 
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");        
        }
                
        private TableServiceContext AzureTableServiceContext {
            get {
                var context = 
mStorageAccount.CreateCloudTableClient().GetDataServiceContext();
                context.IgnoreResourceNotFoundException = true;
                return context;
            }
        }
        public IQueryable<T> GetAzureTableQuery<T>(string TableName) {
            return AzureTableServiceContext.CreateQuery<T>(TableName);
        }
 
        public class BaseModelClass : TableServiceEntity {
            public BaseModelClass(string partitionKey, string rowKey) : 
base(partitionKey, rowKey) { }
            public BaseModelClass() : base(Guid.NewGuid().ToString(), 
String.Empty) { }
        }
 
        public class MyTable : TableServiceEntity {
            public MyTable(string partitionKey, string rowKey) : 
base(partitionKey, rowKey) { }
            public MyTable() : base(Guid.NewGuid().ToString(), String.Empty) { }
            public string FeeScheduleDetails { get; set; }
        }
    }
If I use MyTable define in C#, it works fine.  By using the one defined in 
Python throws the exception.  Can anyone point me in the right direction?
                                          
_______________________________________________
Ironpython-users mailing list
Ironpython-users@python.org
http://mail.python.org/mailman/listinfo/ironpython-users

Reply via email to