Problème Plone/Python

5 messages Options
Embed this post
Permalink
stouil

Problème Plone/Python

Reply Threaded More More options
Print post
Permalink
Bonjour à tous,
 
Plone 2.1.2 / Zope 2.7.8 final.
 
Problème :
J'utilise le product PloneExfile (version 4.0.1)
 
Dans une page zpt, j'ai le code suivant : (je n'ai pas mis le code en totalité ...)
 
<tal:yearFiles define="results python:here.portal_catalog.searchResults(portal_type='PloneExFile' )">
...
<li tal:define="results python: [b.getObject() for b in results];
                                     dummy python:context.sortFile(results,action='triFichier(results)')"
                                     tal:repeat="obj results">
Dans le répertoire portal_skins/custom de plone, j'ai crée un script python qui porte le nom sortFile qui prend en paramètre
Parameter List: L,action.
Ce script en gros permet de trier une liste de mes fichiers pdf selon le titre.
 
Mon problème est que lorsque je code la ligne suivante dans ma page template :
 
dummy python:context.sortFile(results,action='triFichier(results)')"
 
Ma liste est mal triée.

08.07 S
08.08 A
08.09 S
08.10 A
08.101 S
08.107 S
08.108 S 
08.11 S
08.118 S
Normalement, je devrais avoir le résultat suivant:
08.07 S
08.08 A
08.09 S
08.10 A 
08.11 S
08.101 S
08.107 S
08.108 S
08.118 S

Quelqu'un a t-il une idée ?

Ps: Dans mon portal_catalog au niveau de l'onglet Indexes, je n'ai pas sortable_title que je pourrais utiliser par exemple avec la commande sort_on='sortable_title' dans :
... portal_catalog.searchResults(portal_type='PloneExFile',
                                                   sort_on='sortable_title' )">
 
Merci d'avance pour votre aide.
 
Saïd.

_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Encolpe DEGOUTE

Re: Problème Plone/Python

Reply Threaded More More options
Print post
Permalink
Bonjour,

said touil a écrit :

> Bonjour à tous,
> Ce script en gros permet de trier une liste de mes fichiers pdf selon
> le titre.
>  
> Mon problème est que lorsque je code la ligne suivante dans ma page
> template :
>  
> dummy python:context.sortFile(results,action='triFichier(results)')"
>  
> Ma liste est mal triée.
>
> 08.07 S
> 08.08 A
> 08.09 S
> 08.10 A
> 08.101 S
> 08.107 S
> 08.108 S
> 08.11 S
> 08.118 S
> Normalement, je devrais avoir le résultat suivant:
> 08.07 S
> 08.08 A
> 08.09 S
> 08.10 A
> 08.11 S
> 08.101 S
> 08.107 S
> 08.108 S
> 08.118 S
>
> Quelqu'un a t-il une idée ?
>

C'est un problème classique : le caractère ' ' est *plus petit* que les
chiffres en ascii, d'où le problème de tri.
Il y a plusieurs solution mais il faut toujours faire une troncature de
la chaine:
- tronquer sur l'espace blanc et transformer la première partie en réel
pour le tri
- tronquer sur une taille fixe pour faire un premier tri et faire un
second tri pour la deuxième partie

> Ps: Dans mon portal_catalog au niveau de l'onglet Indexes, je n'ai pas
> sortable_title que je pourrais utiliser par exemple avec la commande
> sort_on='sortable_title' dans :
> ... portal_catalog.searchResults(portal_type='PloneExFile',
>                                                  
> sort_on='sortable_title' )">

sort_on='Title', mais le problème sera le même.

Maintenant, nous pouvons être un peu plus sioux...

Il faut faire une méthode ou un script qui calcul un titre triable du
premier coup puis créer un index qui stocke cette valeur.

Pour un script fait à l'emporte pièce :

title = context.Title()
try:
    prefix_real, suffix_str = title.split(' ')
    prefix_real = float(prefix_real)

    # 5 chiffres avant la virgule et 5 chiffres apres
    new_title = '%011.5f %s' % (prefix_real, suffix_str)

    return new_title
except:
    return title


Pour la mise en place de l'index nous sommes sur #plone-fr sur
irc.freenode.net


--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Gilles Lenfant

Re: Problème Plone/Python

Reply Threaded More More options
Print post
Permalink
In reply to this post by stouil
C'est normal : en comparaison alphabétique "08.108 S" est inférieur à  
"08.11 S". Essayer et adapter ceci...

l = ['08.07 S', '08.08 A', '08.09 S', '08.10 A',
      '08.101 S', '08.107 S', '08.108 S', '08.11 S',
      '08.118 S']

