[PyObjC-svn] r2156 - in trunk/pyobjc/pyobjc-framework-FSEvents: . Examples Lib/FSEvents Modules PyObjCTest

[email protected]
Newsgroups gmane.comp.python.pyobjc.cvs
Message-ID <[email protected]>
Author: ronaldoussoren
Date: Mon Apr 13 03:32:15 2009
New Revision: 2156

Log:
* Complete unittests
* Example actually works now
* Fix small issues with metadata and manual wrapper
* Update version to 2.2b2


Removed:
   trunk/pyobjc/pyobjc-framework-FSEvents/README.txt
Modified:
   trunk/pyobjc/pyobjc-framework-FSEvents/Examples/watcher.py
   trunk/pyobjc/pyobjc-framework-FSEvents/Lib/FSEvents/PyObjC.bridgesupport
   trunk/pyobjc/pyobjc-framework-FSEvents/Modules/_callbacks.m
   trunk/pyobjc/pyobjc-framework-FSEvents/PyObjCTest/test_fsevents.py
   trunk/pyobjc/pyobjc-framework-FSEvents/setup.py

Modified: trunk/pyobjc/pyobjc-framework-FSEvents/Examples/watcher.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-FSEvents/Examples/watcher.py	(original)
+++ trunk/pyobjc/pyobjc-framework-FSEvents/Examples/watcher.py	Mon Apr 13 03:32:15 2009
@@ -3,6 +3,7 @@
 import sys
 import os
 import stat
+import errno
 
 def T_or_F(x):
     if x:
@@ -131,7 +132,7 @@
     settings.debug("FSEventStreamFlushAsync(streamRef = %s)", streamRef)
     FSEventStreamFlushAsync(streamRef)
 
-def fsevents_callback(streamRef, clientInfo, numEvents, eventPaths, eventMarsks, eventIDs):
+def fsevents_callback(streamRef, clientInfo, numEvents, eventPaths, eventMasks, eventIDs):
     settings.debug("fsevents_callback(streamRef = %s, clientInfo = %s, numEvents = %s)", streamRef, clientInfo, numEvents)
     settings.debug("fsevents_callback: FSEventStreamGetLatestEventId(streamRef) => %s", FSEventStreamGetLatestEventId(streamRef))
     full_path = clientInfo
@@ -164,7 +165,7 @@
             print "Could not update size on %s"%(path,)
 
         else:
