elab / elabapi-python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sophe_9
User
Beiträge: 34
Registriert: Dienstag 7. Mai 2019, 10:40

Hallo zusammen,

ich habe ein Problem mit dem Laborbuch elabftw:

Ich kann den Titel, Kommentare und den Body ändern, aber keine Tags wählen oder neu erzeugen.

Hier ändern ich den Titel und es funktioniert:

Code: Alles auswählen


import elabapi_python
from elabapi_python.rest import ApiException

#########################
#         CONFIG        #
#########################
API_HOST_URL = 'https://elab.local:3148/api/v2'
API_KEY = 'a2ca4231a0a834ed30c19be8'
#########################
#      END CONFIG       #
#########################

# Configure the api client
configuration = elabapi_python.Configuration()
configuration.api_key['api_key'] = API_KEY
configuration.api_key_prefix['api_key'] = 'Authorization'
configuration.host = API_HOST_URL
configuration.debug = False
configuration.verify_ssl = False

api_client = elabapi_python.ApiClient(configuration)
api_client.set_default_header(header_name='Authorization', header_value=API_KEY)
experimentsApi = elabapi_python.ExperimentsApi(api_client)

elab_id=407
data = { 'title': 'test FM1' }

response = experimentsApi.patch_experiment(elab_id, body=data)

Wenn ich allerdings

Code: Alles auswählen

data = { 'title': 'test ' , 'tags':'versuch' }
eingebe, erhalte ich folgenden Fehler:

ApiException: (400)
Reason: Bad Request

Kann mir jemand weiterhelfen?
Sirius3
User
Beiträge: 18225
Registriert: Sonntag 21. Oktober 2012, 17:20

Willst Du wirklich Deinen API-KEY hier öffentlich posten?
Laut Dokumentation legt man Tags so an: https://doc.elabftw.net/api/v2/#/Tags/post-tag



Also was in der Art:

Code: Alles auswählen

response = requests.post(f"{API_HOST_URL}/experiments/{experiment_id}/tags", json={"tag": "test FM1"}, headers=headers)
sophe_9
User
Beiträge: 34
Registriert: Dienstag 7. Mai 2019, 10:40

Es ist nicht der richtige API-KEY.

Leider hilft mir der Link https://doc.elabftw.net/api/v2/#/Tags/post-tag nicht weiter, dort wird eine json struktur beschrieben.

Hier gibt es es ganz gute Beispiele https://doc.elabftw.net/api/elabapi-htm ... gs-postTag. Daran habe ich mich bis jetzt orientiert.

Code: Alles auswählen

import elabapi_python
from elabapi_python.rest import ApiException

#########################
#         CONFIG        #
#########################
API_HOST_URL = 'https://elab.local:3148/api/v2'
API_KEY = 'a2ca4231a0a834ed30c19be8'
#########################
#      END CONFIG       #
#########################

# Configure the api client
configuration = elabapi_python.Configuration()
configuration.api_key['api_key'] = API_KEY
configuration.api_key_prefix['api_key'] = 'Authorization'
configuration.host = API_HOST_URL
configuration.debug = False
configuration.verify_ssl = False

api_client = elabapi_python.ApiClient(configuration)
api_client.set_default_header(header_name='Authorization', header_value=API_KEY)
tagsApi = elabapi_python.TagsApi(api_client)

entityType = entityType_example # String | Entity type  ?????????????????
id = 56 # Integer | ID of the entity
body =  # Id_tags_body | Parameters for creating a tag. (optional)

response = tagsApi.post_tag(entityType, id, body=body)

Ich verstehe den entityType nicht. Was muss ich genau konfigurieren
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sophe_9: Das steht unter dem Link der angeblich nicht weiterhilft.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Sirius3
User
Beiträge: 18225
Registriert: Sonntag 21. Oktober 2012, 17:20

Was Du da als Modul benutzt, ist nur eine sehr dünne Schicht über der eigentlichen REST-API. Deshalb mußt Du schon lernen, die API-Dokumentation zu lesen, sonst kommst Du nicht weiter.
sophe_9
User
Beiträge: 34
Registriert: Dienstag 7. Mai 2019, 10:40

Ihr wisst also selber nicht, wo mein Fehler liegt.

So wie es in dem Link beschrieben ist, funktioniert es nicht. Habe mich vorher natürlich damit beschäftigt.

Habt ihr mit dem Laborbuch denn schon mal gearbeitet?
Benutzeravatar
__blackjack__
User
Beiträge: 13931
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sophe_9: Was hast Du denn ausprobiert nachdem Du den Link gelesen hast und was ist daraufhin passiert? Welchen der Werte für "entityType" aus der Dokumentation hast Du gewählt?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
sophe_9
User
Beiträge: 34
Registriert: Dienstag 7. Mai 2019, 10:40

Code: Alles auswählen

#!/usr/bin/env python
import time
import elabapi_python
from elabapi_python.rest import ApiException
# necessary imports for this example
import csv
import json

# replace with your api key
API_HOST_URL = 'https://elabftw.ptb.de/api/v2'
# replace with your api key
API_KEY = 'a2c...meinkey.....4ed30c19be8'

# Configure the api client
configuration = elabapi_python.Configuration()
configuration.api_key['api_key'] = API_KEY
configuration.api_key_prefix['api_key'] = 'Authorization'
configuration.host = API_HOST_URL
configuration.debug = False
configuration.verify_ssl = True

elab_id=407

api_client = elabapi_python.ApiClient(configuration)
api_client.set_default_header(header_name='Authorization', header_value=API_KEY)

experimentsApi = elabapi_python.ExperimentsApi(api_client)
exp = experimentsApi.get_experiment(elab_id)

print('='*72)
print('\n ******** Experiment-Body ', exp.body)
print('\n ******** Experiment-Tags ', exp.tags)

data = { 'title': ' Versuch 2' }


# === Modifizieren der Einträge (hier Eintrag "body") ===
response = experimentsApi.patch_experiment(elab_id, body=data)

print('\n ******** Neuer Experiment-Body ', exp.body)

print('='*72)
Return:
=======

******** Experiment-Body Versuch

******** Experiment-Tags TLV|FM1|7.5-1V-23-37

******** Neuer Experiment-Body Versuch
====================================================
Der entityType ist ein String und daher habe ich den String verwendet der mir angezeigt wurde:
entityType = 'TLV' # String | Entity type
Sirius3
User
Beiträge: 18225
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum sollte der Entititätstyp eines Tags für die Entität "Experimente" ein konkretes Tag "TLV" sein?

Auf der Swagger-Seite ist der Wert für dieses Feld nicht einmal frei wählbar, sondern da gibt es ein Dropdown mit fixen Werten:
Entity type

Available values : experiments, items, experiments_templates, items_types[/code]
Antworten