Example #1
0
        public void ExceptionDecodedNoInstance()
        {
            PyObjectConversions.RegisterDecoder(new InstancelessExceptionDecoder());
            using var scope = Py.CreateScope();
            var error = Assert.Throws <ValueErrorWrapper>(() => PythonEngine.Exec(
                                                              $"[].__iter__().__next__()"));

            Assert.AreEqual(TestExceptionMessage, error.Message);
        }
Example #2
0
        public void ExceptionDecoded()
        {
            PyObjectConversions.RegisterDecoder(new ValueErrorCodec());
            using var scope = Py.CreateScope();
            var error = Assert.Throws <ValueErrorWrapper>(()
                                                          => PythonEngine.Exec($"raise ValueError('{TestExceptionMessage}')"));

            Assert.AreEqual(TestExceptionMessage, error.Message);
        }
Example #3
0
        public void As_Object_AffectedByDecoders()
        {
            var everythingElseToSelf = new EverythingElseToSelfDecoder();

            PyObjectConversions.RegisterDecoder(everythingElseToSelf);

            var pyObj   = PythonEngine.Eval("iter");
            var decoded = pyObj.As <object>();

            Assert.AreSame(everythingElseToSelf, decoded);
        }
Example #4
0
        /// <summary>
        /// Registers custom encoders and decoders with the Python.NET runtime
        /// </summary>
        private static void InitializeEncoders()
        {
            var shared   = new object[] { new BigIntegerEncoderDecoder(), new ListEncoderDecoder() };
            var encoders = shared.Cast <IPyObjectEncoder>().ToArray();
            var decoders = shared.Cast <IPyObjectDecoder>().Concat(new IPyObjectDecoder[]
            {
                new DictionaryDecoder()
            }).ToArray();

            Array.ForEach(encoders, e => PyObjectConversions.RegisterEncoder(e));
            Array.ForEach(decoders, d => PyObjectConversions.RegisterDecoder(d));
        }
Example #5
0
        private void Setup(bool force = false)
        {
            if (_isInitialized && !force) return;
            _isInitialized = true;

            DateTimeCodec.Initialize(this);
            NumpyCodec.Initialize(this);
            PandasCodec.Initialize(this);

            PyObjectConversions.RegisterEncoder(this);
            PyObjectConversions.RegisterDecoder(this);
        }
Example #6
0
        public void ExceptionEncoded()
        {
            PyObjectConversions.RegisterEncoder(new ValueErrorCodec());
            void CallMe() => throw new ValueErrorWrapper(TestExceptionMessage);

            var callMeAction = new Action(CallMe);

            using var scope = Py.CreateScope();
            scope.Exec(@"
def call(func):
  try:
    func()
  except ValueError as e:
    return str(e)
");
            var    callFunc = scope.Get("call");
            string message  = callFunc.Invoke(callMeAction.ToPython()).As <string>();

            Assert.AreEqual(TestExceptionMessage, message);
        }
Example #7
0
 public static void Register()
 {
     PyObjectConversions.RegisterEncoder(Instance);
     PyObjectConversions.RegisterDecoder(Instance);
 }
Example #8
0
 public static void Setup()
 {
     PyObjectConversions.RegisterDecoder(new DateTimeDecoder());
 }
Example #9
0
 public static void Reset()
 {
     PyObjectConversions.Reset();
 }