User Guide¶
Connecting¶
Import the main FPDC
class and instanciate it, passing a custom URL if
necessary:
>>> from fpdc_client import FPDC
>>> server = FPDC(url="http://localhost:8000/")
Note
By default the FPDC client will connect to the production server. You can use the STG_URL global variable to connect to the staging server.
Now connect to the server. This will fetch the available actions from FPDC:
>>> server.connect()
Authentication¶
The Fedora servers use OIDC to authenticate, you need to get a client_id
and a corresponding secret from the OIDC server.
Note
If you are using the production or staging instance of FPDC the client_id and client_secret are automatically provided.
During development, you can use dynamic registration on the development OIDC server with the following command:
pip install oidc-register
oidc-register https://iddev.fedorainfracloud.org/openidc/ http://localhost:12345/ http://localhost:23456/
This will produce a client_secrets.json
file. Then you can call the
login()
method passing it the path to this file:
>>> server.login(auth_file="client_secrets.json")
The first time, it will open a browser window on the OIDC provider, asking you to login and to consent to the transmission of your personal information.
After this step, you can close the browser window, your client is authenticated.
Getting data¶
Import the endpoint class(es) you want to work with:
>>> from fpdc_client import Release
You can retrieve all the releases from the server with:
>>> releases = Release.all()
>>> for r in releases:
... print(r)
You can retrieve a single release with:
>>> release = Release.read({"release_id": "fedora-28"})
You can access the release’s properties as a dict:
>>> release["release_id"]
"fedora-28"
>>> release["short"]
"fedora"
>>> release["version"]
"28"
>>> release["release_type"]
"ga"
All the data that has been retrieved from the server is available as a
.data
attribute:
>>> release.data
{...}
Making changes¶
If you have the right permissions, you can create a release with the following call:
>>> new_release = Release.create(
... {
... "release_id": "fedora-42",
... "short": "f42",
... "version": "42",
... "name": "Fedora",
... "release_date": "2042-01-01",
... "eol_date": "2042-12-31",
... "sigkey": "towel",
... }
... )
You can change the release properties as if it was a simple dictionary, but you
need to call the save()
method to commit those changes to the server:
>>> new_release["name"] = "Don't Panic"
>>> new_release.save()
If you don’t call save()
, the changes will be lost.