Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
This is a client for the openQA API, based on requests. It requires Python 3.6 or later.
Here's a simple example of reading the status of a job:
from openqa_client.client import OpenQA_Client
client = OpenQA_Client(server='openqa.opensuse.org')
print(client.openqa_request('GET', 'jobs/1'))
Here's an example of triggering jobs for an ISO:
# This is a Fedora server.
client = OpenQA_Client(server='openqa.happyassassin.net')
params = {}
params['ISO'] = '22_Beta_TC2_server_x86_64_boot.iso'
params['DISTRI'] = 'fedora'
params['VERSION'] = '22'
params['FLAVOR'] = 'server_boot'
params['ARCH'] = 'x86_64'
params['BUILD'] = '22_Beta_TC2'
print(cl.openqa_request('POST', 'isos', params))
All methods other than GET
require authentication. This client uses
the same configuration file format as the reference (perl) client in
openQA itself. Configuration will be read from /etc/openqa/client.conf
or ~/.config/openqa/client.conf
. A configuration file looks like this:
[openqa.happyassassin.net]
key = APIKEY
secret = APISECRET
You can get the API key and secret from the web UI after logging in. Your configuration file may include credentials for multiple servers; each section contains the credentials for the server named in the section title.
If you create an OpenQA_Client
instance without passing the server
argument, it will use the first server listed in the configuration file
if there is one, otherwise it will use 'localhost'. Note: this is a
difference in behaviour from the perl client, which always uses 'localhost'
unless a server name is passed.
TLS/SSL connections are the default (except for localhost). You can
pass the argument scheme
to OpenQA_Client
to force the use of
unencrypted HTTP, e.g.
OpenQA_Client(server='openqa.happyassassin.net', scheme='http')
.
The API always returns JSON responses; this client's request functions parse the response before returning it.
If you need for some reason to make a request which does not fall into
the openqa_request()
method's expected pattern, you can construct a
requests.Request
and pass it to do_request()
, which will attach the
required headers, execute the request, and return the parsed JSON response.
The const
module provides several constants that are shadowed from the
upstream openQA code, including job states, results, and the 'scenario
keys'.
You can file pull requests at Github.
There is an extensive test suite with CI integration. You can run the test
suite locally by running tox
. If your system has a tox version earlier
than 3.3.0, you must have the setuptools_scm
Python module installed for
this to work correctly, or else you will get errors about a missing
install.requires
file.
This software is available under the GPL, version 2 or any later version. A copy is included as COPYING. Contributions submitted as pull requests are assumed to be submitted under the same license terms unless otherwise specified.
FAQs
Python client library for openQA API
We found that openqa-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.