79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
from __future__ import annotations
|
|
import functools
|
|
import warnings
|
|
|
|
from .authmixin import AuthError, HEADER_JSON
|
|
from .httpclient import HttpClient
|
|
from .snippet import Snippet, Basesnippet, Paragraph
|
|
|
|
|
|
def pinned_to_logbook(logbook_keys):
|
|
def pinned_to_logbook_inner(func):
|
|
@functools.wraps(func)
|
|
def pinned_to_logbook_call(log, *args, **kwargs):
|
|
if not isinstance(log.logbook, Basesnippet):
|
|
warnings.warn("No logbook selected.")
|
|
else:
|
|
for key in logbook_keys:
|
|
if key not in kwargs:
|
|
if key == "parentId":
|
|
kwargs[key] = log.logbook.id
|
|
else:
|
|
kwargs[key] = getattr(log.logbook, key)
|
|
return func(log, *args, **kwargs)
|
|
return pinned_to_logbook_call
|
|
return pinned_to_logbook_inner
|
|
|
|
|
|
class SciLogRestAPI(HttpClient):
|
|
def __init__(self, url):
|
|
super().__init__(url)
|
|
self._verify_certificate = False
|
|
|
|
|
|
class SciLog():
|
|
|
|
def __init__(self, url="https://lnode2.psi.ch/api/v1"):
|
|
self.http_client = SciLogRestAPI(url)
|
|
self.logbook = None
|
|
|
|
def select_logbook(self, logbook:type(Basesnippet)):
|
|
self.logbook = logbook
|
|
|
|
@pinned_to_logbook(["parentId", "ownerGroup", "accessGroups"])
|
|
def get_snippets(self, **kwargs):
|
|
url = self.http_client.address + "/basesnippets"
|
|
params = self.http_client.make_filter(where=kwargs)
|
|
headers = HEADER_JSON.copy()
|
|
return Basesnippet.from_http_response(self.http_client.get_request(url, params=params, headers=headers))
|
|
|
|
@pinned_to_logbook(["parentId", "ownerGroup", "accessGroups"])
|
|
def send_message(self, msg, **kwargs):
|
|
url = self.http_client.address + "/basesnippets"
|
|
snippet = Paragraph()
|
|
snippet.import_dict(kwargs)
|
|
snippet.textcontent = msg
|
|
payload = snippet.to_dict(include_none=False)
|
|
return Basesnippet.from_http_response(self.http_client.post_request(url, payload=payload, headers=HEADER_JSON))
|
|
|
|
@pinned_to_logbook(["parentId", "ownerGroup", "accessGroups"])
|
|
def post_snippet(self, **kwargs):
|
|
url = self.http_client.address + "/basesnippets"
|
|
payload = kwargs
|
|
return Basesnippet.from_http_response(self.http_client.post_request(url, payload=payload, headers=HEADER_JSON))
|
|
|
|
def get_logbooks(self, **kwargs):
|
|
url = self.http_client.address + "/basesnippets"
|
|
snippet = Basesnippet()
|
|
snippet.import_dict(kwargs)
|
|
snippet.snippetType = "logbook"
|
|
params = self.http_client.make_filter(where=snippet.to_dict(include_none=False))
|
|
return Basesnippet.from_http_response(self.http_client.get_request(url, params=params, headers=HEADER_JSON))
|
|
|
|
|
|
class SciLogAuthError(AuthError):
|
|
pass
|
|
|
|
|
|
|