[PyQt] SIP: deriving a python class from a C++ ABC results in a TypeError exception

2011-07-02 Thread Demetrius Cassidy
I have a C++ class which is declared with pure virtual methods, but if I
derive from this class in python and implement the pure virtual methods, I
get an exception:
TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or
sub-classed

My python class is declared as following:

class PCSSEndPoint(OpalPCSSEndPoint):
  def __init__(self):
  super(OpalPCSSEndPoint, self).__init__()

def OnShowIncoming(self, connection):
return True

def OnShowOutgoing(self, connection):
return True

def GetMediaFormats(self):
  return []


SIP definitions:

class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/
{

/**Call back to indicate that remote is ringing.
If false is returned the call is aborted.

The default implementation is pure.
*/
virtual PBoolean OnShowIncoming(
const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event
) = 0;

/**Call back to indicate that remote is ringing.
If false is returned the call is aborted.

The default implementation is pure.
*/
virtual PBoolean OnShowOutgoing(
const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event
) = 0;

};

Now the base class of OpalPCSSEndPoint is also an ABC, as it derives from an
ABC but does not re-define the pure virtual function:

class OpalLocalEndPoint : OpalEndPoint /Abstract/
{
  ...
};

class OpalEndPoint /Abstract/
{
virtual OpalMediaFormatList GetMediaFormats() const = 0;
};

I tried removing  /Abstract/ from OpalLocalEndPoint, but it made no
difference.  Any idea what's wrong in this scenario? The only way this
works, is if I subclass OpalPCSSEndPoint in C++ and then in Python create a
class derived from my OpalPCSSEndPoint subclass.
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Re: [PyQt] SIP: deriving a python class from a C++ ABC results in a TypeError exception

2011-07-02 Thread Demetrius Cassidy
Actually I made a small mistake, OpalLocalEndPoint has a GetMediaFormats
implementation, but the issue remains.

class OpalLocalEndPoint : OpalEndPoint
{
  virtual OpalMediaFormatList GetMediaFormats() const;
};

On Sat, Jul 2, 2011 at 5:39 PM, Demetrius Cassidy wrote:

> I have a C++ class which is declared with pure virtual methods, but if I
> derive from this class in python and implement the pure virtual methods, I
> get an exception:
> TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or
> sub-classed
>
> My python class is declared as following:
>
> class PCSSEndPoint(OpalPCSSEndPoint):
>   def __init__(self):
>   super(OpalPCSSEndPoint, self).__init__()
>
> def OnShowIncoming(self, connection):
> return True
>
> def OnShowOutgoing(self, connection):
> return True
>
> def GetMediaFormats(self):
>   return []
>
>
> SIP definitions:
>
> class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/
> {
>
> /**Call back to indicate that remote is ringing.
> If false is returned the call is aborted.
>
> The default implementation is pure.
> */
> virtual PBoolean OnShowIncoming(
> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event
> ) = 0;
>
> /**Call back to indicate that remote is ringing.
> If false is returned the call is aborted.
>
> The default implementation is pure.
> */
> virtual PBoolean OnShowOutgoing(
> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having event
> ) = 0;
>
> };
>
> Now the base class of OpalPCSSEndPoint is also an ABC, as it derives from
> an ABC but does not re-define the pure virtual function:
>
> class OpalLocalEndPoint : OpalEndPoint /Abstract/
> {
>   ...
> };
>
> class OpalEndPoint /Abstract/
> {
> virtual OpalMediaFormatList GetMediaFormats() const = 0;
> };
>
> I tried removing  /Abstract/ from OpalLocalEndPoint, but it made no
> difference.  Any idea what's wrong in this scenario? The only way this
> works, is if I subclass OpalPCSSEndPoint in C++ and then in Python create a
> class derived from my OpalPCSSEndPoint subclass.
>
>
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Re: [PyQt] SIP: deriving a python class from a C++ ABC results in a TypeError exception

2011-07-02 Thread Phil Thompson
On Sat, 2 Jul 2011 17:39:14 +, Demetrius Cassidy

