Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmsdials-1.0.0.tar.gz (24.3 kB view details)

Uploaded Source

Built Distribution

cmsdials-1.0.0-py3-none-any.whl (41.8 kB view details)

Uploaded Python 3

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

Hashes for cmsdials-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c8c43487ce898a1b6de9ddd61460feb4abcc181c0b5254bd4fc91c8257baa4fc
MD5 026ada0b8e2d8ac3185e3a214dca5f0d
BLAKE2b-256 16149147a6c29477b472dbc64e24f86cc5737340ad2cc0a962a3cc5f351d7ab0

See more details on using hashes here.

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

Hashes for cmsdials-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a787ab5c837128d5124c5b3993a9135aa185610508ec03d090d99a00d5a625f1
MD5 5b8c7a6cba38c0ec0986a9c95f655c56
BLAKE2b-256 54ab43d3a64a250ee4ae0435951c9ec53b5dabd6f444f1ce1e88655e40ff21dd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page