more clean-up of resource types - old MediaAsset objects are now mapped to Resource objects with resourceType 'file'

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1291 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-08-07 16:21:33 +00:00
parent e860cf5a07
commit acc878a63d
6 changed files with 54 additions and 59 deletions

View file

@ -8,7 +8,7 @@ The loops platform is built up of three parts:
(1) concepts: simple interconnected objects usually representing (1) concepts: simple interconnected objects usually representing
meta-information meta-information
(2) resources: (possibly large) atomic objects like documents and media assets (2) resources: (possibly large) atomic objects like documents and files
(3) views: objects (usually hierarchically organized nodes) providing (3) views: objects (usually hierarchically organized nodes) providing
access to and presenting concepts or resources access to and presenting concepts or resources
@ -31,8 +31,7 @@ Let's start with creating a few example concepts, putting them in a
top-level loops container and a concept manager: top-level loops container and a concept manager:
>>> from loops import Loops >>> from loops import Loops
>>> site['loops'] = Loops() >>> loopsRoot = site['loops'] = Loops()
>>> loopsRoot = site['loops']
>>> from loops.concept import ConceptManager, Concept >>> from loops.concept import ConceptManager, Concept
>>> loopsRoot['concepts'] = ConceptManager() >>> loopsRoot['concepts'] = ConceptManager()
@ -230,11 +229,11 @@ Index attributes adapter
Resources and what they have to do with Concepts Resources and what they have to do with Concepts
================================================ ================================================
>>> from loops.interfaces import IResource, IDocument, IMediaAsset >>> from loops.interfaces import IResource, IDocument
We first need a resource manager: We first need a resource manager:
>>> from loops.resource import ResourceManager >>> from loops.resource import ResourceManager, Resource
>>> loopsRoot['resources'] = ResourceManager() >>> loopsRoot['resources'] = ResourceManager()
>>> resources = loopsRoot['resources'] >>> resources = loopsRoot['resources']
@ -251,11 +250,11 @@ A common type of resource is a document:
>>> doc1.contentType >>> doc1.contentType
u'' u''
Another one is a media asset: We can also directly use Resource objects; these behave like files.
In fact, by using resource types we can explicitly assign a resource
the 'file' type, but we will use this feature later:
>>> from loops.interfaces import IMediaAsset >>> img = Resource(u'A png Image')
>>> from loops.resource import MediaAsset
>>> img = MediaAsset(u'A png Image')
For testing we use some simple files from the tests directory: For testing we use some simple files from the tests directory:
@ -270,7 +269,7 @@ For testing we use some simple files from the tests directory:
>>> img.contentType >>> img.contentType
'image/png' 'image/png'
>>> pdf = MediaAsset(u'A pdf File') >>> pdf = Resource(u'A pdf File')
>>> pdf.data = open(os.path.join(path, 'test.pdf')).read() >>> pdf.data = open(os.path.join(path, 'test.pdf')).read()
>>> pdf.getSize() >>> pdf.getSize()
25862 25862
@ -499,8 +498,7 @@ view; these views we have to provide as multi-adapters:
>>> sorted((t.token, t.title) for t in view.targetTypes()) >>> sorted((t.token, t.title) for t in view.targetTypes())
[('.loops/concepts/topic', u'Topic'), ('.loops/concepts/type', u'Type'), [('.loops/concepts/topic', u'Topic'), ('.loops/concepts/type', u'Type'),
('.loops/concepts/unknown', u'Unknown Type'), ('.loops/concepts/unknown', u'Unknown Type'),
('loops.resource.Document', u'Document'), ('loops.resource.Document', u'Document')]
('loops.resource.MediaAsset', u'Media Asset')]
>>> view.update() >>> view.update()
True True
>>> sorted(resources.keys()) >>> sorted(resources.keys())

View file

@ -188,7 +188,9 @@
<require <require
permission="zope.View" permission="zope.View"
interface=".interfaces.IBaseResource" /> interface=".interfaces.IBaseResource
zope.app.size.interfaces.ISized" />
<require <require
permission="zope.ManageContent" permission="zope.ManageContent"
@ -289,8 +291,8 @@
<adapter factory="loops.type.ConceptType" /> <adapter factory="loops.type.ConceptType" />
<adapter factory="loops.type.ResourceType" <adapter factory="loops.type.ResourceType"
for="loops.interfaces.IDocument" /> for="loops.interfaces.IDocument" />
<adapter factory="loops.type.ResourceType" <!--<adapter factory="loops.type.ResourceType"
for="loops.interfaces.IMediaAsset" /> for="loops.interfaces.IMediaAsset" />-->
<adapter factory="loops.type.LoopsTypeManager" /> <adapter factory="loops.type.LoopsTypeManager" />
<adapter factory="loops.type.TypeConcept" trusted="True" /> <adapter factory="loops.type.TypeConcept" trusted="True" />

View file

@ -64,16 +64,16 @@ resources,
>>> file1 = resources['file1'] = Resource(u'A file') >>> file1 = resources['file1'] = Resource(u'A file')
>>> file1.resourceType = concepts['file'] >>> file1.resourceType = concepts['file']
(the use of Document and MediaAsset may get deprecated soon:) (the use of Document may get deprecated soon:)
>>> from loops.resource import Document, MediaAsset >>> from loops.resource import Document
>>> doc1 = Document(u'Zope Info') >>> doc1 = Document(u'Zope Info')
>>> resources['doc1'] = doc1 >>> resources['doc1'] = doc1
>>> doc1.title >>> doc1.title
u'Zope Info' u'Zope Info'
>>> img1 = MediaAsset(u'An Image') >>> img1 = resources['img1'] = Resource(u'An Image')
>>> resources['img1'] = img1 >>> img1.resourceType = concepts['file']
and nodes (in view space): and nodes (in view space):
@ -178,11 +178,11 @@ Now let's have a look at resources.
>>> file1_type.factory >>> file1_type.factory
<class 'loops.resource.Resource'> <class 'loops.resource.Resource'>
(The use of Document and MediaAsset will be deprecated soon...) (The use of Document will be deprecated soon...)
>>> from loops.interfaces import IResource >>> from loops.interfaces import IResource, IDocument
>>> from loops.type import ResourceType >>> from loops.type import ResourceType
>>> ztapi.provideAdapter(IResource, IType, ResourceType) >>> ztapi.provideAdapter(IDocument, IType, ResourceType)
>>> doc1_type = IType(doc1) >>> doc1_type = IType(doc1)
>>> doc1_type.title >>> doc1_type.title
@ -199,8 +199,12 @@ Now let's have a look at resources.
<class 'loops.resource.Document'> <class 'loops.resource.Document'>
>>> img1_type = IType(img1) >>> img1_type = IType(img1)
>>> img1_type.token
'.loops/concepts/file'
>>> img1_type.tokenForSearch
'loops:resource:file'
>>> img1_type.title >>> img1_type.title
u'Media Asset' u'File'
Can we find out somehow which types are available? This is the time to look Can we find out somehow which types are available? This is the time to look
for a type manager. This could be a utility; but in the loops package it for a type manager. This could be a utility; but in the loops package it
@ -220,7 +224,7 @@ get a type manager from all loops objects, always with the same context:
['.loops/concepts/file', '.loops/concepts/image', '.loops/concepts/predicate', ['.loops/concepts/file', '.loops/concepts/image', '.loops/concepts/predicate',
'.loops/concepts/textdocument', '.loops/concepts/topic', '.loops/concepts/textdocument', '.loops/concepts/topic',
'.loops/concepts/type', '.loops/concepts/type',
'loops.resource.Document', 'loops.resource.MediaAsset'] 'loops.resource.Document']
>>> typeManager.getType('.loops/concepts/topic') == cc1_type >>> typeManager.getType('.loops/concepts/topic') == cc1_type
True True
@ -234,8 +238,7 @@ condition:
>>> types = typeManager.listTypes(exclude=('concept',)) >>> types = typeManager.listTypes(exclude=('concept',))
>>> sorted(t.token for t in types) >>> sorted(t.token for t in types)
['.loops/concepts/file', '.loops/concepts/image', ['.loops/concepts/file', '.loops/concepts/image',
'.loops/concepts/textdocument', 'loops.resource.Document', '.loops/concepts/textdocument', 'loops.resource.Document']
'loops.resource.MediaAsset']
Type-based interfaces and adapters Type-based interfaces and adapters

View file

@ -305,21 +305,14 @@ class IDocument(IDocumentSchema, IResource):
""" """
class IMediaAssetSchema(IResourceSchema): # media asset is probably obsolete - replaced by plain Resource with
# resourceType = file.
data = schema.Bytes( class IMediaAssetView(IResourceSchema):
title=_(u'Data'),
description=_(u'Media asset file'),
default='',
missing_value='',
required=False)
class IMediaAssetView(IMediaAssetSchema):
""" Used for accessing a media asset via a node's target attribute""" """ Used for accessing a media asset via a node's target attribute"""
class IMediaAsset(IMediaAssetSchema, IResource, IBaseAsset): class IMediaAsset(IResourceSchema, IResource, IBaseAsset):
""" A resource containing a (typically binary) file-like content """ A resource containing a (typically binary) file-like content
or an image. or an image.
""" """

View file

@ -46,7 +46,7 @@ from cybertools.typology.interfaces import ITypeManager
from interfaces import IBaseResource, IResource from interfaces import IBaseResource, IResource
from interfaces import IFile from interfaces import IFile
from interfaces import IDocument, IDocumentSchema, IDocumentView from interfaces import IDocument, IDocumentSchema, IDocumentView
from interfaces import IMediaAsset, IMediaAssetSchema, IMediaAssetView from interfaces import IMediaAsset, IMediaAssetView
from interfaces import IResourceManager, IResourceManagerContained from interfaces import IResourceManager, IResourceManagerContained
from interfaces import ILoopsContained from interfaces import ILoopsContained
from interfaces import IIndexAttributes from interfaces import IIndexAttributes
@ -192,9 +192,6 @@ class FileAdapter(ResourceAdapterBase):
implements(IFile) implements(IFile)
# TODO: provide specialized access to data attribute analog to zope.app.file;
# automatically set contentType...
class DocumentWriteFileAdapter(object): class DocumentWriteFileAdapter(object):

View file

@ -133,7 +133,8 @@ class ResourceType(LoopsType):
#adapts(IResource) #adapts(IResource)
typeTitles = {'MediaAsset': u'Media Asset'} #typeTitles = {'MediaAsset': u'Media Asset'}
typeTitles = {}
typeInterface = None typeInterface = None
qualifiers = ('resource',) qualifiers = ('resource',)
@ -212,7 +213,8 @@ class LoopsTypeManager(TypeManager):
def resourceTypes(self): def resourceTypes(self):
return tuple([ResourceTypeInfo(self.context, cls) return tuple([ResourceTypeInfo(self.context, cls)
for cls in (Document, MediaAsset)]) for cls in (Document,)])
#for cls in (Document, MediaAsset)])
class TypeConcept(AdapterBase): class TypeConcept(AdapterBase):