Re: [CPS-users-fr] Pb de Stockage externe séparé

Christophe Otton le.blaireau at free.fr
Jeu 10 Aou 12:37:35 CEST 2006


Georges Racinet a écrit :
>
> On Aug 10, 2006, at 1:49 AM, Christophe Otton wrote:
>
>> Georges Racinet a écrit :
>>>
>>> On Aug 9, 2006, at 10:48 AM, Christophe Otton wrote:
>>>
>>>> Bonjour,
>>>>
>>>> Sur un CPS 3.2.4.0 et Zope 2.7.5
>>>> J'ai créé deux sites cps avec un chacun un produit dans lequel est 
>>>> défini un chemin de stockage externe pour les fichiers attachés des 
>>>> types : file, news et flexible.
>>>> Pour les deux premiers pas de pb mais pour les flexibles le 
>>>> 'disk_storage_path' est défini uniquement dans un script :
>>>> AttachedFileWidgetPatch.py avec la ligne :
>>>>
>>>> ExtendedWidgets.CPSAttachedFileWidget.field_inits[0]['disk_storage_path'] 
>>>> = 'var/StoSite1'
>>>> et 'var/StoSite2' pour le deuxième site.
>>>>
>>>> Evidemment, le dernier produit installé défini le chemin de 
>>>> stockage pour les docs flexibles des deux sites.
>>>> J'ai donc essayé de trouver un endroit où modifier ce chemin 
>>>> uniquement pour le site :
>>>> D'après la doc de CPSSchema les champs CPS Disk File ont une 
>>>> propriété 'disk_storage_path' apparemment définie dans le schéma du 
>>>> document mais les doc flexibles n'ont pas de schema ; Toujours 
>>>> d'après la doc, si cette propriété n'est pas définie c'est la 
>>>> valeur du portal_schemas qui est utilisée ? Mais je ne sais pas où 
>>>> est définie cette valeur.
>>>
>>> Si, il y a un schéma (flexible), qui est créé dans le document au 
>>> moment de l'ajout du premier widget flexible par recopie de celui 
>>> qui est dans portal_types, qui sert donc de point de départ.
>>>
>>> Lorsque l'on ajoute un widget flexible, les champs nécessaires sont 
>>> créés dans ledit schéma, en fonction du type de widget créé. C'est 
>>> l'attribut de classe
>>> "field_types" qui sert à déterminer quels types de champs créer.
>>>
>>>
>>> En CPS 3.4 (je ne suis pas sûr pour 3.2), les propriétés des champs 
>>> sont de plus initialisées en fonction de l'attribut "field_inits". 
>>> Voici un extrait de CPSSchemas/ExtendedWidgets.py:
>>>
>>> class CPSAttachedFileWidget(CPSFileWidget):
>>>     """AttachedFile widget."""
>>>     meta_type = 'AttachedFile Widget'
>>>
>>>     field_types = ('CPS File Field',   # File
>>>                    'CPS String Field', # Plain text for indexing 
>>> (optional)
>>>                    'CPS File Field',   # Preview (HTML, optional)
>>>                    'CPS SubObjects Field',)
>>>
>>>     field_inits = ({'is_searchabletext': 0,
>>>                     'suffix_text': '_f1', # _f# are autocomputed 
>>> field ext
>>>                     'suffix_html': '_f2',
>>>                     'suffix_html_subfiles': '_f3',
>>>                     },
>>>                    {'is_searchabletext': 1}, {}, {},
>>>                    )
>>>
>>> Lorsque l'on ajoute un widget flexible de type (meta_type) 
>>> "AttachedFile Widget" il y a donc creation de 4 champs. Le premier 
>>> (le CPS File Field) portera les références aux autres, le second est 
>>> indexable full text et rien de particulier pour les autres.
>>>
>>> Pour faire ce que vous voulez le plus simple est de créer un nouveau 
>>> type de widget héritant de celui-là portant les bons paramètres 
>>> (disk_storage_path sur le Disk File Field)
>>>
>> Merci de votre réponse,
>> Voilà ce que j'en ai fait en essayant de faire au plus simple (j'ai 
>> un peu de mal avec le python...)
>> J'aimerais bien quand même une confirmation de la validité de la 
>> manip avant de la mettre sur le serveur en production
>> - bien que ça m'ait pris une journée de réflexion et 3h de travail, 
>> ça me semble qd même un peu trop simple.
>
> J'ai des doutes.
>
> À tester:
>     - présence de "previsualisation, version imprimable". Ceci 
> supposant qu'ils sont là pour les documents File (ie les binaires de 
> conversion sont ok)
>     - indexation. Mêmes présupposés
>
> Pour vérifier que ça se passe bien, vous pouvez aller voir directement 
> le schema flexible dans le document
>     - ajouter /manage à l'url du proxy, onglet "Proxy"
>     - suivre le lien vers le document lui-même (dans 
> portal_repository) et prendre l'onglet "Contents"
>     - ensuite c'est comme un schema de portal_schemas. Il faut 
> vérifier qu'il y a bien les trois champs, que le premier est du bon 
> type, connaît les suffixes des autres, a le bon storage path, etc.
>
>
>>
>> Donc sur le site 1:
>> J'ai laissé le patch complet du CPSAttachedFileWidget qui si je 
>> comprends bien patch pour tous les sites :
>
> Tous les sites de la même instance Zope, oui.
>
>> from Products.CPSSchemas import ExtendedWidgets
>>
>> field_types = ('CPS Disk File Field', 'CPS String Field', 'CPS File 
>> Field')
>>
>> ExtendedWidgets.CPSAttachedFileWidget.field_types = field_types
>> ExtendedWidgets.CPSAttachedFileWidget.field_inits[0]['disk_storage_path'] 
>> = 'var/storage'
>
> ok
>
>> Pour le site 2 : J'ai créé :
>> un nouveau widget basé sur CPSAttachedFileWidget en mettant dans mon 
>> produit un getCustomDocumentWidget.py comme ça (Facteau c'est mon 
>> Site2):
>> """Return custom layouts types."""
>> widgets = {
>>         'AttachedFileFacteau Widget': {
>>             'type': 'CPS AttachedFile Widget Type',
>>             'data': {
>>                 'field_inits':{
>>                     'disk_storage_path':'var/facteau',
>>                                 },
>>                     },
>>             },
>>       }
>> return widgets
>
> Hum, je n'y crois pas trop si je me souviens bien de comment les 
> widget types de CPS < 3.4 instancient des widgets (data finit en 
> manage_changeProperties).
>
> Àma c'est plus simple et symétrique de sous-classer plutôt que de 
> patcher (et ce sera + facile à passer en 3.4 un jour). 
Oui c'est en projet ...
> Quelque chose dans ce goût là (non testé)
>
> from Globals import InitializeClass
> from Products.CPSSchemas.Widget import CPSWidgetType
> from Products.CPSSchemas.WidgetTypesTool import WidgetTypeRegistry
>
> class Site1AttachedFileWidget(CPSAttachedFileWidget):
>     field_types = ('CPS Disk File Field',   # File
>                    'CPS String Field', # Plain text for indexing 
> (optional)
>                    'CPS File Field',   # Preview (HTML, optional)
> #                   'CPS SubObjects Field', # uncomment for 3.4
>     )
>
>     field_inits = ({'is_searchabletext': 0,
>                     'suffix_text': '_f1', # _f# are autocomputed field 
> ext
>                     'suffix_html': '_f2',
> #                    'suffix_html_subfiles': '_f3', # uncomment for 3.4
>             'disk_storage_path' = '/var/site1',
>                     },
>                    {'is_searchabletext': 1,
>                     },
>                    {'is_searchabletext': 0,
>                     },
>                    )
>
> class Site1AttachedFileWidgetType(CPSWidgetType):
>     """AttachedFile widget type."""
>     meta_type = "Site1 AttachedFile Widget Type"
>     cls = Site1AttachedFileWidget
>
> WidgetTypeRegistry.register(Site1AttachedFileWidgetType)
>
> etc., et utiliser ce widget type dans getCustomDocumentWidgetTypes à 
> la place du CPS AttachedFile Widget Types avec data : {}
>
>
Mouais effectivement, il va falloir en passer par là ... au redémarrage 
ce matin l'ajout d'un fichier attaché dans un flexible sur Site2 fait 
une erreur :Memory error et le seul fichier attaché stocké au bon 
endroit (celui d'hier soir) n'a ni prévisualisation ni version imprimable.
Merci encore pour votre aide.
>
>> et un nouveau layout pour 'flexible_content'
>> flexible_content_layout = {
>>     'widgets': { .../...
>> 'attachedFileFacteau': {
>>             'type': 'AttachedFileFacteau Widget',
>>             'data': {
>>                 'title': 'cpsdoc_flex_attachedFile_title',
>>                 'fields': ('?',),
>>                 etc...
>> et
>> 'layout': {
>>         'style_prefix': 'layout_default_',
>>         'flexible_widgets': ('textimage:10', 'link', 
>> 'attachedFileFacteau:10'),
>>         etc..
>> Après un test rapide ça a l'air de fonctionner, mais j'ai un encore 
>> un petit doute...
>
>
>
>>
>>>>
>>>> Est ce quelqu'un a une idée pour résoudre le pb ?
>>>>
>>>> Merci d'avance
>>>>
>>>> _______________________________________________
>>>> cps-users-fr
>>>> Adresse de la liste : cps-users-fr at lists.nuxeo.com
>>>> Gestion de l'abonnement : 
>>>> <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>
>>>
>>> ---------
>>> Georges Racinet                        Nuxeo SAS
>>> gracinet at nuxeo.com                http://nuxeo.com
>>> Tel: +33 (0) 1 40 33 71 73
>>>
>>>
>>>
>>>
>>
>>
>
> ---------
> Georges Racinet                        Nuxeo SAS
> gracinet at nuxeo.com                http://nuxeo.com
> Tel: +33 (0) 1 40 33 71 73
>
>
>
>




More information about the cps-users-fr mailing list

This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.