wrote:
> I have a C++ class which is declared with pure virtual methods, but if I
> derive from this class in python and implement the pure virtual methods,
I
> get an exception:
> TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or
> sub-classed
> 
> My python class is declared as following:
> 
> class PCSSEndPoint(OpalPCSSEndPoint):
>   def __init__(self):
>   super(OpalPCSSEndPoint, self).__init__()

That should be super(PCSSEndPoint, self).__init__()

> def OnShowIncoming(self, connection):
> return True
> 
> def OnShowOutgoing(self, connection):
> return True
> 
> def GetMediaFormats(self):
>   return []
> 
> 
> SIP definitions:
> 
> class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/
> {
> 
> /**Call back to indicate that remote is ringing.
> If false is returned the call is aborted.
> 
> The default implementation is pure.
> */
> virtual PBoolean OnShowIncoming(
> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
event
> ) = 0;
> 
> /**Call back to indicate that remote is ringing.
> If false is returned the call is aborted.
> 
> The default implementation is pure.
> */
> virtual PBoolean OnShowOutgoing(
> const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
event
> ) = 0;
> 
> };
> 
> Now the base class of OpalPCSSEndPoint is also an ABC, as it derives
from
> an
> ABC but does not re-define the pure virtual function:
> 
> class OpalLocalEndPoint : OpalEndPoint /Abstract/
> {
>   ...
> };
> 
> class OpalEndPoint /Abstract/
> {
> virtual OpalMediaFormatList GetMediaFormats() const = 0;
> };
> 
> I tried removing  /Abstract/ from OpalLocalEndPoint, but it made no
> difference.  Any idea what's wrong in this scenario? The only way this
> works, is if I subclass OpalPCSSEndPoint in C++ and then in Python
create a
> class derived from my OpalPCSSEndPoint subclass.

/Abstract/ is the cause of the problem. It doesn't mean that the C++ is an
ABC, it means that the class contains other (unspecified) abstract methods.

Phil
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


Re: [PyQt] SIP: deriving a python class from a C++ ABC results in a TypeError exception

2011-07-02 Thread Demetrius Cassidy
CCing mailing list

On Sat, Jul 2, 2011 at 10:50 PM, Demetrius Cassidy wrote:

> On Sat, Jul 2, 2011 at 10:45 PM, Phil Thompson <
> p...@riverbankcomputing.com> wrote:
>
>> On Sat, 2 Jul 2011 17:39:14 +, Demetrius Cassidy
>> 
>> wrote:
>> > I have a C++ class which is declared with pure virtual methods, but if I
>> > derive from this class in python and implement the pure virtual methods,
>> I
>> > get an exception:
>> > TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or
>> > sub-classed
>> >
>> > My python class is declared as following:
>> >
>> > class PCSSEndPoint(OpalPCSSEndPoint):
>> >   def __init__(self):
>> >   super(OpalPCSSEndPoint, self).__init__()
>>
>> That should be super(PCSSEndPoint, self).__init__()
>>
>
>   The super thing was a typo.
>
>>
>> > def OnShowIncoming(self, connection):
>> > return True
>> >
>> > def OnShowOutgoing(self, connection):
>> > return True
>> >
>> > def GetMediaFormats(self):
>> >   return []
>> >
>> >
>> > SIP definitions:
>> >
>> > class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/
>> > {
>> >
>> > /**Call back to indicate that remote is ringing.
>> > If false is returned the call is aborted.
>> >
>> > The default implementation is pure.
>> > */
>> > virtual PBoolean OnShowIncoming(
>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
>> event
>> > ) = 0;
>> >
>> > /**Call back to indicate that remote is ringing.
>> > If false is returned the call is aborted.
>> >
>> > The default implementation is pure.
>> > */
>> > virtual PBoolean OnShowOutgoing(
>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
>> event
>> > ) = 0;
>> >
>> > };
>> >
>> > Now the base class of OpalPCSSEndPoint is also an ABC, as it derives
>> from
>> > an
>> > ABC but does not re-define the pure virtual function:
>> >
>> > class OpalLocalEndPoint : OpalEndPoint /Abstract/
>> > {
>> >   ...
>> > };
>> >
>> > class OpalEndPoint /Abstract/
>> > {
>> > virtual OpalMediaFormatList GetMediaFormats() const = 0;
>> > };
>> >
>> > I tried removing  /Abstract/ from OpalLocalEndPoint, but it made no
>> > difference.  Any idea what's wrong in this scenario? The only way this
>> > works, is if I subclass OpalPCSSEndPoint in C++ and then in Python
>> create a
>> > class derived from my OpalPCSSEndPoint subclass.
>>
>> /Abstract/ is the cause of the problem. It doesn't mean that the C++ is an
>> ABC, it means that the class contains other (unspecified) abstract
>> methods.
>>
>> Phil
>>
>
> So if /Abstract/ does not mean the class has pure virtual methods and
> cannot be instantiated itself, in which scenario should it be used? I'm a
> little confused here.
>
>
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Re: [PyQt] SIP: deriving a python class from a C++ ABC results in a TypeError exception

