summaryrefslogtreecommitdiffstats
path: root/glusterfs/gfapi.py
diff options
context:
space:
mode:
Diffstat (limited to 'glusterfs/gfapi.py')
-rwxr-xr-xglusterfs/gfapi.py35
1 files changed, 31 insertions, 4 deletions
diff --git a/glusterfs/gfapi.py b/glusterfs/gfapi.py
index 2d51a96..42c4aef 100755
--- a/glusterfs/gfapi.py
+++ b/glusterfs/gfapi.py
@@ -104,6 +104,12 @@ class File(object):
raise OSError(err, os.strerror(err))
return ret
+ def fgetsize(self):
+ """
+ Return the size of a file, reported by fstat()
+ """
+ return self.fstat().st_size
+
def fstat(self):
"""
Returns Stat object for this file.
@@ -137,9 +143,18 @@ class File(object):
"""
return api.glfs_lseek(self.fd, pos, how)
- def read(self, buflen, flags=0):
+ def read(self, buflen=-1):
+ """
+ read file
+
+ :param buflen: length of read buffer. If less than 0, then whole
+ file is read. Default is -1.
+ :returns: buffer of size buflen
+ """
+ if buflen < 0:
+ buflen = self.fgetsize()
rbuf = ctypes.create_string_buffer(buflen)
- ret = api.glfs_read(self.fd, rbuf, buflen, flags)
+ ret = api.glfs_read(self.fd, rbuf, buflen, 0)
if ret > 0:
return rbuf
elif ret < 0:
@@ -190,8 +205,6 @@ class Dir(object):
class Volume(object):
- # Housekeeping functions.
-
def __init__(self, host, volid, proto="tcp", port=24007):
# Add a reference so the module-level variable "api" doesn't
# get yanked out from under us (see comment above File def'n).
@@ -468,6 +481,20 @@ class Volume(object):
except OSError as e:
onerror(self.rmdir, path, e)
+ def setfsuid(self, uid):
+ ret = api.glfs_setfsuid(uid)
+ if ret < 0:
+ err = ctypes.get_errno()
+ raise OSError(err, os.strerror(err))
+ return ret
+
+ def setfsgid(self, gid):
+ ret = api.glfs_setfsgid(gid)
+ if ret < 0:
+ err = ctypes.get_errno()
+ raise OSError(err, os.strerror(err))
+ return ret
+
def setxattr(self, path, key, value, vlen):
ret = api.glfs_setxattr(self.fs, path, key, value, vlen, 0)
if ret < 0: