From 18f29f8d9ad05c9c3a6df5ed9d01da0d1fc59529 Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 19 May 2008 15:00:33 +0000 Subject: [PATCH] provide icon attribute; work in progress: BSCW interface git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2606 fd906abe-77d9-0310-91a1-e0d9ade77398 --- integrator/base.py | 62 +++- integrator/bscw.py | 45 ++- integrator/bscw.txt | 28 +- integrator/filesystem.py | 1 + integrator/filesystem.txt | 6 + integrator/interfaces.py | 26 +- integrator/mime.types | 701 ++++++++++++++++++++++++++++++++++++++ integrator/tests/bscw.py | 3 + 8 files changed, 843 insertions(+), 29 deletions(-) create mode 100644 integrator/mime.types diff --git a/integrator/base.py b/integrator/base.py index 90079b5..6a84b55 100644 --- a/integrator/base.py +++ b/integrator/base.py @@ -22,13 +22,15 @@ Base implementation for accessing external content objects. $Id$ """ +import os from zope.app.container.contained import Contained from zope.cachedescriptors.property import Lazy from zope import component from zope.interface import implements -from cybertools.integrator.interfaces import IContainerFactory, IFileFactory -from cybertools.integrator.interfaces import IReadContainer, IFile, IImage +from cybertools.integrator.interfaces import IContainerFactory +from cybertools.integrator.interfaces import IItemFactory, IFileFactory +from cybertools.integrator.interfaces import IReadContainer, IItem, IFile, IImage # proxy base (sample) classes @@ -37,14 +39,20 @@ class ReadContainer(Contained): implements(IReadContainer) - factoryName = 'sample' __parent__ = None + factoryName = 'sample' + + icon = 'folder' def __init__(self, address, **kw): self.address = address for k, v in kw.items(): setattr(self, k, v) + @Lazy + def itemFactory(self): + return component.getUtility(IItemFactory, name=self.factoryName) + @Lazy def fileFactory(self): return component.getUtility(IFileFactory, name=self.factoryName) @@ -82,14 +90,24 @@ class ReadContainer(Contained): has_key = __contains__ -class File(object): +class Item(object): - implements(IFile) + implements(IItem) contentType = None - data = None + icon = 'item' __parent__ = None + def __init__(self, address, **kw): + self.address = address + for k, v in kw.items(): + setattr(self, k, v) + + +class File(Item): + + implements(IFile) + def __init__(self, address, contentType, **kw): self.address = address self.contentType = contentType @@ -104,11 +122,17 @@ class File(object): def getSize(self): return len(self.data) + @property + def icon(self): + return (mimeTypes.get(self.contentType) or ['unknown'])[0] -def Image(File): + +class Image(File): implements(IImage) + icon = 'image' + def getImageSize(self): return 0, 0 @@ -130,9 +154,33 @@ class ContainerFactory(Factory): proxyClass = ReadContainer +class ItemFactory(Factory): + + implements(IItemFactory) + + proxyClass = Item + + class FileFactory(Factory): implements(IFileFactory) proxyClass = File # real implementations should also care about images + +# provide a dictionary of MIME types with extensions = icon names + +class MimeTypes(dict): + + def __init__(self): + super(MimeTypes, self).__init__() + fn = os.path.join(os.path.dirname(__file__), 'mime.types') + mtFile = open(fn, 'r') + for line in mtFile: + line = line.strip() + if line: + parts = line.split() + self[parts[0]] = parts[1:] + mtFile.close() + +mimeTypes = MimeTypes() diff --git a/integrator/bscw.py b/integrator/bscw.py index 90772e2..f75e39f 100644 --- a/integrator/bscw.py +++ b/integrator/bscw.py @@ -30,8 +30,8 @@ from zope.cachedescriptors.property import Lazy from zope.contenttype import guess_content_type from zope.interface import implements, Attribute -from cybertools.integrator.base import ContainerFactory, FileFactory -from cybertools.integrator.base import ReadContainer, File, Image +from cybertools.integrator.base import ContainerFactory, ItemFactory, FileFactory +from cybertools.integrator.base import ReadContainer, Item, File, Image from cybertools.text import mimetypes @@ -62,7 +62,10 @@ class ReadContainer(ReadContainer): def data(self): data = self.server.get_attributes(self.address, ['__class__', 'type', 'id', 'name', 'descr', 'url_link'], 1, True) - return dict((item['id'], item) for item in data[1]) + if len(data) > 1: + return dict((item['id'], item) for item in data[1]) + else: + return {} def keys(self): return self.data.keys() @@ -79,14 +82,16 @@ class ReadContainer(ReadContainer): if key not in self.data: return default item = self.data[key] - if 'Folder' in item['__class__']: + itemType = item['__class__'].split('.')[-1] + if itemType == 'Folder': return self.containerFactory(item['id'], server=self.server, name=item['name']) - elif 'Document' in item['__class__']: - return self.fileFactory(item['id'], item['type'], server=self.server, - name=item['name']) + elif itemType == 'Document': + return self.fileFactory(item['id'], contentType=item['type'], + server=self.server, name=item['name']) else: - return OtherObject(item['id'], None, server=self.server, name=item['name']) + return self.itemFactory(item['id'], server=self.server, + name=item['name'], type=itemType) def values(self): return [self.get(k) for k in self] @@ -101,6 +106,13 @@ class ReadContainer(ReadContainer): return key in self.keys() +class Item(Item): + + @property + def icon(self): + return self.type.lower() + + class File(File): contentType = None @@ -113,11 +125,6 @@ class File(File): return 0 -class OtherObject(File): - - data = u'' - - # factory classes class ContainerFactory(ContainerFactory): @@ -131,10 +138,18 @@ class ContainerFactory(ContainerFactory): return self.proxyClass(address, server=server, **kw) +class ItemFactory(ItemFactory): + + proxyClass = Item + + class FileFactory(FileFactory): def __call__(self, address, **kw): - contentType = kw.pop('type', 'application/octet-stream') - obj = File(address, contentType, **kw) + contentType = kw.pop('contentType', 'application/octet-stream') + if contentType.startswith('image/'): + obj = Image(address, contentType, **kw) + else: + obj = File(address, contentType, **kw) obj.contentType = contentType return obj diff --git a/integrator/bscw.txt b/integrator/bscw.txt index 16fd44c..768ea20 100644 --- a/integrator/bscw.txt +++ b/integrator/bscw.txt @@ -20,15 +20,33 @@ repository for testing purposes. >>> server.get_attributes('4', standardAttributes + ['containers'], 1, True) [{...'name': 'public'...}, [{...'name': 'Introduction'...}]] -Access via read container and file proxies ------------------------------------------- +Access via read container and item/file proxies +----------------------------------------------- + +Let's first register the proxy factory utilities. >>> from zope import component - >>> from cybertools.integrator.bscw import ContainerFactory + >>> from cybertools.integrator.bscw import ContainerFactory, ItemFactory, FileFactory >>> component.provideUtility(ContainerFactory(), name='bscw') + >>> component.provideUtility(ItemFactory(), name='bscw') + >>> component.provideUtility(FileFactory(), name='bscw') + +We can now access the root object of the BSCW repository >>> from cybertools.integrator.interfaces import IContainerFactory >>> root = component.getUtility(IContainerFactory, name='bscw')('4', server=server) - >>> sorted(root) - ['bs_5'] + >>> sorted(root.items()) + [('bs_5', <...ReadContainer object...>)] + + >>> root.icon + 'folder' + + >>> bs_5 = root['bs_5'] + >>> data = server.get_attributes('bs_5', + ... ['__class__', 'type', 'id', 'name', 'descr', 'url_link'], 1, True) + + >>> bs_5.items() + [] + >>> bs_5.icon + 'folder' diff --git a/integrator/filesystem.py b/integrator/filesystem.py index 3ac7c12..25bd605 100644 --- a/integrator/filesystem.py +++ b/integrator/filesystem.py @@ -98,6 +98,7 @@ class File(File): class Image(File): width = height = 0 + icon = 'image' def getImageSize(self): return self.width, self.height diff --git a/integrator/filesystem.txt b/integrator/filesystem.txt index 7c25f41..bc8ecfe 100644 --- a/integrator/filesystem.txt +++ b/integrator/filesystem.txt @@ -39,12 +39,16 @@ Accessing Objects in the Filesystem 'application/x-tar' >>> file.getSize() 432L + >>> file.icon + 'tar' >>> logo = sub['loops_logo.png'] >>> logo.contentType 'image/png' >>> logo.getImageSize() (145, 42) + >>> logo.icon + 'image' >>> html = top['index.html'] >>> html.contentType @@ -55,4 +59,6 @@ Accessing Objects in the Filesystem Subdirectory Demo... ... + >>> html.icon + 'html' diff --git a/integrator/interfaces.py b/integrator/interfaces.py index 1916eca..6a57cdd 100644 --- a/integrator/interfaces.py +++ b/integrator/interfaces.py @@ -28,7 +28,25 @@ from zope.app.publication.interfaces import IFileContent from zope.interface import Interface, Attribute -class IFile(IFile, IFileContent): +class IProxy(Interface): + + icon = Attribute('The name of an icon that may be used for symbolizing ' + 'this object.') + + +class IReadContainer(IProxy, IReadContainer): + """ A readable container of items. + """ + + +class IItem(IProxy, Interface): + """ A terminal kind of object, i.e. not a container of other objects. + """ + + +class IFile(IItem, IFile, IFileContent): + + contentType = Attribute('The MIME type of the object.') def getData(num): """ Return num bytes from the file`s data. @@ -52,8 +70,12 @@ class IContainerFactory(IProxyFactory): """ +class IItemFactory(IProxyFactory): + """ Creates general terminal proxy objects. + """ + + class IFileFactory(IProxyFactory): """ Creates file proxy objects for the external specification given. """ - diff --git a/integrator/mime.types b/integrator/mime.types new file mode 100644 index 0000000..7252877 --- /dev/null +++ b/integrator/mime.types @@ -0,0 +1,701 @@ +application/activemessage +application/andrew-inset ez +application/applefile +application/atomicmail +application/batch-SMTP +application/beep+xml +application/cals-1840 +application/commonground +application/cu-seeme cu +application/cybercash +application/dca-rft +application/dec-dx +application/docbook+xml +application/dsptype tsp +application/dvcs +application/edi-consent +application/edi-x12 +application/edifact +application/eshop +application/font-tdpfr +application/futuresplash spl +application/ghostview +application/hta hta +application/http +application/hyperstudio +application/iges +application/index +application/index.cmd +application/index.obj +application/index.response +application/index.vnd +application/iotp +application/ipp +application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/mac-binhex40 hqx +application/mac-compactpro cpt +application/macwriteii +application/marc +application/mathematica nb +application/mathematica-old +application/msaccess mdb +application/msword doc dot +application/news-message-id +application/news-transmission +application/ocsp-request +application/ocsp-response +application/octet-stream bin +application/oda oda +application/ogg ogg +application/parityfec +application/pdf pdf +application/pgp-encrypted +application/pgp-keys key +application/pgp-signature pgp +application/pics-rules prf +application/pkcs10 +application/pkcs7-mime +application/pkcs7-signature +application/pkix-cert +application/pkix-crl +application/pkixcmp +application/postscript ps ai eps +application/prs.alvestrand.titrax-sheet +application/prs.cww +application/prs.nprend +application/qsig +application/rar rar +application/rdf+xml rdf +application/remote-printing +application/riscos +application/rss+xml rss +application/rtf +application/sdp +application/set-payment +application/set-payment-initiation +application/set-registration +application/set-registration-initiation +application/sgml +application/sgml-open-catalog +application/sieve +application/slate +application/smil smi smil +application/timestamp-query +application/timestamp-reply +application/vemmi +application/whoispp-query +application/whoispp-response +application/wita +application/wordperfect wpd +application/wordperfect5.1 wp5 +application/x400-bp +application/xhtml+xml xhtml xht +application/xml xml xsl +application/xml-dtd +application/xml-external-parsed-entity +application/zip zip +application/vnd.3M.Post-it-Notes +application/vnd.accpac.simply.aso +application/vnd.accpac.simply.imp +application/vnd.acucobol +application/vnd.aether.imp +application/vnd.anser-web-certificate-issue-initiation +application/vnd.anser-web-funds-transfer-initiation +application/vnd.audiograph +application/vnd.bmi +application/vnd.businessobjects +application/vnd.canon-cpdl +application/vnd.canon-lips +application/vnd.cinderella cdy +application/vnd.claymore +application/vnd.commerce-battelle +application/vnd.commonspace +application/vnd.comsocaller +application/vnd.contact.cmsg +application/vnd.cosmocaller +application/vnd.ctc-posml +application/vnd.cups-postscript +application/vnd.cups-raster +application/vnd.cups-raw +application/vnd.cybank +application/vnd.dna +application/vnd.dpgraph +application/vnd.dxr +application/vnd.ecdis-update +application/vnd.ecowin.chart +application/vnd.ecowin.filerequest +application/vnd.ecowin.fileupdate +application/vnd.ecowin.series +application/vnd.ecowin.seriesrequest +application/vnd.ecowin.seriesupdate +application/vnd.enliven +application/vnd.epson.esf +application/vnd.epson.msf +application/vnd.epson.quickanime +application/vnd.epson.salt +application/vnd.epson.ssf +application/vnd.ericsson.quickcall +application/vnd.eudora.data +application/vnd.fdf +application/vnd.ffsns +application/vnd.flographit +application/vnd.framemaker +application/vnd.fsc.weblaunch +application/vnd.fujitsu.oasys +application/vnd.fujitsu.oasys2 +application/vnd.fujitsu.oasys3 +application/vnd.fujitsu.oasysgp +application/vnd.fujitsu.oasysprs +application/vnd.fujixerox.ddd +application/vnd.fujixerox.docuworks +application/vnd.fujixerox.docuworks.binder +application/vnd.fut-misnet +application/vnd.grafeq +application/vnd.groove-account +application/vnd.groove-identity-message +application/vnd.groove-injector +application/vnd.groove-tool-message +application/vnd.groove-tool-template +application/vnd.groove-vcard +application/vnd.hhe.lesson-player +application/vnd.hp-HPGL +application/vnd.hp-PCL +application/vnd.hp-PCLXL +application/vnd.hp-hpid +application/vnd.hp-hps +application/vnd.httphone +application/vnd.hzn-3d-crossword +application/vnd.ibm.MiniPay +application/vnd.ibm.afplinedata +application/vnd.ibm.modcap +application/vnd.informix-visionary +application/vnd.intercon.formnet +application/vnd.intertrust.digibox +application/vnd.intertrust.nncp +application/vnd.intu.qbo +application/vnd.intu.qfx +application/vnd.irepository.package+xml +application/vnd.is-xpr +application/vnd.japannet-directory-service +application/vnd.japannet-jpnstore-wakeup +application/vnd.japannet-payment-wakeup +application/vnd.japannet-registration +application/vnd.japannet-registration-wakeup +application/vnd.japannet-setstore-wakeup +application/vnd.japannet-verification +application/vnd.japannet-verification-wakeup +application/vnd.koan +application/vnd.lotus-1-2-3 +application/vnd.lotus-approach +application/vnd.lotus-freelance +application/vnd.lotus-notes +application/vnd.lotus-organizer +application/vnd.lotus-screencam +application/vnd.lotus-wordpro +application/vnd.mcd +application/vnd.mediastation.cdkey +application/vnd.meridian-slingshot +application/vnd.mif +application/vnd.minisoft-hp3000-save +application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf +application/vnd.mobius.dis +application/vnd.mobius.msl +application/vnd.mobius.plc +application/vnd.mobius.txf +application/vnd.motorola.flexsuite +application/vnd.motorola.flexsuite.adsi +application/vnd.motorola.flexsuite.fis +application/vnd.motorola.flexsuite.gotap +application/vnd.motorola.flexsuite.kmr +application/vnd.motorola.flexsuite.ttc +application/vnd.motorola.flexsuite.wem +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry +application/vnd.ms-asf +application/vnd.ms-excel xls xlb xlt +application/vnd.ms-lrm +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +application/vnd.ms-powerpoint ppt pps +application/vnd.ms-project +application/vnd.ms-tnef +application/vnd.ms-works +application/vnd.mseq +application/vnd.msign +application/vnd.music-niff +application/vnd.musician +application/vnd.netfpx +application/vnd.noblenet-directory +application/vnd.noblenet-sealer +application/vnd.noblenet-web +application/vnd.novadigm.EDM +application/vnd.novadigm.EDX +application/vnd.novadigm.EXT +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +application/vnd.osa.netdeploy +application/vnd.palm +application/vnd.pg.format +application/vnd.pg.osasli +application/vnd.powerbuilder6 +application/vnd.powerbuilder6-s +application/vnd.powerbuilder7 +application/vnd.powerbuilder7-s +application/vnd.powerbuilder75 +application/vnd.powerbuilder75-s +application/vnd.previewsystems.box +application/vnd.publishare-delta-tree +application/vnd.pvi.ptid1 +application/vnd.pwg-xhtml-print+xml +application/vnd.rapid +application/vnd.rim.cod cod +application/vnd.s3sms +application/vnd.seemail +application/vnd.shana.informed.formdata +application/vnd.shana.informed.formtemplate +application/vnd.shana.informed.interchange +application/vnd.shana.informed.package +application/vnd.smaf mmf +application/vnd.sss-cod +application/vnd.sss-dtf +application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd sdp +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +application/vnd.svd +application/vnd.swiftview-ics +application/vnd.symbian.install sis +application/vnd.triscape.mxs +application/vnd.trueapp +application/vnd.truedoc +application/vnd.tve-trigger +application/vnd.ufdl +application/vnd.uplanet.alert +application/vnd.uplanet.alert-wbxml +application/vnd.uplanet.bearer-choice +application/vnd.uplanet.bearer-choice-wbxml +application/vnd.uplanet.cacheop +application/vnd.uplanet.cacheop-wbxml +application/vnd.uplanet.channel +application/vnd.uplanet.channel-wbxml +application/vnd.uplanet.list +application/vnd.uplanet.list-wbxml +application/vnd.uplanet.listcmd +application/vnd.uplanet.listcmd-wbxml +application/vnd.uplanet.signal +application/vnd.vcx +application/vnd.vectorworks +application/vnd.vidsoft.vidconference +application/vnd.visio vsd +application/vnd.vividence.scriptfile +application/vnd.wap.sic +application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo +application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf +application/vnd.xara +application/vnd.xfdl +application/vnd.yellowriver-custom-menu +application/x-123 wk +application/x-abiword abw +application/x-apple-diskimage dmg +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-cdf cdf +application/x-cdlink vcd +application/x-chess-pgn pgn +application/x-core +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-director dcr dir dxr +application/x-dms dms +application/x-doom wad +application/x-dvi dvi +application/x-executable +application/x-flac flac +application/x-font pfa pfb gsf pcf pcf.Z +application/x-freemind mm +application/x-futuresplash spl +application/x-gnumeric gnumeric +application/x-go-sgf sgf +application/x-graphing-calculator gcf +application/x-gtar gtar tgz taz +application/x-hdf hdf +application/x-httpd-php phtml pht php +application/x-httpd-php-source phps +application/x-httpd-php3 php3 +application/x-httpd-php3-preprocessed php3p +application/x-httpd-php4 php4 +application/x-ica ica +application/x-internet-signup ins isp +application/x-iphone iii +application/x-iso9660-image iso +application/x-java-applet +application/x-java-bean +application/x-java-jnlp-file jnlp +application/x-javascript js +application/x-jmol jmz +application/x-kchart chrt +application/x-kdelnk +application/x-killustrator kil +application/x-koan skp skd skt skm +application/x-kpresenter kpr kpt +application/x-kspread ksp +application/x-kword kwd kwt +application/x-latex latex +application/x-lha lha +application/x-lzh lzh +application/x-lzx lzx +application/x-maker frm maker frame fm fb book fbdoc +application/x-mif mif +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-msdos-program com exe bat dll +application/x-msi msi +application/x-netcdf nc +application/x-ns-proxy-autoconfig pac +application/x-nwc nwc +application/x-object o +application/x-oz-application oza +application/x-pkcs7-certreqresp p7r +application/x-pkcs7-crl crl +application/x-python-code pyc pyo +application/x-quicktimeplayer qtl +application/x-redhat-package-manager rpm +application/x-rx +application/x-sh sh +application/x-shar shar +application/x-shellscript +application/x-shockwave-flash swf swfl +application/x-stuffit sit +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-tar tar +application/x-tcl tcl +application/x-tex-gf gf +application/x-tex-pk pk +application/x-texinfo texinfo texi +application/x-trash ~ % bak old sik +application/x-troff t tr roff +application/x-troff-man man +application/x-troff-me me +application/x-troff-ms ms +application/x-ustar ustar +application/x-videolan +application/x-wais-source src +application/x-wingz wz +application/x-x509-ca-cert crt +application/x-xcf xcf +application/x-xfig fig +application/x-xpinstall xpi + +audio/32kadpcm +audio/basic au snd +audio/g.722.1 +audio/l16 +audio/midi mid midi kar +audio/mp4a-latm +audio/mpa-robust +audio/mpeg mpga mpega mp2 mp3 m4a +audio/mpegurl m3u +audio/parityfec +audio/prs.sid sid +audio/telephone-event +audio/tone +audio/vnd.cisco.nse +audio/vnd.cns.anp1 +audio/vnd.cns.inf1 +audio/vnd.digital-winds +audio/vnd.everad.plj +audio/vnd.lucent.voice +audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 +audio/vnd.nuera.ecelp7470 +audio/vnd.nuera.ecelp9600 +audio/vnd.octel.sbc +audio/vnd.qcelp +audio/vnd.rhetorex.32kadpcm +audio/vnd.vmx.cvsd +audio/x-aiff aif aiff aifc +audio/x-gsm gsm +audio/x-mpegurl m3u +audio/x-ms-wma wma +audio/x-ms-wax wax +audio/x-pn-realaudio-plugin +audio/x-pn-realaudio ra rm ram +audio/x-realaudio ra +audio/x-scpls pls +audio/x-sd2 sd2 +audio/x-wav wav + +chemical/x-alchemy alc +chemical/x-cache cac cache +chemical/x-cache-csf csf +chemical/x-cactvs-binary cbin cascii ctab +chemical/x-cdx cdx +chemical/x-cerius cer +chemical/x-chem3d c3d +chemical/x-chemdraw chm +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-compass cpa +chemical/x-crossfire bsd +chemical/x-csml csml csm +chemical/x-ctx ctx +chemical/x-cxf cxf cef +#chemical/x-daylight-smiles smi +chemical/x-embl-dl-nucleotide emb embl +chemical/x-galactic-spc spc +chemical/x-gamess-input inp gam gamin +chemical/x-gaussian-checkpoint fch fchk +chemical/x-gaussian-cube cub +chemical/x-gaussian-input gau gjc gjf +chemical/x-gaussian-log gal +chemical/x-gcg8-sequence gcg +chemical/x-genbank gen +chemical/x-hin hin +chemical/x-isostar istr ist +chemical/x-jcamp-dx jdx dx +chemical/x-kinemage kin +chemical/x-macmolecule mcm +chemical/x-macromodel-input mmd mmod +chemical/x-mdl-molfile mol +chemical/x-mdl-rdfile rd +chemical/x-mdl-rxnfile rxn +chemical/x-mdl-sdfile sd sdf +chemical/x-mdl-tgf tgf +#chemical/x-mif mif +chemical/x-mmcif mcif +chemical/x-mol2 mol2 +chemical/x-molconn-Z b +chemical/x-mopac-graph gpt +chemical/x-mopac-input mop mopcrt mpc dat zmt +chemical/x-mopac-out moo +chemical/x-mopac-vib mvb +chemical/x-ncbi-asn1 asn +chemical/x-ncbi-asn1-ascii prt ent +chemical/x-ncbi-asn1-binary val aso +chemical/x-ncbi-asn1-spec asn +chemical/x-pdb pdb ent +chemical/x-rosdal ros +chemical/x-swissprot sw +chemical/x-vamas-iso14976 vms +chemical/x-vmd vmd +chemical/x-xtel xtel +chemical/x-xyz xyz + +image/cgm +image/g3fax +image/gif gif +image/ief ief +image/jpeg jpeg jpg jpe +image/naplps +image/pcx pcx +image/png png +image/prs.btif +image/prs.pti +image/svg+xml svg svgz +image/tiff tiff tif +image/vnd.cns.inf2 +image/vnd.djvu djvu djv +image/vnd.dwg +image/vnd.dxf +image/vnd.fastbidsheet +image/vnd.fpx +image/vnd.fst +image/vnd.fujixerox.edmics-mmr +image/vnd.fujixerox.edmics-rlc +image/vnd.mix +image/vnd.net-fpx +image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff +image/x-cmu-raster ras +image/x-coreldraw cdr +image/x-coreldrawpattern pat +image/x-coreldrawtemplate cdt +image/x-corelphotopaint cpt +image/x-icon ico +image/x-jg art +image/x-jng jng +image/x-ms-bmp bmp +image/x-photoshop psd +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd + +inode/chardevice +inode/blockdevice +inode/directory-locked +inode/directory +inode/fifo +inode/socket + +message/delivery-status +message/disposition-notification +message/external-body +message/http +message/s-http +message/news +message/partial +message/rfc822 + +model/iges igs iges +model/mesh msh mesh silo +model/vnd.dwf +model/vnd.flatland.3dml +model/vnd.gdl +model/vnd.gs-gdl +model/vnd.gtw +model/vnd.mts +model/vnd.vtu +model/vrml wrl vrml + +multipart/alternative +multipart/appledouble +multipart/byteranges +multipart/digest +multipart/encrypted +multipart/form-data +multipart/header-set +multipart/mixed +multipart/parallel +multipart/related +multipart/report +multipart/signed +multipart/voice-message + +text/calendar ics icz +text/comma-separated-values csv +text/css css +text/directory +text/english +text/enriched +text/h323 323 +text/html html htm shtml +text/iuls uls +text/mathml mml +text/parityfec +text/plain asc txt text diff pot +text/prs.lines.tag +text/rfc822-headers +text/richtext rtx +text/rtf rtf +text/scriptlet sct wsc +text/t140 +text/texmacs tm ts +text/tab-separated-values tsv +text/uri-list +text/vnd.abc +text/vnd.curl +text/vnd.DMClientScript +text/vnd.flatland.3dml +text/vnd.fly +text/vnd.fmi.flexstor +text/vnd.in3d.3dml +text/vnd.in3d.spot +text/vnd.IPTC.NewsML +text/vnd.IPTC.NITF +text/vnd.latex-z +text/vnd.motorola.reflex +text/vnd.ms-mediapackage +text/vnd.sun.j2me.app-descriptor jad +text/vnd.wap.si +text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-bibtex bib +text/x-c++hdr h++ hpp hxx hh +text/x-c++src c++ cpp cxx cc +text/x-chdr h +text/x-crontab +text/x-csh csh +text/x-csrc c +text/x-dsrc d +text/x-haskell hs +text/x-java java +text/x-literate-haskell lhs +text/x-makefile +text/x-moc moc +text/x-pascal p pas +text/x-pcs-gcd gcd +text/x-perl pl pm +text/x-python py +text/x-server-parsed-html +text/x-setext etx +text/x-sh sh +text/x-tcl tcl tk +text/x-tex tex ltx sty cls +text/x-vcalendar vcs +text/x-vcard vcf + +video/dl dl +video/dv dif dv +video/fli fli +video/gl gl +video/mpeg mpeg mpg mpe +video/mp4 mp4 +video/quicktime qt mov +video/mp4v-es +video/parityfec +video/pointer +video/vnd.fvt +video/vnd.motorola.video +video/vnd.motorola.videop +video/vnd.mpegurl mxu +video/vnd.mts +video/vnd.nokia.interleaved-multimedia +video/vnd.vivo +video/x-la-asf lsf lsx +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie + +x-conference/x-cooltalk ice + +x-world/x-vrml vrm vrml wrl diff --git a/integrator/tests/bscw.py b/integrator/tests/bscw.py index 61828c8..fe9746c 100644 --- a/integrator/tests/bscw.py +++ b/integrator/tests/bscw.py @@ -95,6 +95,9 @@ class BSCWServer(object): return baseAttributes def get_document(self, id, version_id): + obj = self.objects.get(id) + if obj is None: + raise Fault(10101, 'Bad object id: %s' % id) return '' def get_path(id):