[Zope-CMF] Problem adding Portal Images programatically

Jens Vagelpohl jens@zope.com
Fri, 5 Oct 2001 07:41:22 -0400


if you use invokeFactory instead of addImage in your createImage method=20=

then the portal type gets set correctly as well as cataloging and =
workflow=20
stuff.

check CMFCore/PortalFolder.py for details, it takes an argument =
"type_name"
  ('Image' in this case) and an id. then you grab a reference to this =
new=20
image and set the image contents (the "file" argument) by using the =
image'
s edit method (see CMFDefault/Image.py)

jens


On Friday, October 5, 2001, at 06:44 , Josef Albert Meile wrote:

> Hello group,
>
> I saw Gr=E9goire Weber's HowTo about "adding objects at member
> creation"
> (http://www.zope.org/Members/gregweb/cmf_add_objects_at_member_creatio
> n), took some code from it, and addapted it to my necessities.
>
> I need to add an image (on this case a logo) before I create an
> instance of my product. I can add the image and I can see it from my
> product and from the manage interface, but I can't see it from the
> portal. Whenever I click on the link that appears on the
> folder_contents form, I get the following error:
>
> BEGIN ERROR MESSAGE --->
>
> Error Type: Not Found
> Error Value: Cannot find default view for
> /NewPortal/Members/jmeile/GRYTXTR5.JPG"
>
> Troubleshooting Suggestions
>
>  The URL may be incorrect.
>  The parameters passed to this resource may be incorrect.
>  A resource that this resource relies on may be encountering an error.
>
> Traceback (innermost last):
>  File /usr/local/Zope-2.3.0/lib/python/ZPublisher/Publish.py, line
>  223, in publish_module
>  File /usr/local/Zope-2.3.0/lib/python/ZPublisher/Publish.py, line
>  187, in publish
>  File /usr/local/Zope-2.3.0/lib/python/Zope/__init__.py, line 221, in
>  zpublisher_exception_hook (Object: GRYTXTR5.JPG)
>  File /usr/local/Zope-2.3.0/lib/python/ZPublisher/Publish.py, line
>  171, in publish
>  File /usr/local/Zope-2.3.0/lib/python/ZPublisher/mapply.py, line
>  160, in mapply (Object: view)
>  File /usr/local/Zope-2.3.0/lib/python/ZPublisher/Publish.py, line
>  112, in call_object (Object: view)
>  File
>  /usr/local/Zope-2.3.0/lib/python/Products/CMFCore/PortalContent.py,
>  line 247, in view (Object: GRYTXTR5.JPG)
>  File
>  /usr/local/Zope-2.3.0/lib/python/Products/CMFCore/PortalContent.py,
>  line 234, in __call__ (Object: GRYTXTR5.JPG)
>  File
>  /usr/local/Zope-2.3.0/lib/python/Products/CMFCore/PortalContent.py,
>  line 227, in _getDefaultView (Object: GRYTXTR5.JPG)
>  Not Found: (see above)
>
> END ERROR MESSAGE --->
>
> My editDone form looks like this:
>
> BEGIN EDITDONE --->
>
> <dtml-call "REQUEST.set('fileContent',
>             REQUEST.form['attachedImage'].read())">
> <dtml-call "REQUEST.set('fileName',
>             REQUEST.form['attachedImage'].filename)">
> <dtml-call "REQUEST.set('objectName',getShortName(fileName))">
> <dtml-let user=3D"portal_membership.getAuthenticatedMember().getUserName=

> ()" folderLocation=3D"portal_membership.getHomeFolder(user).absolute_url=

> ()">
>     <dtml-call "REQUEST.set('myContext',REQUEST)">
>     <dtml-call "createImage(portal_membership.getHomeFolder(user),
>                             fileName,fileContent)">
>     <dtml-call "REQUEST.set('jobCompanyLogo',
>                              folderLocation+'/'+objectName)">
> </dtml-let>
> <dtml-call
> "propertysheets.JobOfferPropertySheet.manage_changeProperties
> (REQUEST)">
> <dtml-call "manage_changeProperties(REQUEST)">
> <dtml-call indexObject>
> <dtml-call "RESPONSE.redirect(URL2+'/folder_contents')">
>
> END EDITDONE --->
> note1: The function getShortName returns only the filename without
> its path
> note2: attachedImage comes from this input:
>        <input type=3D"file" name=3D"attachedImage">
>
> and my method createImage, which is external, looks like this:
>
> BEGIN CREATEIMAGE --->
>
> from Products.CMFDefault import Image
> from string import rfind
>
> def createImage(location, fileName, fileContent):
>   #gets only the file name without its path
>   pos=3Drfind(fileName,'\\')
>   shortName=3DfileName[pos+1:len(fileName)]
>
>   #adds the image in the specified location
>
> Image.addImage
> (self=3Dlocation,id=3DshortName,file=3DfileContent,title=3DfileName,co
> ntent_type=3D'Image')
>
> END CREATEIMAGE --->
>
> I guess the problem could be the part where Gregory say:
>   if hasattr(ob, '_setPortalTypeName'):
>     ob._setPortalTypeName('Image')
> I didn't put this line because then I get another error which says
> that
> names beginning with "_" are forbidden.
>
> What could be wrong?
>
> Thanks in advanced,
> Josef.
>
>
> _______________________________________________
> Zope-CMF maillist  -  Zope-CMF@zope.org
> http://lists.zope.org/mailman/listinfo/zope-cmf
>
> See http://www.zope.org/Products/PTK/Tracker for bug reports and =
feature=20
> requests