libbtrfsutil: add btrfs_util_[gs]et_read_only()
[platform/upstream/btrfs-progs.git] / libbtrfsutil / python / module.c
index d739880..3173ff7 100644 (file)
@@ -132,6 +132,76 @@ void path_cleanup(struct path_arg *path)
 }
 
 static PyMethodDef btrfsutil_methods[] = {
+       {"sync", (PyCFunction)filesystem_sync,
+        METH_VARARGS | METH_KEYWORDS,
+        "sync(path)\n\n"
+        "Sync a specific Btrfs filesystem.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor"},
+       {"start_sync", (PyCFunction)start_sync,
+        METH_VARARGS | METH_KEYWORDS,
+        "start_sync(path) -> int\n\n"
+        "Start a sync on a specific Btrfs filesystem and return the\n"
+        "transaction ID.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor"},
+       {"wait_sync", (PyCFunction)wait_sync,
+        METH_VARARGS | METH_KEYWORDS,
+        "wait_sync(path, transid=0)\n\n"
+        "Wait for a transaction to sync.\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor\n"
+        "transid -- int transaction ID to wait for, or zero for the current\n"
+        "transaction"},
+       {"is_subvolume", (PyCFunction)is_subvolume,
+        METH_VARARGS | METH_KEYWORDS,
+        "is_subvolume(path) -> bool\n\n"
+        "Get whether a file is a subvolume.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor"},
+       {"subvolume_id", (PyCFunction)subvolume_id,
+        METH_VARARGS | METH_KEYWORDS,
+        "subvolume_id(path) -> int\n\n"
+        "Get the ID of the subvolume containing a file.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor"},
+       {"subvolume_path", (PyCFunction)subvolume_path,
+        METH_VARARGS | METH_KEYWORDS,
+        "subvolume_path(path, id=0) -> int\n\n"
+        "Get the path of a subvolume relative to the filesystem root.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor\n"
+        "id -- if not zero, instead of returning the subvolume path of the\n"
+        "given path, return the path of the subvolume with this ID"},
+       {"subvolume_info", (PyCFunction)subvolume_info,
+        METH_VARARGS | METH_KEYWORDS,
+        "subvolume_info(path, id=0) -> SubvolumeInfo\n\n"
+        "Get information about a subvolume.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor\n"
+        "id -- if not zero, instead of returning information about the\n"
+        "given path, return information about the subvolume with this ID"},
+       {"get_subvolume_read_only", (PyCFunction)get_subvolume_read_only,
+        METH_VARARGS | METH_KEYWORDS,
+        "get_subvolume_read_only(path) -> bool\n\n"
+        "Get whether a subvolume is read-only.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor"},
+       {"set_subvolume_read_only", (PyCFunction)set_subvolume_read_only,
+        METH_VARARGS | METH_KEYWORDS,
+        "set_subvolume_read_only(path, read_only=True)\n\n"
+        "Set whether a subvolume is read-only.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, path-like object, or open file descriptor\n"
+        "read_only -- bool flag value"},
+       {"create_subvolume", (PyCFunction)create_subvolume,
+        METH_VARARGS | METH_KEYWORDS,
+        "create_subvolume(path, async=False)\n\n"
+        "Create a new subvolume.\n\n"
+        "Arguments:\n"
+        "path -- string, bytes, or path-like object\n"
+        "async -- create the subvolume without waiting for it to commit to\n"
+        "disk and return the transaction ID"},
        {},
 };
 
@@ -152,6 +222,13 @@ PyInit_btrfsutil(void)
        if (PyType_Ready(&BtrfsUtilError_type) < 0)
                return NULL;
 
+       if (PyStructSequence_InitType2(&SubvolumeInfo_type, &SubvolumeInfo_desc) < 0)
+               return NULL;
+
+       QgroupInherit_type.tp_new = PyType_GenericNew;
+       if (PyType_Ready(&QgroupInherit_type) < 0)
+               return NULL;
+
        m = PyModule_Create(&btrfsutilmodule);
        if (!m)
                return NULL;
@@ -160,6 +237,13 @@ PyInit_btrfsutil(void)
        PyModule_AddObject(m, "BtrfsUtilError",
                           (PyObject *)&BtrfsUtilError_type);
 
+       Py_INCREF(&SubvolumeInfo_type);
+       PyModule_AddObject(m, "SubvolumeInfo", (PyObject *)&SubvolumeInfo_type);
+
+       Py_INCREF(&QgroupInherit_type);
+       PyModule_AddObject(m, "QgroupInherit",
+                          (PyObject *)&QgroupInherit_type);
+
        add_module_constants(m);
 
        return m;