]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cephfs.pyx: add python binding for mkdirat()
authorRishabh Dave <ridave@redhat.com>
Tue, 4 Nov 2025 10:56:58 +0000 (16:26 +0530)
committerRishabh Dave <ridave@redhat.com>
Thu, 6 Nov 2025 10:17:06 +0000 (15:47 +0530)
Signed-off-by: Rishabh Dave <ridave@redhat.com>
src/pybind/cephfs/c_cephfs.pxd
src/pybind/cephfs/cephfs.pyx
src/pybind/cephfs/mock_cephfs.pxi

index 0d2c91d2f197a13c612f604db32073c1d4f1dbfd..88d255c5e5f75d05d6d06e86fff535ff5ece0992 100644 (file)
@@ -120,6 +120,7 @@ cdef extern from "cephfs/libcephfs.h" nogil:
     int ceph_openat(ceph_mount_info *cmount, int dirfd, const char *relpath, int flags, mode_t mode)
 
     int ceph_mkdir(ceph_mount_info *cmount, const char *path, mode_t mode)
+    int ceph_mkdirat(ceph_mount_info *cmount, int dirfd, const char *relpath, mode_t mode)
     int ceph_mksnap(ceph_mount_info *cmount, const char *path, const char *name, mode_t mode, snap_metadata *snap_metadata, size_t nr_snap_metadata)
     int ceph_rmsnap(ceph_mount_info *cmount, const char *path, const char *name)
     int ceph_get_snap_info(ceph_mount_info *cmount, const char *path, snap_info *snap_info)
index 333e1c099eff57d1bbb24085763b47b90fe794c3..3c03c1f06d73034215279835c677a0b209611ed0 100644 (file)
@@ -1156,6 +1156,25 @@ cdef class LibCephFS(object):
         if ret < 0:
             raise make_ex(ret, "error in mkdir {}".format(path.decode('utf-8')))
 
+    def mkdirat(self, dirfd, relpath, mode):
+        self.require_state("mounted")
+        if not isinstance(mode, int):
+            raise TypeError('"mode" must be an int')
+        if not isinstance(dirfd, int):
+            raise TypeError('"_dirfd" must be an int')
+
+        relpath = cstr(relpath, 'relpath')
+        cdef:
+            char* _relpath = relpath
+            int _mode = mode
+            int _dirfd = dirfd
+
+        with nogil:
+            ret = ceph_mkdirat(self.cluster, _dirfd, _relpath, _mode)
+
+        if ret < 0:
+            raise make_ex(ret, f"error in mkdirat: {relpath.decode('utf-8')}")
+
     def mksnap(self, path, name, mode, metadata={}) -> int:
         """
         Create a snapshot.
index 45181507ec6844f5763dd17c0f75855fbbe80069..1c76e659e32586a34f88f07f7c8f5584f134fe87 100644 (file)
@@ -169,6 +169,8 @@ cdef nogil:
 
     int ceph_mkdir(ceph_mount_info *cmount, const char *path, mode_t mode):
         pass
+    int ceph_mkdir(ceph_mount_info *cmount, int dirfd, const char *relpath, mode_t mode):
+        pass
     int ceph_mksnap(ceph_mount_info *cmount, const char *path, const char *name, mode_t mode, snap_metadata *snap_metadata, size_t nr_snap_metadata):
         pass
     int ceph_rmsnap(ceph_mount_info *cmount, const char *path, const char *name):