sorting ids in python
Can anyone help me sort the following by id in a python script? for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']): Import of sequence is not authorised in my python scripts, I am presuming (probably wrongly) that sequence is needed for sort. Regards Garry
On 08.12.2008 18:18 Uhr, Garry Saddington wrote:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
ids = context.objectIds() ids.sort() -aj
On 08.12.2008 19:23 Uhr, Andreas Jung wrote:
On 08.12.2008 18:18 Uhr, Garry Saddington wrote:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
ids = context.objectIds()
Possibly you need ids = list(context.objectIds()) -aj
ids.sort()
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: .. robert
Import of sequence is not authorised in my python scripts, I am presuming (probably wrongly) that sequence is needed for sort. Regards Garry _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: ..
huh? Afaik there is no sort order defined on a per-object basis. -aj
Andreas Jung schrieb:
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: ..
huh? Afaik there is no sort order defined on a per-object basis.wh I *allways* mixup objecItems with objectValues so its objecItems(..).sort() .. robert
On Tuesday 09 December 2008 03:15, Andreas Jung wrote:
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']):
objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: ..
huh? Afaik there is no sort order defined on a per-object basis.
This is my final working solution: ids = context.objectIds(['Folder', 'DTMLDocument','ZipFolder','File','Image']) ids.sort() for object in ids: object=context.restrictedTraverse(object) path=object.absolute_url() ........................... ............. Thanks everyone Regards Garry
On 09.12.2008 8:45 Uhr, Garry Saddington wrote:
On Tuesday 09 December 2008 03:15, Andreas Jung wrote:
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']): objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: .. huh? Afaik there is no sort order defined on a per-object basis.
This is my final working solution:
ids = context.objectIds(['Folder', 'DTMLDocument','ZipFolder','File','Image']) ids.sort() for object in ids: object=context.restrictedTraverse(object) path=object.absolute_url() ...........................
You were asking about IDs in the first place, so use objectIds(). If you are interested in the object themselves, use objectItems() as RR suggested. -aj
Garry Saddington schrieb:
On Tuesday 09 December 2008 03:15, Andreas Jung wrote:
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']): objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: .. huh? Afaik there is no sort order defined on a per-object basis.
This is my final working solution:
ids = context.objectIds(['Folder', 'DTMLDocument','ZipFolder','File','Image']) ids.sort() for object in ids: object=context.restrictedTraverse(object) path=object.absolute_url() ........................... I think you can have it a little bit easier: use context.objectItems instead of objectIds context.objectItems returns (id, object) tuples.
so your solution wold be: objs = context.objectItems(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for id, object in objs: path=object.absolute_url() robert
2008/12/11 robert rottermann <robert@redcor.ch>:
Garry Saddington schrieb:
On Tuesday 09 December 2008 03:15, Andreas Jung wrote:
On 08.12.2008 21:11 Uhr, robert rottermann wrote:
Garry Saddington schrieb:
Can anyone help me sort the following by id in a python script?
for object in context.objectValues(['Folder', 'DTML Document','ZipFolder','File','Image']): objs=context.objectValues(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for o in objs: .. huh? Afaik there is no sort order defined on a per-object basis.
This is my final working solution:
ids = context.objectIds(['Folder', 'DTMLDocument','ZipFolder','File','Image']) ids.sort() for object in ids: object=context.restrictedTraverse(object) path=object.absolute_url() ........................... I think you can have it a little bit easier: use context.objectItems instead of objectIds context.objectItems returns (id, object) tuples.
so your solution wold be: objs = context.objectItems(['Folder', 'DTMLDocument','ZipFolder','File','Image']) objs.sort() for id, object in objs: path=object.absolute_url() robert
Personally I prefer to always use objectValues(). Sorting isn't objectXXX()'s problem. It's something you do in your view. objs = list(self.objectValues()) objs.sort(lambda x,y: cmp(x.id, y.id)) It's only a matter of time until you need something more "advanced" and then you shouldn't have to change how you use the objectXXX() iterator. E.g.: objs.sort(lambda x,y: cmp(x.title_or_id().lower(), y.title_or_id().lower())) -- Peter Bengtsson, work www.fry-it.com home www.peterbe.com hobby www.issuetrackerproduct.com
On 11.12.2008 12:28 Uhr, Peter Bengtsson wrote:
Personally I prefer to always use objectValues(). Sorting isn't objectXXX()'s problem. It's something you do in your view. objs = list(self.objectValues()) objs.sort(lambda x,y: cmp(x.id, y.id))
Never ever use obj.id. The official API is obj.getId() - nothing else. Andreas
participants (4)
-
Andreas Jung -
Garry Saddington -
Peter Bengtsson -
robert rottermann