[Checkins] SVN: z3c.filetype/trunk/src/z3c/filetype/ added mp4 detection, nicer tests, added full tests for ifiletype adapter

Bernd Dorn bernd.dorn at lovelysystems.com
Sat Nov 25 04:59:09 EST 2006


Log message for revision 71304:
  added mp4 detection, nicer tests, added full tests for ifiletype adapter

Changed:
  U   z3c.filetype/trunk/src/z3c/filetype/README.txt
  U   z3c.filetype/trunk/src/z3c/filetype/api.py
  U   z3c.filetype/trunk/src/z3c/filetype/interfaces/filetypes.py
  U   z3c.filetype/trunk/src/z3c/filetype/magic.mime
  U   z3c.filetype/trunk/src/z3c/filetype/magic.txt
  A   z3c.filetype/trunk/src/z3c/filetype/testdata/ipod.mp4

-=-
Modified: z3c.filetype/trunk/src/z3c/filetype/README.txt
===================================================================
--- z3c.filetype/trunk/src/z3c/filetype/README.txt	2006-11-24 22:23:18 UTC (rev 71303)
+++ z3c.filetype/trunk/src/z3c/filetype/README.txt	2006-11-25 09:58:52 UTC (rev 71304)
@@ -21,41 +21,43 @@
   ...     path = os.path.join(testData, name)
   ...     i =  api.getInterfacesFor(file(path, 'rb'))
   ...     print name
-  ...     print i
+  ...     print sorted(i)
   DS_Store
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IBinaryFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IBinaryFile>]
   IMG_0504.JPG
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IJPGFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IJPGFile>]
   faces_gray.avi
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IAVIFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IAVIFile>]
   ftyp.mov
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IQuickTimeFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IQuickTimeFile>]
+  ipod.mp4
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IMP4File>]
   jumps.mov
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IQuickTimeFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IQuickTimeFile>]
   logo.gif
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IGIFFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IGIFFile>]
   logo.gif.bz2
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IBZIP2File>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IBZIP2File>]
   test.flv
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IFLVFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IFLVFile>]
   test.gnutar
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.ITARFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.ITARFile>]
   test.html
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>]
   test.png
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IPNGFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IPNGFile>]
   test.tar
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.ITARFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.ITARFile>]
   test.tgz
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IGZIPFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IGZIPFile>]
   test.txt.gz
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IGZIPFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IGZIPFile>]
   test2.html
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>]
   test2.thml
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IHTMLFile>]
   thumbnailImage_small.jpeg
-  set([<InterfaceClass z3c.filetype.interfaces.filetypes.IJPGFile>])
+  [<InterfaceClass z3c.filetype.interfaces.filetypes.IJPGFile>]
 
 The filename is only used if no interface is found, because we should
 not trust the filename in most cases.
@@ -158,32 +160,41 @@
   >>> sorted((interface.directlyProvidedBy(foo)))
   [<InterfaceClass z3c.filetype.interfaces.filetypes.IFLVFile>]
 
+
+IFileType adapters
+==================
+
 There is also an adapter from ITypedFile to IFileType, which can be
 used to get the default content type for the interface.
 
   >>> from z3c.filetype import adapters
   >>> component.provideAdapter(adapters.TypedFileType)
-  >>> ft = interfaces.IFileType(foo)
-  >>> ft.contentType
-  'video/x-flv'
-  
+  >>> for name in fileNames:
+  ...     if name==".svn": continue
+  ...     path = os.path.join(testData, name)
+  ...     i =  Foo(file(path, 'rb'))
+  ...     notify(ObjectModifiedEvent(i))
+  ...     print name + " --> " + interfaces.IFileType(i).contentType
+  DS_Store --> application/octet-stream
+  IMG_0504.JPG --> image/jpeg
+  faces_gray.avi --> video/x-msvideo
+  ftyp.mov --> video/quicktime
+  ipod.mp4 --> video/mp4
+  jumps.mov --> video/quicktime
+  logo.gif --> image/gif
+  logo.gif.bz2 --> application/x-bzip2
+  test.flv --> video/x-flv
+  test.gnutar --> application/x-tar
+  test.html --> text/html
+  test.png --> image/png
+  test.tar --> application/x-tar
+  test.tgz --> application/x-gzip
+  test.txt.gz --> application/x-gzip
+  test2.html --> text/html
+  test2.thml --> text/html
+  thumbnailImage_small.jpeg --> image/jpeg
 
-Let us try an unknown file type, this should apply an IBinaryFile
-interface.
 
-  >>> foo.data = file(os.path.join(testData,'DS_Store'), 'rb')
-  >>> notify(ObjectModifiedEvent(foo))
-  >>> sorted((interface.directlyProvidedBy(foo)))
-  [<InterfaceClass z3c.filetype.interfaces.filetypes.IBinaryFile>]  
-
-
-  >>> foo.data = file(os.path.join(testData,'ftyp.mov'), 'rb')
-  >>> notify(ObjectModifiedEvent(foo))
-  >>> sorted((interface.directlyProvidedBy(foo)))
-  [<InterfaceClass z3c.filetype.interfaces.filetypes.IQuickTimeFile>]
-  >>> interfaces.IFileType(foo).contentType
-  'video/quicktime'
-
 Size adapters
 =============
 

