The Python api client interface to DIALS service
Project description
dials-py
The Python api client interface to DIALS service.
Installation
To install dials-py, simply
$ pip install cmsdials
Usage
Before interfacing with any route you need to generate valid credentials, it is possible to authenticate trough the device authorization flow
or using the client secret key
of any application registered in DIALS. Note that, the device flow is an interactively authentication procedure that is possible to distinguish users in DIALS backend and the client secret flow is not interactive and is not possible to distinguish users so it should only be used for automation scripts.
Generating credentials with client secret
from cmsdials.auth.secret_key import Credentials
creds = Credentials(token=".....")
Generating credentials with device
Loading from AuthClient
from cmsdials.auth.client import AuthClient
from cmsdials.auth.bearer import Credentials
auth = AuthClient()
token = auth.device_auth_flow()
creds = Credentials.from_authclient_token(token)
Loading from cached credentials file
Credentials are always cached once you authenticate at least one time, calling this method without having a cached credential file will automatically trigger the AuthClient device flow.
from cmsdials.auth.bearer import Credentials
creds = Credentials.from_creds_file()
Basic Example
from cmsdials.auth.bearer import Credentials
from cmsdials import Dials
from cmsdials.filters import LumisectionHistogram1DFilters
creds = Credentials.from_creds_file()
dials = Dials(creds)
# Getting h1d data
data = dials.h1d.list_all(LumisectionHistogram1DFilters(me="PixelPhase1/Tracks/PXBarrel/charge_PXLayer_2"), max_pages=5)
Workspace
Users are automatically routed to a workspace based on e-groups, but it is possible to overwrite this configuration and inspect data from others workspaces:
dials = Dials(creds, workspace="jetmet")
Available endpoints
This package interacts with DIALS api endpoints using underlying classes in Dials
object.
Retrieving a specific object using get
dials.file_index.get(id=3386119397)
dials.h1d.get(id=1)
dials.h2d.get(id=1)
dials.lumi.get(dataset_id=14677060, run_number=367094, ls_number=1)
dials.run.get(dataset_id=14677060, run_number=367094)
Retrieving a list of objects per page using list
It is possible to get a list of entries from those endpoint using the list
and list_all
methods, the list
method will fetch only one page and the list_all
will fetch all available pages:
dials.file_index.list()
dials.h1d.list()
dials.h2d.list()
dials.lumi.list()
dials.run.list()
Retrieving all available pages of a list of objects using list_all
Note: Keep in mind that running list_all
without any filter can take too much time, since you will be retrieving all rows in the database.
dials.file_index.list_all()
dials.h1d.list_all()
dials.h2d.list_all()
dials.lumi.list_all()
dials.run.list_all()
If you don't need all available pages but just a subset of then, it is possible to specify a max_pages
integer parameter:
dials.run.list_all(..., max_pages=5)
Using filters
Keep in mind that calling those methods without any filter can take a lot of time, because the underlying query will try to load the entire database table through multiple requests, then it is recommended to apply filters according to DIALS live documentation using filter classes for each table:
from cmsdials.filters import (
FileIndexFilters,
LumisectionHistogram1DFilters,
LumisectionHistogram2DFilters,
LumisectionFilters,
RunFilters
)
dials.file_index.list(FileIndexFilters(dataset__regex="2024B"))
dials.h1d.list(LumisectionHistogram1DFilters(me="PixelPhase1/Tracks/PXBarrel/charge_PXLayer_2"))
dials.h2d.list_all(LumisectionHistogram2DFilters(me__regex="PXBarrel", ls_number=78, entries__gte=100), max_pages=5)
dials.lumi.list_all(LumisectionFilters(run_number=360392), max_pages=5)
dials.run.list_all(RunFilters(run_number__gte=360392, run_number__lte=365000), max_pages=5)
Dials MEs
It is possible to inspect the list of selected MEs considered in DIALS during ETL requesting the endpoint configured-mes
trough the method:
dials.lumi.configured_mes()
Usage with local DIALS
All classes that interface the DIALS service inherits the class BaseAPIClient
which propagate the base_url
, route
and version
attributes with production values. In order to use dials-py with a local version of DIALS it is possible to overwrite those attributes when instantiating the AuthClient
and the Dials
client, for example:
from cmsdials.auth.client import AuthClient
from cmsdials.auth.bearer import Credentials
from cmsdials import Dials
from cmsdials.filters import LumisectionHistogram2DFilters
DEV_URL = "http://localhost:8000/"
DEV_CACHE_DIR = ".cache-dev"
auth = AuthClient(base_url=DEV_URL)
creds = Credentials.from_creds_file(cache_dir=DEV_CACHE_DIR, client=auth) # Make sure to specify the auth client with overwritten values, using another cache_dir is recommended
dials = Dials(creds, base_url=DEV_URL)
dials.h2d.list_all(LumisectionHistogram2DFilters(me__regex="EEOT digi occupancy EE +", entries__gte=100, run_number__gte=360392, run_number__lte=365000), max_pages=5)
Project details
Release history Release notifications | RSS feed
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 cmsdials-1.0.0.tar.gz
.
File metadata
- Download URL: cmsdials-1.0.0.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.13 Linux/6.8.7-300.fc40.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8c43487ce898a1b6de9ddd61460feb4abcc181c0b5254bd4fc91c8257baa4fc |
|
MD5 | 026ada0b8e2d8ac3185e3a214dca5f0d |
|
BLAKE2b-256 | 16149147a6c29477b472dbc64e24f86cc5737340ad2cc0a962a3cc5f351d7ab0 |
File details
Details for the file cmsdials-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: cmsdials-1.0.0-py3-none-any.whl
- Upload date:
- Size: 41.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.13 Linux/6.8.7-300.fc40.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a787ab5c837128d5124c5b3993a9135aa185610508ec03d090d99a00d5a625f1 |
|
MD5 | 5b8c7a6cba38c0ec0986a9c95f655c56 |
|
BLAKE2b-256 | 54ab43d3a64a250ee4ae0435951c9ec53b5dabd6f444f1ce1e88655e40ff21dd |