Reference OParl Client implementation

konstin ba1eff4f34 Remove unecessary method wrapping 6 years ago
.tx 445576cf86 Add transifex client config 6 years ago
examples 3dcf150e8d client: resolve signal takes HTTP error code 7 years ago
po cfe245aa75 Move language list detection to external python script 6 years ago
scripts cfe245aa75 Move language list detection to external python script 6 years ago
src ba1eff4f34 Remove unecessary method wrapping 6 years ago
test 88f410c2f1 Remove debug check 6 years ago
.gitignore e83239311e i18n: got everything to compile 7 years ago
LICENSE f1c2c0d406 added lgp 7 years ago
README.md f6f66aaf70 Add info about l10n/i18n to readme 6 years ago
meson.build 168c1c5178 Adjust meson required version to the one mentioned in the readme 6 years ago
meson_options.txt 7679b7e6b2 bump copyright years 7 years ago
oparl-0.2.deps e59f436950 added a vala dependency file 7 years ago

README.md

liboparl

You are laying eyes on liboparl. A client implementation of the OParl-1.0 specification. It's your easy way to access endpoints in a straightforward fashion.

Features

  • Parsing all OParl objects
  • Check syntactic spec conformity - types and fieldnames are correct
  • Check semantic spec conformity - values are realistic and make sense [ in progress ]

Meta-Features

  • Unittests
  • API-Documentation (GNOME Devhelp book format)
  • i18n

Characteristics

The library's objective is to abstract OParls object format away from you. You as someone who develops an application for OParl does not need to know how to resolve the ids that objects yield to you and how to parse the objects themselves and check them for correctness.

The library does not want to interfere with your way to write programs which is why liboparl leaves all non-OParl-related tasks to you. OParl exposes anything it needs from you through signals and interfaces. For example, if liboparl wants to request a new object via HTTP, it triggers the signal resolve_url that belongs to the OParl.Client-Object. This signal gives you an url and expects to get a JSON-string back. You can implement this method however you feel is right for your project. If you program liboparl in Python you could use requests. If you program liboparl in Perl, you could use LWP. This also gives you the possibility to handle multithreading as you wish. And the best thing: liboparl can provide an API that is as clean and uncluttered as possible.

As mentioned before, liboparl is a GObject-based library. This means that you can use it in any programming language that supports GObject-Introspection. Famous examples are e.g. Python Ruby or Lua. Check if your favoured language is available at GObjectIntrospecion

Dependencies

The following libraries have to be present for liboparl to run:

  • glib-2.0
  • json-glib-1.0

Building

Meson > 0.40.0 is used as the buildsystem for liboparl. The build dependencies are the following:

  • valac > 0.32 - Vala compiler
  • valadoc - Vala documentation tool
  • g-ir-compiler - GObject introspection compiler (package gobject-introspection in ubuntu)
  • json-glib-dev - Dev headers for json-glib
  • libgirepository1.0-dev - Dev headers for gobject introspection

Clone and build the library as follows:

git clone https://github.com/oparl/liboparl
cd liboparl
mkdir build
cd build
meson ..
ninja

If you desire to install the library, execute as root:

ninja install

Localization/Internationalization

All user-facing output generated by liboparl is managed with the gettext library. By default, strings are written in English and wrapped with the default _("String to be translated") function Gettext provides.

Whenever you make changes to the strings in liboparl's code base please run ninja liboparl-pot from inside your build directory to update the potfile.

If you want to contribute translations to the project you can do so at our Transifex project page: https://transifex.com/oparl/liboparl.

If you happen across an error in the source strings, please let us know by opening an issue on GitHub at https://github.com/OParl/liboparl/issues/new?labels=l10n

Running the examples

liboparl supports GObject-Introspection which means you can consume it in various popular languages including but not limited to: Python, Perl, Lua, JS, PHP. I compiled some examples on how to program against the library in Python in the examples-folder.

Feel free to add examples for your favorite language.

Note: If you installed the library in /usr/local, you have to export the following environment variables for the examples to work:

export LD_LIBRARY_PATH=/usr/local/lib
export GI_TYPELIB_PATH=/usr/local/lib/girepository-1.0/