def comparable(v):
        num, txt = v.strip().split()
        v1, v2 = [int(x) for x in num.split('.')]
        return (v1, v2, txt)

l.sort(lambda s1, s2: cmp(comparable(s1), comparable(s2)))
print l

D'autre part, il est déconseillé de faire un x.getObject() sur  
l'ensemble des résultats de recherche si les metadata du catalogue  
sont suffisantes pour le tri et l'affichage.

Le 11 juin 09 à 12:39, said touil a écrit :

> Bonjour à tous,
>
> Plone 2.1.2 / Zope 2.7.8 final.
>
> Problème :
> J'utilise le product PloneExfile (version 4.0.1)
>
> Dans une page zpt, j'ai le code suivant : (je n'ai pas mis le code  
> en totalité ...)
>
> <tal:yearFiles define="results  
> python:here.portal_catalog.searchResults(portal_type='PloneExFile' )">
> ...
> <li tal:define="results python: [b.getObject() for b in results];
>                                      dummy  
> python:context.sortFile(results,action='triFichier(results)')"
>                                      tal:repeat="obj results">
> Dans le répertoire portal_skins/custom de plone, j'ai crée un script  
> python qui porte le nom sortFile qui prend en paramètre
> Parameter List: L,action.
> Ce script en gros permet de trier une liste de mes fichiers pdf  
> selon le titre.
>
> Mon problème est que lorsque je code la ligne suivante dans ma page  
> template :
>
> dummy python:context.sortFile(results,action='triFichier(results)')"
>
> Ma liste est mal triée.
> 08.07 S
> 08.08 A
> 08.09 S
> 08.10 A
> 08.101 S
> 08.107 S
> 08.108 S
> 08.11 S
> 08.118 S
> Normalement, je devrais avoir le résultat suivant:
> 08.07 S
> 08.08 A
> 08.09 S
> 08.10 A
> 08.11 S
> 08.101 S
> 08.107 S
> 08.108 S
> 08.118 S
>
> Quelqu'un a t-il une idée ?
>
> Ps: Dans mon portal_catalog au niveau de l'onglet Indexes, je n'ai  
> pas sortable_title que je pourrais utiliser par exemple avec la  
> commande sort_on='sortable_title' dans :
> ... portal_catalog.searchResults(portal_type='PloneExFile',
>                                                    
> sort_on='sortable_title' )">
>
> Merci d'avance pour votre aide.
>
> Saïd.
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
stouil

Re: Problème Plone/Python

Reply Threaded More More options
Print post
Permalink
Bonjour Gilles,
 
Merci d'abord.
 
Je viens de faire un test en utilisant le Python Shell sous Windows et effectivement ton code marche correctement, le tri est ok.
Par contre je me pose la question comment intégrer ce code dans plone, il faut définir un script python et comment l'appeler.
Merci d'avance
J'ai pas encore regarder la solution de Monsieur Enclope Degoute

Le 11 juin 2009 14:49, Gilles Lenfant <[hidden email]> a écrit :
C'est normal : en comparaison alphabétique "08.108 S" est inférieur à "08.11 S". Essayer et adapter ceci...

l = ['08.07 S', '08.08 A', '08.09 S', '08.10 A',

    '08.101 S', '08.107 S', '08.108 S', '08.11 S',
    '08.118 S']

def comparable(v):
       num, txt = v.strip().split()
       v1, v2 = [int(x) for x in num.split('.')]
       return (v1, v2, txt)

l.sort(lambda s1, s2: cmp(comparable(s1), comparable(s2)))
print l

D'autre part, il est déconseillé de faire un x.getObject() sur l'ensemble des résultats de recherche si les metadata du catalogue sont suffisantes pour le tri et l'affichage.

Le 11 juin 09 à 12:39, said touil a écrit :

Bonjour à tous,

Plone 2.1.2 / Zope 2.7.8 final.

Problème :
J'utilise le product PloneExfile (version 4.0.1)

Dans une page zpt, j'ai le code suivant : (je n'ai pas mis le code en totalité ...)

<tal:yearFiles define="results python:here.portal_catalog.searchResults(portal_type='PloneExFile' )">
...
<li tal:define="results python: [b.getObject() for b in results];
                                    dummy python:context.sortFile(results,action='triFichier(results)')"
                                    tal:repeat="obj results">
Dans le répertoire portal_skins/custom de plone, j'ai crée un script python qui porte le nom sortFile qui prend en paramètre
Parameter List: L,action.
Ce script en gros permet de trier une liste de mes fichiers pdf selon le titre.