-            print "New total size: %d (change made to %s) for path: %s"(
+            print "New total size: %d (change made to %s) for path: %s"%(
                     get_total_size(), path, full_path)
 
 
@@ -265,7 +266,8 @@
     try:
         names = os.listdir(dirname)
     except os.error, msg:
-        if msg.errno == errno.ENOENT:
+        print msg.errno, errno.EPERM
+        if msg.errno in (errno.ENOENT, errno.EPERM, errno.EACCES):
             del dir_items[dirname] 
             return 0
 

Modified: trunk/pyobjc/pyobjc-framework-FSEvents/Lib/FSEvents/PyObjC.bridgesupport
==============================================================================
--- trunk/pyobjc/pyobjc-framework-FSEvents/Lib/FSEvents/PyObjC.bridgesupport	(original)
+++ trunk/pyobjc/pyobjc-framework-FSEvents/Lib/FSEvents/PyObjC.bridgesupport	Mon Apr 13 03:32:15 2009
@@ -22,7 +22,7 @@
     <arg type='^{__FSEventStream=}' />
   </function>
   <function name='FSEventStreamCopyPathsBeingWatched'>
-    <retval type='^{__CFArray=}' />
+    <retval type='^{__CFArray=}' already_cfretained='true' />
     <arg type='^{__FSEventStream=}' />
   </function>
   <function name='FSEventStreamCreate'>
@@ -47,7 +47,7 @@
     <arg type='L' />
   </function>
   <function name='FSEventStreamFlushAsync'>
-    <retval type='v' />
+    <retval type='q' />
     <arg type='^{__FSEventStream=}' />
   </function>
   <function name='FSEventStreamFlushSync'>

Modified: trunk/pyobjc/pyobjc-framework-FSEvents/Modules/_callbacks.m
==============================================================================
--- trunk/pyobjc/pyobjc-framework-FSEvents/Modules/_callbacks.m	(original)
+++ trunk/pyobjc/pyobjc-framework-FSEvents/Modules/_callbacks.m	Mon Apr 13 03:32:15 2009
@@ -268,7 +268,7 @@
 	PyObject* py_flags;
 	PyObject* py_deviceToWatch;
 
-	if (!PyArg_ParseTuple(args, "OOOOOOO",
+	if (!PyArg_ParseTuple(args, "OOOOOOOO",
 		&py_allocator, &py_callback, &py_callback_info, 
 		&py_deviceToWatch, &py_pathsToWatch, &py_sinceWhen, 
 		&py_latency, &py_flags)) {

Modified: trunk/pyobjc/pyobjc-framework-FSEvents/PyObjCTest/test_fsevents.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-FSEvents/PyObjCTest/test_fsevents.py	(original)
+++ trunk/pyobjc/pyobjc-framework-FSEvents/PyObjCTest/test_fsevents.py	Mon Apr 13 03:32:15 2009
@@ -4,6 +4,7 @@
 import FSEvents
 from FSEvents import *
 from PyObjCTools.TestSupport import *
+import os, time
 
 class TestFSEvents (TestCase):
 
@@ -34,35 +35,91 @@
 
 
     def testFunctions(self):
+        def fsevents_callback(streamRef, clientInfo, numEvents, eventPaths, eventMarsks, eventIDs):
+            pass
+        context = object()
+
+        ref = FSEventStreamCreate(None, fsevents_callback, context, 
+                ["/etc", "/tmp"], kFSEventStreamEventIdSinceNow, 2.0,  kFSEventStreamCreateFlagUseCFTypes|kFSEventStreamCreateFlagNoDefer)
+
+        self.failUnlessIsInstance(ref, FSEventStreamRef)
+        FSEventStreamRelease(ref); ref = None
+
+        ref = FSEventStreamCreateRelativeToDevice(
+                None, fsevents_callback, context,
+                os.stat('/').st_dev, ["/etc", "/tmp"], kFSEventStreamEventIdSinceNow, 2.0,  kFSEventStreamCreateFlagUseCFTypes|kFSEventStreamCreateFlagNoDefer)
+        self.failUnlessIsInstance(ref, FSEventStreamRef)
+        try:
+            v = FSEventStreamGetLatestEventId(ref)
+            self.failUnlessIsInstance(v, (int, long))
+
+            v = FSEventStreamGetDeviceBeingWatched(ref)
+            self.failUnlessIsInstance(v, (int, long))
+
+            self.failUnlessResultIsCFRetained(FSEventStreamCopyPathsBeingWatched)
+            v = FSEventStreamCopyPathsBeingWatched(ref)
+            self.failUnlessIsInstance(v, CFArrayRef)
+            self.failUnlessEqual(len(v), 2)
+            self.failUnlessEqual(v, ["/etc", "/tmp"])
+
+            v = FSEventsGetCurrentEventId()
+            self.failUnlessIsInstance(v, (int, long))
+
+            v = FSEventsCopyUUIDForDevice(os.stat('/').st_dev)
+            self.failUnlessIsInstance(v, CFUUIDRef)
+
+            v = FSEventsGetLastEventIdForDeviceBeforeTime(os.stat('/').st_dev, time.time()-(3600*25))
+            self.failUnlessIsInstance(v, (int, long))
+
+            # Calling this function can affect the actual device (when running
+            # the tests as root), therefore test against /dev which is a virtual
+            # filesystem on OSX
+            self.failUnlessResultIsBOOL(FSEventsPurgeEventsForDeviceUpToEventId)
+            v = FSEventsPurgeEventsForDeviceUpToEventId(os.stat('/dev').st_dev, 
+                    FSEventsGetLastEventIdForDeviceBeforeTime(os.stat('/dev').st_dev, 0))
+            self.failUnlessIsInstance(v, bool)
+
+            FSEventStreamRetain(ref)
+            FSEventStreamRelease(ref)
+
+            rl = CFRunLoopGetCurrent()
+            FSEventStreamScheduleWithRunLoop(ref, rl, kCFRunLoopDefaultMode)
+
+
+            self.failUnlessResultIsBOOL(FSEventStreamStart)
+            FSEventStreamStart(ref)
+
+            v = FSEventStreamFlushAsync(ref)
+            self.failUnlessIsInstance(v, (int, long))
+
+            FSEventStreamFlushSync(ref)
+            FSEventStreamStop(ref)
+
+            FSEventStreamUnscheduleFromRunLoop(ref, rl, FSEventStreamUnscheduleFromRunLoop)
+
+            fd = os.dup(2)
+            fd2 = os.open('/dev/null', os.O_WRONLY)
+            os.dup2(fd2, 2)
+            os.close(fd2)
+            try:
+                FSEventStreamShow(ref)
+
+            finally:
+                os.dup2(fd, 2)
+
+            v = FSEventStreamCopyDescription(ref)
+            self.failUnlessIsInstance(v, unicode)
+
+            FSEventStreamInvalidate(ref)
+
+        finally:
+            FSEventStreamRelease(ref); ref = None
 
-        self.assert_( hasattr(FSEvents, 'FSEventStreamCreateRelativeToDevice') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamCreateRelativeToDevice') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamGetLatestEventId') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamGetDeviceBeingWatched') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamCopyPathsBeingWatched') )
-        self.assert_( hasattr(FSEvents, 'FSEventsGetCurrentEventId') )
-        self.assert_( hasattr(FSEvents, 'FSEventsCopyUUIDForDevice') )
-        self.assert_( hasattr(FSEvents, 'FSEventsGetLastEventIdForDeviceBeforeTime') )
-        self.assert_( hasattr(FSEvents, 'FSEventsPurgeEventsForDeviceUpToEventId') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamRetain') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamRelease') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamScheduleWithRunLoop') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamUnscheduleFromRunLoop') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamInvalidate') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamStart') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamFlushAsync') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamFlushSync') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamStop') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamShow') )
-        self.assert_( hasattr(FSEvents, 'FSEventStreamCopyDescription') )
 
     def testOpaque(self):
         self.assert_( hasattr(FSEvents, 'FSEventStreamRef') )
         self.failUnlessIsOpaquePointer(FSEventStreamRef)
 
-    def testIncomplete(self):
-        self.fail("Add proper tests for FSEvents functions")
-
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-FSEvents/setup.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-FSEvents/setup.py	(original)
+++ trunk/pyobjc/pyobjc-framework-FSEvents/setup.py	Mon Apr 13 03:32:15 2009
@@ -1,5 +1,7 @@
 ''' 
-Wrappers for framework 'FSEvents'. 
+Wrappers for the "FSEvents" API in MacOS X. The functions in this framework
+allow you to reliably observe changes to the filesystem, even when your
+program is not running al the time.
 
 These wrappers don't include documentation, please check Apple's documention
 for information on how to use this framework and PyObjC's documentation
@@ -18,7 +20,7 @@
 
 setup(
     name='pyobjc-framework-FSEvents',
-    version='2.2b1',
+    version='2.2b2',
     description = "Wrappers for the framework FSEvents on Mac OS X",
     long_description = __doc__,
     author='Ronald Oussoren',

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.