Nuxeo mailing list archives
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.