Python-SDK

Überblick

Mit dem Python-SDK können Sie mithilfe der Programmiersprache Python mit LivingApps interagieren.

Sie können die Daten die Sie in den Datenquellen für eines Ihrer Anzeige-Templates konfiguriert haben, abrufen, neue Datensätze anlegen, sowie existierende ändern und löschen.

Installation

Das Python-SDK benötigt mindestens Python 3.6. Zum Anlegen eines virtuellen Environment wird außerdem das venv-Modul benötigt. Des weiteren wird zur Installation evtl. ein C-Compiler benötigt. Wenn dies nicht bereits Teil der Standard-Installation auf Ihrem System ist, kann beides mittels:

$ apt-get install python3.6-venv python3.6-dev

installiert werden (bzw. mit dem äquivalenten Aufruf für Ihr System).

Sodann sollte eine neue virtuelle Umgebung angelegt werden, in der alle benötigten Module installiert werden. Wir nennen diese virtuelle Umgebung livingapps und installieren sie im Verzeichnis ~/pyvenvs:

$ python3.6 -mvenv ~/pyvenvs/livingapps

Anschließend können wir diese Umgebung aktivieren:

$ . ~/pyvenvs/livingapps/bin/activate

Um Sie darauf hinzuweisen, daß Sie diese Umgebung aktiviert haben, wird forthin dem Prompt der Name der Umgebung als Präfix vorangestellt. D.h. der Prompt ist ab jetzt (livingapps) $.

Um das Python-SDK selbst zu installieren, gehen Sie folgenden Befehl ein:

(livingapps) $ pip install ll-la

Dabei werden auch die benötigten Module ll.xist, requests und geocoder installiert.

Um das interaktive Ausprobieren des Python-SDK zu vereinfachen, empfielt es sich IPython zu installieren mittels:

(livingapps) $ pip install ipython

(Die folgenden Beispiele zeigen die Verwendung von IPython).

Beispiel-App

Als Beispiel-App benutzen wir eine App, mit der wir Daten zu berühmten Personen verwalten. Wir legen zwei Apps an. Die erste (namens „Persons“) enthält die Personen selbst. Sie hat folgende Felder:

Name

Identifizierer

Typ

Sonstiges

Firstname

firstname

string/text

Lastname

lastname

string/text

Sex

sex

lookup/select

Auswahl male/female

Field of activity

field_of_activity

multipleapplookup/select

Mehrfach-Auswahl aus der zweiten App

Date of birth

date_of_birth

date/date

Date of death

date_of_death

date/date

Grave

grave

geo

Portrait

portrait

file

Die zweite App (namens „Fields of activity“) verwaltet die Tätigkeitsfelder und hat zwei Felder:

Name

Identifizierer

Typ

Sonstiges

Name

name

string/text

Parent

parent

applookup/select

Auswahl aus derselben App

Vorbereitungen in der App

Damit Sie auf die Daten Ihrer App zugreifen können, müssen Sie für jeden Datenexport den Sie benötigen, das passende Anzeige-Template anlegen. Dazu muß Ihr Account vom Administrator als Experten-User freigeschaltet worden sein.

In Kürze: Fügen Sie unter Konfiguration ‣ Erweitert bei Anzeige-Templates ein neues Anzeige-Template hinzu. Verwenden Sie als Identifizierer export, setzen Sie den Typ auf Liste und setzen Sie Standard?.

Bei Quelltext muß nichts eingegeben werden (da wir die Daten ja gar nicht in dem Anzeige-Template anzeigen wollen, sondern mit dem SDK darauf zugreifen wollen). Bei Berechtigung für können Sie auswählen, wer auf diese Daten zugreifen darf. (Wenn Sie alle Benutzer wählen, muß der Benutzer nicht eingeloggt sein, um zugreifen zu können, d.h. die Daten sind öffentlich.) Klicken Sie auf Speichern um Ihr Anzeige-Template abzuspeichern.

Sodann können Sie die Datenquellen die Sie benötigen unter Datenquellen anlegen. Wir legen hier zwei Datenquellen für unsere beiden Apps an. Klicken Sie bei Ihrem neuen Anzeige-Template auf den Maskenlink Datenquellen und dann auf Hinzufügen. Bei App wählen Sie die App „Persons“ aus, als Identifizierer geben Sie persons ein, bei Felder/Datensätze wählen Sie Felder und Datensätze, sowie bei Felder Alle Felder. Klicken Sie dann auf Speichern um Ihren neue Datenquelle abzuspeichern.