Mon problème est que lorsque je code la ligne suivante dans ma page template :

dummy python:context.sortFile(results,action='triFichier(results)')"

Ma liste est mal triée.
08.07 S
08.08 A
08.09 S
08.10 A
08.101 S
08.107 S
08.108 S
08.11 S
08.118 S
Normalement, je devrais avoir le résultat suivant:
08.07 S
08.08 A
08.09 S
08.10 A
08.11 S
08.101 S
08.107 S
08.108 S
08.118 S

Quelqu'un a t-il une idée ?

Ps: Dans mon portal_catalog au niveau de l'onglet Indexes, je n'ai pas sortable_title que je pourrais utiliser par exemple avec la commande sort_on='sortable_title' dans :
... portal_catalog.searchResults(portal_type='PloneExFile',
                                                  sort_on='sortable_title' )">

Merci d'avance pour votre aide.

Saïd.
_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr



_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Gilles Lenfant

Re: Problème Plone/Python

Reply Threaded More More options
Print post
Permalink
Some javascript/style in this post has been disabled (why?)

Le 11 juin 09 à 15:36, said touil a écrit :

Bonjour Gilles,
 
Merci d'abord.
 
Je viens de faire un test en utilisant le Python Shell sous Windows et effectivement ton code marche correctement, le tri est ok.
Par contre je me pose la question comment intégrer ce code dans plone, il faut définir un script python et comment l'appeler.

script "sortedPloneExFiles" :
====
def comparable(v):
    num, txt = v.Title.strip().split()
    v1, v2 = [int(x) for x in num.split('.')]
    return (v1, v2, txt)
results = portal_catalog.searchResults(portal_type='PloneExFile')[:]
results.sort(lambda s1, s2: cmp(comparable(s1), comparable(s2)))
return results
====

Et dans le ZPT :

====
...
 <tal:yearFiles define="results portal/sortedPloneExFiles">
 ...
====

Merci d'avance
J'ai pas encore regarder la solution de Monsieur Enclope Degoute

Elle offre le même résultat par une approche différente.


Le 11 juin 2009 14:49, Gilles Lenfant <[hidden email]> a écrit :
C'est normal : en comparaison alphabétique "08.108 S" est inférieur à "08.11 S". Essayer et adapter ceci...

l = ['08.07 S', '08.08 A', '08.09 S', '08.10 A',

    '08.101 S', '08.107 S', '08.108 S', '08.11 S',
    '08.118 S']

def comparable(v):
       num, txt = v.strip().split()
       v1, v2 = [int(x) for x in num.split('.')]
       return (v1, v2, txt)

l.sort(lambda s1, s2: cmp(comparable(s1), comparable(s2)))
print l

D'autre part, il est déconseillé de faire un x.getObject() sur l'ensemble des résultats de recherche si les metadata du catalogue sont suffisantes pour le tri et l'affichage.

Le 11 juin 09 à 12:39, said touil a écrit :

Bonjour à tous,

Plone 2.1.2 / Zope 2.7.8 final.

Problème :
J'utilise le product PloneExfile (version 4.0.1)

Dans une page zpt, j'ai le code suivant : (je n'ai pas mis le code en totalité ...)

<tal:yearFiles define="results python:here.portal_catalog.searchResults(portal_type='PloneExFile' )">
...
<li tal:define="results python: [b.getObject() for b in results];
                                    dummy python:context.sortFile(results,action='triFichier(results)')"
                                    tal:repeat="obj results">
Dans le répertoire portal_skins/custom de plone, j'ai crée un script python qui porte le nom sortFile qui prend en paramètre
Parameter List: L,action.
Ce script en gros permet de trier une liste de mes fichiers pdf selon le titre.

Mon problème est que lorsque je code la ligne suivante dans ma page template :

dummy python:context.sortFile(results,action='triFichier(results)')"

Ma liste est mal triée.
08.07 S
08.08 A
08.09 S
08.10 A
08.101 S
08.107 S
08.108 S
08.11 S
08.118 S
Normalement, je devrais avoir le résultat suivant:
08.07 S
08.08 A
08.09 S
08.10 A
08.11 S
08.101 S
08.107 S
08.108 S
08.118 S

Quelqu'un a t-il une idée ?

Ps: Dans mon portal_catalog au niveau de l'onglet Indexes, je n'ai pas sortable_title que je pourrais utiliser par exemple avec la commande sort_on='sortable_title' dans :
... portal_catalog.searchResults(portal_type='PloneExFile',
                                                  sort_on='sortable_title' )">

Merci d'avance pour votre aide.

Saïd.
_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr




_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr