Python QuoLab REST Client
Project description
About
pyquo is a library which offers bindings for the quolab REST API in python.
Compatibility
pyquo is designed to be compatbile with both python2 and python3
Installation
$ pip install pyquo
Authentication
There are two ways of authenticating against Quolab's API. The first
method is using the UserAuthenticator which uses BasicAuth
.
from pyquo.authenticator import UserAuthenticator
auth = UserAuthenticator(username='user', password='pass')
However, the prefered way of authenticating would be by using the
TokenAuthenticator
.
from pyquo.authenticator import TokenAuthenticator
auth = TokenAuthenticator(token='your-token-here')
In order to generate a token the following pyquo code can be used:
from pyquo.Session import Session
from pyquo.authenticator import UserAuthenticator, TokenAuthenticator
session = Session(
base_url="https://qlab.quo/",
global_session=True,
auth=UserAuthenticator(username="<username>", password="<password>")
)
print(TokenAuthenticator.create_token(session, "1y"))
For more information on the expires_in
(e.g. 1y = 1 year) field, please
consult the quolab REST API documentation
Sessions
In order to interact with the quolab api, a Session
instance is required. This
can be created as follows:
from pyquo.session import Session
s = Session(base_url="https://<url>/", global_session=True, auth=auth, verify=False)
When interacting with a single quolab instance, it is recommended to set
global_session
to True
. When interacting with multiple sessions at once,
e.g. retreiving information mutliple nodes, you will be required to store the
session, and pass it around with your queries.
Models
pyquo implements (sys-)facts, (sys-)references and annotations as pyquo.model object instances. For example, a case model can be created as follows:
[In:] from pyquo.models import Case
[In:] case = Case(id='2981693283194043a185c0cc9412ad83')
[Out:] case(2981693283194043a185c0cc9412ad83)
case
is a 'handle' object for the case with the case id
'2981693283194043a185c0cc9412ad83'. This handle can now be used to perform
read/store/update/delete operations on the case.
[In:] case.get()
[In:] case.name
[Out:] "Fancy case name"
[In:] case.name = "Renamed case"
[In:] case.save()
[In:] case.get().name
[Out:] "Renamed case"
Querysets
References / Sysreferences
(Sys-)Facts can have incoming and outgoing (sys-)references, which can be queried as follows:
[In:] references = case.references()
[Out:] [case(2981693283194043a185c0cc9412ad83)→associated-with→user(test),
case(2981693283194043a185c0cc9412ad83)→encases→ipynb(Untitled1.ipynb)]
This will show all outgoing references. In order to show incoming references,
the incoming
parameter needs to be set to True
(case.references(incoming=True)
)
It is possible to filter for sysrefs
using fact.references(refs=SysRef)
.
Further the associated facts behind the references can be filtered (e.g. Files and Mutexes only) using:
[In:] fact.references(facts=(models.File, models.Mutex))
While the reference type can also be filtered using:
[In:] fact.references[models.Contains](facts=(models.File, models.Mutex))
The obtained references have a source
and a target
property which resolves
to an instance of the related fact. E.g.
[In:] reference
[Out:] case(2981693283194043a185c0cc9412ad83)→encases→ipynb(Untitled1.ipynb)
[In:] reference.source
[Out:] case(2981693283194043a185c0cc9412ad83)
[In:] reference.target
[Out:] ipynb(Untitled1.ipynb)
It is also possible to obtain the source
and target
facts directly, by
using the properties fact.ancestors
and fact.descendants
.
Annotations
Fact annotations can be queries as follows:
fact.annotations(annotations=pyquo.models.KnownAs, limit=3)
annotations=<pyquo.Model>
allows serverside filtering for annotations of a
given type, while limit=1
allows limiting the number of results returned by a
given query.
Raw Queries
From time to time it can occur that pyquo is not flexible enough to cover each and every usecase/api feature which is why raw queries have been made possible in pyquo:
from pyquo.session import Query
foo = {
"class": "annotation",
"type": "known-as",
"aggregate": "first",
"fact": {
"type": "function",
"id": [f.id for f in functions],
"aggregate": "group"
}
}
for i in Query.generate(foo, session):
print(i)
print(Query.execute(foo, session))
The Query.generate(foo, session)
method will execute the given query and
return a deserialized pyquo object, while result = Query.execute(foo, session)
will return the raw query result as a dictionary.
Examples
Furhter examples can be found here Example.md
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyquo-20.1.1.tar.gz
.
File metadata
- Download URL: pyquo-20.1.1.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9775c39a331930be04be2644d32a28b82ce71fa9f7137967e08938f89396e8f |
|
MD5 | 51fea53f98c5db7a0ee02fb9b9125edb |
|
BLAKE2b-256 | 8d114a9bf8d07f37c2bf310c4562c1835236bd385de6c6d4b98d5b9a2184b645 |
File details
Details for the file pyquo-20.1.1-py3-none-any.whl
.
File metadata
- Download URL: pyquo-20.1.1-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ed175e5a6041ae9d148772b14511d6050aedffe83714f12b11aa55a1f8f232d |
|
MD5 | 1eba3f5aea6c0c1b5d119e8c1a74cb96 |
|
BLAKE2b-256 | ee3496c53673cd9e82f8d57f7dbff5ff3c5390afd57db3a9cd7fab4e5851249c |