Legen Sie nun eine zweite Datenquelle für die App „Fields of activity“ an (mit dem Identifizierer fieldsofactivity).

Eine ausführliche Beschreibung von Anzeige-Templates und Datenquellen findet sich unter Anzeige-Templates.

Verwendung des SDKs

Starten Sie IPython mit

(livingapps) $ ipython
Python 3.6.4 (default, Jan 15 2018, 09:29:23)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:

Anschließend importieren Sie das la-Modul:

In [1]: from ll import la

Nun können Sie sich mit Ihrem Account bei LivingApps einloggen:

In [2]: handler = la.HTTPHandler("https://my.living-apps.de/", "username", "password")

Benutzername und Passwort kann auch weggelassen werden, dann können Sie nur auf öffentliche Anzeige-Templates zugreifen, d.h. auf Templates, bei denen unter Berechtigung für alle Benutzer ausgewählt wurde.

Um nun von Ihrer App und Ihren Anzeige-Template Daten abzuholen, benötigen Sie den Identifizierer Ihrer App. Diesen finden sie wenn Sie sich auf der Startseite der jeweiligen App befinden. Die URL diese Seite lautet in unserem Beispiel:

https://my.living-apps.de/apps/5bffc841c26a4b5902b2278c.htm

5bffc841c26a4b5902b2278c ist dann der gesuchte Identifizierer.

Damit können Sie dann die Daten holen, die Sie für Ihr Template konfiguriert haben:

In [3]: data = handler.viewtemplate_data("5bffc841c26a4b5902b2278c")
In [4]: data
Out[4]:
{'globals': <ll.la.Globals version='7' platform='LivingApps' at 0x56d62e8>,
 'app': <ll.la.App id='5bffc841c26a4b5902b2278c' name='LA-Demo: Persons' at 0x56d6080>,
 'record': None,
 'apps': {'5bffc841c26a4b5902b2278c': <ll.la.App id='5bffc841c26a4b5902b2278c' name='LA-Demo: Persons' at 0x56d6080>,
  '5bffc44c5be111d74ed79972': <ll.la.App id='5bffc44c5be111d74ed79972' name='LA-Demo: Fields of activity' at 0x57d0550>},
 'datasources': {'persons': <ll.la.DataSource id='5bffccdb8cd2298964e2c7b1' identifier='persons' at 0x57ca1d0>,
  'fieldsofactivity': <ll.la.DataSource id='5bffdadd22f815dd7480dfcc' identifier='fieldsofactivity' at 0x57ca208>}}

Wenn Sie ein weiteres Anzeige-Template angelegt haben (z.B. mit dem Identifizierer specialexport), können Sie die Daten holen, indem Sie diesen Template-Identifizierer als zweites Argument übergeben:

In [3]: data = handler.viewtemplate_data("5bffc841c26a4b5902b2278c", "specialexport")

(d.h. bei dem Anzeige-Template, das als Standard? konfiguriert wurde, muß der Template-Identifizierer nicht angegeben werden).

Das Objekt data, das Sie als Ergebnis erhalten, besitzt drei Attribute:

globals

Globale Informationen zum System und dem eingeloggten Benutzer. Dieses Python-Objekt unterstüzt die unter Globals dokumentierten Attribute und Methoden der LivingAPI, die Ihnen im Sourcecode des Anzeige-Templates zur Verfügung stehen.

datasources

Ein Dictionary mit den von Ihnen konfigurierten Datenquellen. Die Keys sind die Identifizierer und die Werte DataSource-Objekte. Diese Objekte unterstützen ebenfalls die LivingAPI.

app

Die App, zur der das Anzeige-Template gehört (d.h. die App, deren Id Sie an den get()-Aufruf übergeben haben).

Damit können wir auf unsere App „Fields of activity“ folgendermaßen zugreifen:

In [3]: tfapp = data.datasources.fieldsofactivity.app
In [4]: tfapp
Out[4]: <ll.la.App id='5bffc44c5be111d74ed79972' name='LA-Demo: Fields of activity' at 0x10b857d30>

Die Datensätze sind folgendermaßen zugänglich:

In [5]:  for r in tfapp.records.values():
......:     print(r.v_name)
......:
Sport
Politics
Literature
Industry
Music
Art
Physics
Maths
Science
Computer science
Film
In [6]:

Die Datensätze sind Record-Objekte und unterstützen die entsprechenden Attribute und Methoden.

Aus der anderen Datenquelle können wir uns die Daten zu den Personen holen:

In [6]: papp = data.datasources.persons.app
In [7]: list(papp.records.values())
Out[7]:
[<ll.la.Record
     id='5bf40f8f11b9ceb4ce7c75ac'
     v_firstname='Albert'
     v_lastname='Einstein'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8dc511b06d3be85c7d'
          v_name='Physics'
          at 0x10fa3ea90>]
     v_date_of_birth=datetime.date(1879, 3, 14)
     v_date_of_death=datetime.date(1955, 4, 15)
     at 0x10fa5beb8>,
 <ll.la.Record
     id='5bf40f8f2249662d2b4a8c0b'
     v_firstname='Marie'
     v_lastname='Curie'
     v_sex=<ll.la.LookupItem key='female' label='Female' at 0x10fa5be10>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8dc511b06d3be85c7d'
          v_name='Physics'
          at 0x10fa3ea90>]
     v_date_of_birth=datetime.date(1867, 11, 7)
     v_date_of_death=datetime.date(1934, 7, 4)
     at 0x10fa3ef98>,
 <ll.la.Record
     id='5bf40f8f2ecda576c9d524fe'
     v_firstname='Muhammad'
     v_lastname='Ali'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8e29069905fe8c71f7'
          v_name='Sport'
          at 0x10fa3e748>]
     v_date_of_birth=datetime.date(1942, 1, 17)
     v_date_of_death=datetime.date(2016, 6, 3)
     at 0x10fa670b8>,
 <ll.la.Record
     id='5bf40f8f3cc3d6e19dbe5c50'
     v_firstname='Marilyn'
     v_lastname='Monroe'
     v_sex=<ll.la.LookupItem key='female' label='Female' at 0x10fa5be10>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8de2efb2a43c8185d2'
          v_name='Film'
          at 0x10fa3e8d0>]
     v_date_of_birth=datetime.date(1926, 6, 1)
     v_date_of_death=datetime.date(1962, 8, 4)
     at 0x10fa67160>,
 <ll.la.Record
     id='5bf40f8f493c32a841ade504'
     v_firstname='Elvis'
     v_lastname='Presley'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8dee0ef934d6fe34de'
          v_name='Music'
          at 0x10fa3e7f0>]
     v_date_of_birth=datetime.date(1935, 1, 8)
     v_date_of_death=datetime.date(1977, 8, 16)
     at 0x10fa671d0>,
 <ll.la.Record
     id='5bf40f8f58b852d36c8dc59c'
     v_firstname='Bernhard'
     v_lastname='Riemann'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8dba17a22c136c8f5b'
          v_name='Maths'
          at 0x10fa3e9e8>]
     v_date_of_birth=datetime.date(1826, 6, 17)
     v_date_of_death=datetime.date(1866, 6, 20)
     at 0x10fa67278>,
 <ll.la.Record
     id='5bf40f8f692fb0cfbaf2c5b7'
     v_firstname='Carl Friedrich'
     v_lastname='Gauß'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8dba17a22c136c8f5b'
          v_name='Maths'
          at 0x10fa3e9e8>]
     v_date_of_birth=datetime.date(1777, 4, 30)
     v_date_of_death=datetime.date(1855, 2, 23)
     at 0x10fa67320>,
 <ll.la.Record
     id='5bf40f8f78befe7d55dc40c2'
     v_firstname='Ronald'
     v_lastname='Reagan'
     v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
     v_fieldofactivity=[<ll.la.Record
          id='5bf40f8de2efb2a43c8185d2'
          v_name='Film'
          at 0x10fa3e8d0>,
      <ll.la.Record
          id='5bf40f8e1202ba6352c2c3c9'
          v_name='Politics'
          at 0x10fa3e0b8>]
     v_date_of_birth=datetime.date(1911, 2, 6)
     v_date_of_death=datetime.date(2004, 6, 5)
     at 0x10fa673c8>]