2011-07-02 Thread Demetrius Cassidy
I think I answered my own question after re-reading the annotation docs.
Thanks.

On Sat, Jul 2, 2011 at 10:52 PM, Demetrius Cassidy wrote:

> CCing mailing list
>
>
> On Sat, Jul 2, 2011 at 10:50 PM, Demetrius Cassidy 
> wrote:
>
>> On Sat, Jul 2, 2011 at 10:45 PM, Phil Thompson <
>> p...@riverbankcomputing.com> wrote:
>>
>>> On Sat, 2 Jul 2011 17:39:14 +, Demetrius Cassidy
>>> 
>>> wrote:
>>> > I have a C++ class which is declared with pure virtual methods, but if
>>> I
>>> > derive from this class in python and implement the pure virtual
>>> methods,
>>> I
>>> > get an exception:
>>> > TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or
>>> > sub-classed
>>> >
>>> > My python class is declared as following:
>>> >
>>> > class PCSSEndPoint(OpalPCSSEndPoint):
>>> >   def __init__(self):
>>> >   super(OpalPCSSEndPoint, self).__init__()
>>>
>>> That should be super(PCSSEndPoint, self).__init__()
>>>
>>
>>   The super thing was a typo.
>>
>>>
>>> > def OnShowIncoming(self, connection):
>>> > return True
>>> >
>>> > def OnShowOutgoing(self, connection):
>>> > return True
>>> >
>>> > def GetMediaFormats(self):
>>> >   return []
>>> >
>>> >
>>> > SIP definitions:
>>> >
>>> > class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/
>>> > {
>>> >
>>> > /**Call back to indicate that remote is ringing.
>>> > If false is returned the call is aborted.
>>> >
>>> > The default implementation is pure.
>>> > */
>>> > virtual PBoolean OnShowIncoming(
>>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
>>> event
>>> > ) = 0;
>>> >
>>> > /**Call back to indicate that remote is ringing.
>>> > If false is returned the call is aborted.
>>> >
>>> > The default implementation is pure.
>>> > */
>>> > virtual PBoolean OnShowOutgoing(
>>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having
>>> event
>>> > ) = 0;
>>> >
>>> > };
>>> >
>>> > Now the base class of OpalPCSSEndPoint is also an ABC, as it derives
>>> from
>>> > an
>>> > ABC but does not re-define the pure virtual function:
>>> >
>>> > class OpalLocalEndPoint : OpalEndPoint /Abstract/
>>> > {
>>> >   ...
>>> > };
>>> >
>>> > class OpalEndPoint /Abstract/
>>> > {
>>> > virtual OpalMediaFormatList GetMediaFormats() const = 0;
>>> > };
>>> >
>>> > I tried removing  /Abstract/ from OpalLocalEndPoint, but it made no
>>> > difference.  Any idea what's wrong in this scenario? The only way this
>>> > works, is if I subclass OpalPCSSEndPoint in C++ and then in Python
>>> create a
>>> > class derived from my OpalPCSSEndPoint subclass.
>>>
>>> /Abstract/ is the cause of the problem. It doesn't mean that the C++ is
>>> an
>>> ABC, it means that the class contains other (unspecified) abstract
>>> methods.
>>>
>>> Phil
>>>
>>
>> So if /Abstract/ does not mean the class has pure virtual methods and
>> cannot be instantiated itself, in which scenario should it be used? I'm a
>> little confused here.
>>
>>
>
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt