use crate::Pyo3Docker;
use docker_api::opts::PluginListOpts;
use docker_api::plugin::{Plugin, Plugins};
use pyo3::exceptions;
use pyo3::prelude::*;
use pythonize::pythonize;
#[pymodule]
pub fn plugin(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<Pyo3Plugins>()?;
m.add_class::<Pyo3Plugin>()?;
Ok(())
}
#[derive(Debug)]
#[pyclass(name = "Plugins")]
pub struct Pyo3Plugins {
plugins: Plugins,
}
#[derive(Debug)]
#[pyclass(name = "Plugin")]
pub struct Pyo3Plugin {
plugin: Plugin,
}
#[pymethods]
impl Pyo3Plugins {
#[new]
pub fn new(docker: Pyo3Docker) -> Self {
Pyo3Plugins {
plugins: Plugins::new(docker.0),
}
}
pub fn get(&self, name: &str) -> Pyo3Plugin {
Pyo3Plugin {
plugin: self.plugins.get(name),
}
}
pub fn list(&self) -> PyResult<Py<PyAny>> {
let rv = __plugins_list(&self.plugins, &Default::default());
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn list_by_capability(&self, capability: &str) -> PyResult<Py<PyAny>> {
let opts = PluginListOpts::builder()
.filter([docker_api::opts::PluginFilter::Capability(
capability.to_string(),
)])
.build();
let rv = __plugins_list(&self.plugins, &opts);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn list_enabled(&self) -> PyResult<Py<PyAny>> {
let opts = PluginListOpts::builder()
.filter([docker_api::opts::PluginFilter::Enable])
.build();
let rv = __plugins_list(&self.plugins, &opts);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn list_disabled(&self) -> PyResult<Py<PyAny>> {
let opts = PluginListOpts::builder()
.filter([docker_api::opts::PluginFilter::Disable])
.build();
let rv = __plugins_list(&self.plugins, &opts);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
}
#[tokio::main]
async fn __plugins_list(
plugins: &Plugins,
opts: &PluginListOpts,
) -> Result<Vec<docker_api::models::Plugin>, docker_api::Error> {
plugins.list(opts).await
}
#[pymethods]
impl Pyo3Plugin {
#[new]
pub fn new(docker: Pyo3Docker, name: &str) -> Self {
Pyo3Plugin {
plugin: Plugin::new(docker.0, name),
}
}
pub fn name(&self) -> String {
self.plugin.name().to_string()
}
pub fn inspect(&self) -> PyResult<Py<PyAny>> {
let rv = __plugin_inspect(&self.plugin);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
#[pyo3(signature = (timeout=None))]
pub fn enable(&self, timeout: Option<u64>) -> PyResult<()> {
let rv = __plugin_enable(&self.plugin, timeout);
match rv {
Ok(rv) => Ok(rv),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn disable(&self) -> PyResult<()> {
let rv = __plugin_disable(&self.plugin);
match rv {
Ok(rv) => Ok(rv),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn remove(&self) -> PyResult<Py<PyAny>> {
let rv = __plugin_delete(&self.plugin);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn force_remove(&self) -> PyResult<Py<PyAny>> {
let rv = __plugin_force_delete(&self.plugin);
match rv {
Ok(rv) => Ok(pythonize_this!(rv)),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn push(&self) -> PyResult<()> {
let rv = __plugin_push(&self.plugin);
match rv {
Ok(rv) => Ok(rv),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
pub fn create(&self, path: &str) -> PyResult<()> {
let rv = __plugin_create(&self.plugin, path);
match rv {
Ok(rv) => Ok(rv),
Err(rv) => Err(py_sys_exception!(rv)),
}
}
}
#[tokio::main]
async fn __plugin_inspect(
plugin: &Plugin,
) -> Result<docker_api::models::Plugin, docker_api::Error> {
plugin.inspect().await
}
#[tokio::main]
async fn __plugin_enable(plugin: &Plugin, timeout: Option<u64>) -> Result<(), docker_api::Error> {
plugin.enable(timeout).await
}
#[tokio::main]
async fn __plugin_disable(plugin: &Plugin) -> Result<(), docker_api::Error> {
plugin.disable().await
}
#[tokio::main]
async fn __plugin_delete(plugin: &Plugin) -> Result<docker_api::models::Plugin, docker_api::Error> {
plugin.delete().await
}
#[tokio::main]
async fn __plugin_force_delete(
plugin: &Plugin,
) -> Result<docker_api::models::Plugin, docker_api::Error> {
plugin.force_delete().await
}
#[tokio::main]
async fn __plugin_push(plugin: &Plugin) -> Result<(), docker_api::Error> {
plugin.push().await
}
#[tokio::main]
async fn __plugin_create(plugin: &Plugin, path: &str) -> Result<(), docker_api::Error> {
plugin.create(path).await
}