Modified: z3c.filetype/trunk/src/z3c/filetype/api.py
===================================================================
--- z3c.filetype/trunk/src/z3c/filetype/api.py	2006-11-24 22:23:18 UTC (rev 71303)
+++ z3c.filetype/trunk/src/z3c/filetype/api.py	2006-11-25 09:58:52 UTC (rev 71304)
@@ -46,7 +46,7 @@
             ifaces.update(byMimeType(t))
     if not ifaces:
         ifaces.add(interfaces.filetypes.IBinaryFile)
-    return ifaces
+    return InterfaceSet(*ifaces)
 
 def applyInterfaces(obj):
     assert(interfaces.ITypeableFile.providedBy(obj))

Modified: z3c.filetype/trunk/src/z3c/filetype/interfaces/filetypes.py
===================================================================
--- z3c.filetype/trunk/src/z3c/filetype/interfaces/filetypes.py	2006-11-24 22:23:18 UTC (rev 71303)
+++ z3c.filetype/trunk/src/z3c/filetype/interfaces/filetypes.py	2006-11-25 09:58:52 UTC (rev 71304)
@@ -83,7 +83,7 @@
 IMPEGFile.setTaggedValue(MTM,re.compile('video/mpe?g'))
 IMPEGFile.setTaggedValue(MT,'video/mpeg')
 
-class IMP4File(IVideoFile):
+class IMP4File(IQuickTimeFile):
     """IMP4File IPod Video File Format"""
 IMP4File.setTaggedValue(MTM,re.compile('video/mp4'))
 IMP4File.setTaggedValue(MT,'video/mp4')
@@ -111,5 +111,3 @@
     """XML File"""
 IXMLFile.setTaggedValue(MTM,re.compile('text/xml'))
 IXMLFile.setTaggedValue(MT,'text/xml')
-
-

Modified: z3c.filetype/trunk/src/z3c/filetype/magic.mime
===================================================================
--- z3c.filetype/trunk/src/z3c/filetype/magic.mime	2006-11-24 22:23:18 UTC (rev 71303)
+++ z3c.filetype/trunk/src/z3c/filetype/magic.mime	2006-11-25 09:58:52 UTC (rev 71304)
@@ -605,6 +605,11 @@
 #
 0	string		MOVI				video/sgi
 
+# mpeg4 from freedesktop.org.xml
+4   string   ftypisom   video/mp4
+4   string   ftypmp42   video/mp4
+
+
 # Apple Quicktime: Scan for all known top-level QT atom markers
 4       string          moov            video/quicktime (moov)
 4       string          mdat            video/quicktime (mdat)
@@ -925,3 +930,4 @@
 
 # Macromedia Flash FLV Video File Format
 0	string		FLV			video/x-flv
+

Modified: z3c.filetype/trunk/src/z3c/filetype/magic.txt
===================================================================
--- z3c.filetype/trunk/src/z3c/filetype/magic.txt	2006-11-24 22:23:18 UTC (rev 71303)
+++ z3c.filetype/trunk/src/z3c/filetype/magic.txt	2006-11-25 09:58:52 UTC (rev 71304)
@@ -12,21 +12,22 @@
   >>> for name in fileNames:
   ...     if name==".svn": continue
   ...     path = os.path.join(testData, name)
-  ...     print name, m.detect(file(path))
-  DS_Store set([])
-  IMG_0504.JPG set(['image/jpeg'])
-  faces_gray.avi set(['video/x-msvideo'])
-  ftyp.mov set(['video/quicktime'])
-  jumps.mov set(['video/quicktime'])
-  logo.gif set(['image/gif'])
-  logo.gif.bz2 set(['application/x-bzip2'])
-  test.flv set(['video/x-flv'])
-  test.gnutar set(['application/x-tar'])
-  test.html set(['text/html'])
-  test.png set(['image/png'])
-  test.tar set(['application/x-tar'])
-  test.tgz set(['application/x-gzip'])
-  test.txt.gz set(['application/x-gzip'])
-  test2.html set(['text/html'])
-  test2.thml set(['text/html'])
-  thumbnailImage_small.jpeg set(['image/jpeg'])
+  ...     print '%s --> %r' % (name,sorted(m.detect(file(path))))
+  DS_Store --> []
+  IMG_0504.JPG --> ['image/jpeg']
+  faces_gray.avi --> ['video/x-msvideo']
+  ftyp.mov --> ['video/quicktime']
+  ipod.mp4 --> ['video/mp4', 'video/quicktime']
+  jumps.mov --> ['video/quicktime']
+  logo.gif --> ['image/gif']
+  logo.gif.bz2 --> ['application/x-bzip2']
+  test.flv --> ['video/x-flv']
+  test.gnutar --> ['application/x-tar']
+  test.html --> ['text/html']
+  test.png --> ['image/png']
+  test.tar --> ['application/x-tar']
+  test.tgz --> ['application/x-gzip']
+  test.txt.gz --> ['application/x-gzip']
+  test2.html --> ['text/html']
+  test2.thml --> ['text/html']
+  thumbnailImage_small.jpeg --> ['image/jpeg']

Added: z3c.filetype/trunk/src/z3c/filetype/testdata/ipod.mp4
===================================================================
(Binary files differ)


Property changes on: z3c.filetype/trunk/src/z3c/filetype/testdata/ipod.mp4
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream



More information about the Checkins mailing list