[Telepathy] [Ulc-devs] Accessing Folks from python

Philip Withnall philip at tecnocode.co.uk
Mon Dec 5 11:17:47 PST 2011


On Mon, 2011-12-05 at 19:15 +0100, Frederik Elwert wrote:
> Hi Xavier,
> 
> thanks for the reply.
> 
> > Le vendredi 02 décembre 2011 à 10:21 +0100, Frederik Elwert a écrit :
> > > Now since we would prefer using python for our application, I was
> > > wondering if it is possible to access Folks from python. I could manage
> > > to import it from gi.repository, but it then fails during
> > > IndividualAggregator.prepare():
> > > 
> > >         from gi.repository import Folks
> > >         agg = Folks.IndividualAggregator()
> > >         agg.prepare()
> > >         Traceback (most recent call last):
> > >           File "<stdin>", line 1, in <module>
> > >           File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43,
> > >         in function
> > >             return info.invoke(*args, **kwargs)
> > >         TypeError: prepare() takes exactly 3 arguments (1 given)
> > > 
> > > I have seen that the generated c code has this function signature:
> > > 
> > >         void folks_individual_aggregator_prepare
> > >         (FolksIndividualAggregator* self, GAsyncReadyCallback
> > >         _callback_, gpointer _user_data_);
> > 
> > I don't think you can omit arguments with g-i/pygobject. The only
> > annotation that we can set is (allow-none) but even then you have to
> > pass 'None' to it.
> > 
> > agg.prepare(None, None) should work. otoh, you probably want to set a
> > callback to know when you can start using that aggregator...
> 
> It somehow seems to do something, but then segfaults:
> 
>         agg.prepare(None, None)
>         (process:5627): folks-DEBUG: Using built-in backends key file '/home/frederik/.local/share/folks/backends.ini' (override with environment variable FOLKS_BACKEND_STORE_KEY_FILE_PATH)
>         Speicherzugriffsfehler [segmentation fault in German]
> 
> I also get a segfault when passing a python function as callback.

Please provide a stacktrace (either here or as a bug against folks on
bugzilla.gnome.org) and we can take a look.

> It might be because I’m rather new to GI, but I am a bit confused by the
> API difference between C (prepare taking parameters) and Vala (prepare
> as instance method taking no parameters). First, I looked at the Vala
> API and assumed that Python would have a similar one.

The prepare() method is async (using GAsyncResult). It takes parameters
in C because that's the only way async methods can be implemented in C.
In Vala, however, the ‘async’ keyword is used instead. Since async
methods aren't supported in Python it uses the same parameters as the C
code.

Philip

> Regards,
> Frederik
> 
> _______________________________________________
> telepathy mailing list
> telepathy at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/telepathy

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 230 bytes
Desc: This is a digitally signed message part
URL: <http://lists.freedesktop.org/archives/telepathy/attachments/20111205/916a3f5d/attachment.pgp>


More information about the telepathy mailing list