Difference between revisions of "D-Bus service for Apertium"

From Apertium
Jump to navigation Jump to search
m (Text replacement - "(chat|irc)\.freenode\.net" to "irc.oftc.net")
 
(17 intermediate revisions by 9 users not shown)
Line 1: Line 1:
 
{{TOCD}}
 
{{TOCD}}
 
[http://dbus.freedesktop.org/ D-Bus] is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.
 
[http://dbus.freedesktop.org/ D-Bus] is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.
 
 
We have started developing simple D-Bus bindings for Apertium which allow for:
 
We have started developing simple D-Bus bindings for Apertium which allow for:
 
* discovery of details of the current Apertium installation and,
 
* discovery of details of the current Apertium installation and,
Line 16: Line 15:
   
 
==Installing==
 
==Installing==
  +
  +
'''Note:''' After Apertium's migration to GitHub, this tool is '''read-only''' on the SourceForge repository and does not exist on GitHub. If you are interested in migrating this tool to GitHub, see [[Migrating tools to GitHub]].
   
 
The package is available from [[SVN]] in the <code>apertium-dbus</code> module. The process for installation is the standard:
 
The package is available from [[SVN]] in the <code>apertium-dbus</code> module. The process for installation is the standard:
  +
  +
<pre>
  +
$ svn co https://svn.code.sf.net/p/apertium/svn/trunk/apertium-dbus
  +
</pre>
   
 
<pre>
 
<pre>
 
$ ./autogen.sh
 
$ ./autogen.sh
$ ./configure
 
 
$ make
 
$ make
 
$ make install
 
$ make install
 
</pre>
 
</pre>
   
  +
The current package is in the process of being ported to Python3, but should work. Do "svn up -r25849" if you want to get the last working Python2 version instead.
  +
  +
===Check that it works===
 
You can check that the bindings work by issuing the command:
 
You can check that the bindings work by issuing the command:
 
:<code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code>
 
:<code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code>
Line 40: Line 47:
 
</pre>
 
</pre>
   
  +
To translate from the command line (assuming apertium-en-ca is installed), try e.g.
If this doesn't work, then it's quite possible that a Python error from our side snuck in. Try running info.py directly; that is
 
  +
<pre>
  +
$ dbus-send --print-reply --dest=org.apertium.mode / org.apertium.Translate.translate string:en-ca dict:string:string:"mark_unknown","true" string:'My hoovercraft is full of eels'
  +
</pre>
  +
 
If the above two commannds don't work, then it's quite possible that a Python error from our side snuck in. Try running info.py directly; that is
 
:<code>python info.py -p /usr/local</code>
 
:<code>python info.py -p /usr/local</code>
where the prefix for Apertium in the above example is <code>/usr/local</code>. If you get a Python error, please post the error on this page or post a bug report in [http://xixona.dlsi.ua.es/bugzilla/ our bug tracker]. If the service starts up without errors, try executing
+
where the prefix for Apertium in the above example is <code>/usr/local</code>. If you get a Python error, please post the error on this page or post a bug report in [http://bugs.apertium.org/cgi-bin/bugzilla/index.cgi our bug tracker]. If the service starts up without errors, try executing
 
:<code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code>
 
:<code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code>
 
again. If there is no output, then open a new terminal and run
 
again. If there is no output, then open a new terminal and run
Line 48: Line 60:
 
This neat utility shows you the activity on the D-Bus. Now try executing <code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code> again.
 
This neat utility shows you the activity on the D-Bus. Now try executing <code>dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes</code> again.
   
If you have no luck, come and talk to us in <code>#apertium</code> at <code>irc.freenode.net</code>
+
If you have no luck, come and talk to us in <code>#apertium</code> at <code>irc.oftc.net</code>
   
 
==Installing into a prefix==
 
==Installing into a prefix==
Line 74: Line 86:
 
* <code>/usr/share/dbus-1/services/</code> &mdash; DBUS <code>.service</code> files.
 
* <code>/usr/share/dbus-1/services/</code> &mdash; DBUS <code>.service</code> files.
 
* <code>/usr/share/apertium/dbus-1/</code> &mdash; Python code that actually does the service (<code>info.py</code> and <code>mode.py</code>)
 
* <code>/usr/share/apertium/dbus-1/</code> &mdash; Python code that actually does the service (<code>info.py</code> and <code>mode.py</code>)
  +
  +
==Examples==
  +
  +
There are some simple examples in various languages on the page [[D-Bus examples]].
   
 
==External links==
 
==External links==
Line 80: Line 96:
   
 
[[Category:Development]]
 
[[Category:Development]]
  +
[[Category:Services]]
  +
[[Category:Documentation in English]]

Latest revision as of 06:27, 27 May 2021

D-Bus is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier. We have started developing simple D-Bus bindings for Apertium which allow for:

  • discovery of details of the current Apertium installation and,
  • translations via a programmatic interface.

The D-Bus bindings are needed for some of the tools, such as Apertium-view and Apertium-tolk.

Prerequisites[edit]

  • apertium (>= 3.0.0)
  • python
  • dbus
  • python-dbus

Installing[edit]

Note: After Apertium's migration to GitHub, this tool is read-only on the SourceForge repository and does not exist on GitHub. If you are interested in migrating this tool to GitHub, see Migrating tools to GitHub.

The package is available from SVN in the apertium-dbus module. The process for installation is the standard:

$ svn co https://svn.code.sf.net/p/apertium/svn/trunk/apertium-dbus
$ ./autogen.sh
$ make 
$ make install

The current package is in the process of being ported to Python3, but should work. Do "svn up -r25849" if you want to get the last working Python2 version instead.

Check that it works[edit]

You can check that the bindings work by issuing the command:

dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes

This should return an array of strings of all the Apertium modes installed on your system. It should look something like

$ dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes 
method return sender=:1.567 -> dest=:1.599 reply_serial=2
   array [
      string "en-ca"
      string "ca-en"
      string "en-af"
      string "af-en"
   ]

To translate from the command line (assuming apertium-en-ca is installed), try e.g.

$ dbus-send --print-reply --dest=org.apertium.mode / org.apertium.Translate.translate string:en-ca dict:string:string:"mark_unknown","true" string:'My hoovercraft is full of eels'

If the above two commannds don't work, then it's quite possible that a Python error from our side snuck in. Try running info.py directly; that is

python info.py -p /usr/local

where the prefix for Apertium in the above example is /usr/local. If you get a Python error, please post the error on this page or post a bug report in our bug tracker. If the service starts up without errors, try executing

dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes

again. If there is no output, then open a new terminal and run

dbus-monitor.

This neat utility shows you the activity on the D-Bus. Now try executing dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes again.

If you have no luck, come and talk to us in #apertium at irc.oftc.net

Installing into a prefix[edit]

This is unfinished
  • Do: mkdir -p <prefix>/share/dbus-1/services/
  • Make a session-local.conf file like it says here under "" Configuration Information"".
    • Change the <servicedir> element value to <prefix>/share/dbus-1/services/
  • Restart dbus. /etc/init.d/dbus restart
  • Log out and log back in again

Interfaces[edit]

Currently, Apertium offers two D-Bus services:

  • org.apertium.info has a single object /, which offers rudimentary information about the Apertium installation.
  • org.apertium.translate contains an object for each Apertium mode installed in the system.

Issues[edit]

If you make a change to any of the D-Bus configuration files, you will need to restart both the system-wide and session D-Bus daemons. The system-wide daemon can be restarted on a Debian/Ubuntu system with:

  • /etc/init.d/dbus restart

The only real way to restart your session deamon is to logout and log back in again. You will likely run into strange problems if you attempt to kill the session D-Bus daemon.

Filesystem layout[edit]

  • /usr/share/dbus-1/services/ — DBUS .service files.
  • /usr/share/apertium/dbus-1/ — Python code that actually does the service (info.py and mode.py)

Examples[edit]

There are some simple examples in various languages on the page D-Bus examples.

External links[edit]