X-Git-Url: https://git.distorted.org.uk/~mdw/mLib-python/blobdiff_plain/5b1830f325c55c70d65fd020f08dd958493e528d..965caf5fc74fbbf2516eb1d098fac07cfbdb6820:/fwatch.pyx?ds=inline diff --git a/fwatch.pyx b/fwatch.pyx index 2e484cd..086526b 100644 --- a/fwatch.pyx +++ b/fwatch.pyx @@ -24,24 +24,44 @@ ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. cdef class FWatch: + """ + FWatch(FILE): watch FILE for changes + + FILE may be a string, file descriptor, or an object with a `fileno' method. + """ cdef fwatch fw - cdef public file - def __cinit__(me, file): - me._init(file) - def __init__(me, file): - me._init(file) - cdef _init(me, file): - if isinstance(file, str): - fwatch_init(&me.fw, file) + cdef fobj + cdef const char *fname + cdef int fd + def __cinit__(me): + me.fname = NULL + me.fd = -1 + cdef _setfile(me, object file): + if TEXT_CHECK(file): + me.fname = TEXT_PTR(file) + me.fd = -1 + else: + me.fd = _getfd(file) + me.fname = NULL + me.fobj = file + def __init__(me, object file): + me._setfile(file) + if me.fname: + fwatch_init(&me.fw, me.fname) else: - fwatch_initfd(&me.fw, _getfd(file)) - me.file = file + fwatch_initfd(&me.fw, me.fd) + @property + def file(me): + return me.fobj + @file.setter + def file(me, file): + me._setfile(file) def update(me): + """FW.update() -> RC: nonzero if the file has changed state""" cdef int rc - if isinstance(me.file, str): - rc = fwatch_update(&me.fw, me.file) + if me.fname: + return fwatch_update(&me.fw, me.fname) else: - rc = fwatch_updatefd(&me.fw, _getfd(me.file)) - return rc + return fwatch_updatefd(&me.fw, me.fd) ###----- That's all, folks --------------------------------------------------