Re: Probleme d'enregistrement des fichiers flexibles avec CPS Disk File Field (var/files)

Georges Racinet <[email protected]>
Newsgroups gmane.comp.web.zope.cps.general.french
Message-ID <[email protected]>
Le 7 nov. 2006, à 12:16, Remaud Frederic a écrit :

>
> Bonjour
>  
> Je suis sous CPS 3.4.2 avec une archi ZEO et stockage des fichiers sur 
> disque (CPS Disk File Field) et depuis le dernier reboot du serveur, 
> lorsqu’on joint des fichiers aux documents flexibles (je n’ai pourtant 
> pas updaté CPS à partir du svn), on a une erreur
>  
> 	• 	Module Products.CPSDocument.CPSDocument, line 78, in validate
> 	• 	Module Products.CPSDocument.FlexibleTypeInformation, line 811, in 
> validateObject
> 	• 	Module Products.CPSDocument.FlexibleTypeInformation, line 822, in 
> _commitDM
> 	• 	Module Products.CPSSchemas.DataModel, line 337, in _commit
> 	• 	Module Products.CPSSchemas.DataModel, line 359, in _commitData
> 	• 	Module Products.CPSSchemas.BasicFields, line 660, in 
> computeDependantFields
> 	• 	Module Products.CPSSchemas.DiskFile, line 50, in __init__
> 	• 	Module Products.CPSSchemas.DiskFile, line 65, in getNewFilename
> OSError: [Errno 2] No such file or directory: 
> '/home/zope/CalypsoV2/ZEOClients/zc1/var/files'
>  
> Pourtant, j’ai bien un CPS Disk File Field dans portal_schemas/File 
> dont le storage path est correct (../../../attached_files/Calypso321)

Oui, mais ce n'est justement pas celui qui est utilisé pour les 
flexibles: il est dans le schema 'file', qui sert pour les documents 
File.

>  
> Aucun problème pour les documents fichiers (ils sont bien stockés au 
> bon endroit) mais dès qu’il s’agit d’un flexible, il veut absolument 
> me mettre ca dans var/files.
>  
> Dois-je modifier les storage_path dans CPSSchemas/DiskFile.py ?

Normalement, le mieux est d'ajouter une propriété 'disk_storage_path' 
de type 'string' sur l'outil portal_schemas, elle devrait concerner 
toutes les instances de DiskFile.

Extrait de CPSSchemas/BasicFields.py:

     def getStoragePath(self):
         if self.disk_storage_path:
             return self.disk_storage_path
         else:
             portal_schemas = getToolByName(self, 'portal_schemas')
             storage_path = getattr(portal_schemas, 'disk_storage_path', 
'')
             if storage_path:
                 return storage_path
             return 'var/files'

On voit donc qu'on essaye successivement la propriété au niveau du 
champ, puis de l'outil, et qu'on utilise var/files en dernier recours.

 
> […]
> def __init__(self, id, title, file=None, content_type=None, 
> storage_path='var/files'):
> […]
> def addDiskFile(self, id, title, file=None, content_type=None,
>                 storage_path='var/files', REQUEST=None):

Certes, mais (toujours de BasicFields)

>         """Compute dependant fields.
>
>         schemas is the list of schemas
>
>         data is the dictionnary of the datamodel
>         """
>         field_id = self.getFieldId()
>         file = data[field_id] # May be None.
>         if isinstance(file, File) and not isinstance(file, DiskFile):
>             file = DiskFile(file.getId(), file.title, file.data,
>                             file.content_type, self.getStoragePath())
>             data[field_id] = file

En d'autres termes, au moment de calculer les champs dépendants, le 
champ en profite pour convertir si besoin le fichier normal qu'il 
contient en un DiskFile, et utilise pour cela le getStoragePath() cité 
plus haut. Donc pas la peine de toucher à DiskFile.

Mais pour finir sur les flexibles, le widget-modèle (celui qui est dans 
le layout de portal_layouts) peut aussi porter les valeurs 
d'initialisation des propriétés des champs à créer. C'est peut-être 
aussi ton cas ? C'est peut-être vérifiable dans l'onglet 
'introspection'

Quelques remarques générales:
	- on peut aller voir les schemas et layouts d'un document flexible en 
ZMI: aller sur le proxy, suivre le lien vers
            le doc, puis onglet 'Contents'.
	- les objets DiskFile portent leur storage_path, donc on ne peut pas 
décider de changer celui-ci a posteriori.
	- En ZEO, il faut bien sûr que le répertoire contenant les fichiers 
soit accessible par tous les clients. Pas un problème
             s'il s'agit de profiter d'un multiprocesseur. Avec 
plusieurs machines, il faut passer par exemple par NFS, avec les 	   
problèmes que cela peut engendrer.

_______________________________________________
cps-users-fr 
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>
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.