Visitar URL original
"TypeError: No method matches given arguments" error for a virtual method with a template parameter · Issue #1522 · pythonnet/pythonnet · GitHub
Skip to content

"TypeError: No method matches given arguments" error for a virtual method with a template parameter #1522

Description

@rayrapetyan

Environment

Details

Trying to re-implement example from here using Python.

Everything works fine except this line of code:

    slideMasterPart1.AddPart(slideLayoutPart1, "rId1");

There are two definitions of AddPart:

    public virtual T AddPart<T>(T part)  where T : OpenXmlPart
    public virtual T AddPart<T>(T part, string id)  where T : OpenXmlPart

slideMasterPart1.AddPart.Overloads output:

T AddPart[T](T)
T AddPart[T](T, System.String)

What works:

    slideMasterPart1.AddPart(slideLayoutPart1)
    slideMasterPart1.AddPart[SlideLayoutPart](slideLayoutPart1)

What doesn't work:

    slideMasterPart1.AddPart(slideLayoutPart1, "rId1")
    slideMasterPart1.AddPart(slideLayoutPart1, System.String("rId1"))
    slideMasterPart1.AddPart[SlideLayoutPart](slideLayoutPart1, "rId1")

Error:

Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T

The above exception was the direct cause of the following exception:

System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---

The above exception was the direct cause of the following exception:

System.AggregateException: One or more errors occurred. (DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String)) ---> System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
---> (Inner Exception #0) System.ArgumentException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T in method T AddPart[T](T, System.String) ---> Python.Runtime.PythonException: DocumentFormat.OpenXml.Packaging.SlideLayoutPart value cannot be converted to T
   --- End of inner exception stack trace ---<---

The above exception was the direct cause of the following exception:
...
slideMasterPart1.AddPart(slideLayoutPart1, "rId1");
TypeError: No method matches given arguments for AddPart: (<class 'DocumentFormat.OpenXml.Packaging.SlideLayoutPart'>, <class 'str'>)

mcve:

import clr

clr.AddReference('DocumentFormat.OpenXml')

from DocumentFormat.OpenXml.Packaging import (
    SlideLayoutPart,
    SlideMasterPart,
)

slideLayoutPart1: SlideLayoutPart = SlideLayoutPart()
slideMasterPart1: SlideMasterPart = SlideMasterPart()
slideMasterPart1.AddPart(slideLayoutPart1)  # this works OK
slideMasterPart1.AddPart(slideLayoutPart1, "rId1")  # this raises a runtime exception

So it's only when the second (string) parameter is provided, the first can't be converted. Looks like a pythonnet issue.

Activity

  1. filmor commented on Sep 24, 2021

    @filmor
    Member

    Thank you for the detailed report. I have looked into this, and I think the culprit is mixing of generic and non-generic parameters.

  2. added this to the 3.0.0 milestone on Sep 28, 2021
  3. self-assigned this
    on Sep 28, 2021
  4. LeeDongGeon1996 commented on Dec 10, 2021

    @LeeDongGeon1996

    Same issue with me. Is there any progress on this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions