Skip to main content

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-withuser(test),
        case(2981693283194043a185c0cc9412ad83)encasesipynb(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)encasesipynb(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

Release files for pyquo 20.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyquo 20.1.5
File Size Uploaded
pyquo-20.1.5.tar.gz 15.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyquo 20.1.5
File Interpreter ABI Platform
pyquo-20.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 35.3 kB

Release files / pyquo-20.1.5.tar.gz

Download URL pyquo-20.1.5.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c8ee36167c37e1f5694237da1ea017d82cc694b445495f6655755cdeaed5f35e
BLAKE2b-256 checksum
How to use checksums
d2c0e34634cf0d237f7a7437ebabdc39363aa5efc7c0da5d5af07ef672c64e03
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / pyquo-20.1.5-py3-none-any.whl

Download URL pyquo-20.1.5-py3-none-any.whl
Size 20.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
578fe57b1adf92eb5ee3f737dae599f5905387473e6d4fe46edc95050237f91a
BLAKE2b-256 checksum
How to use checksums
e53c874495f2411604ceb5a3f567795a2c06c543dd71e9ee6aab06e46c1349d5
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

20.1.5 This release

2 release files

20.1.4

3 release files

20.1.3

2 release files

20.1.2

2 release files

20.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page