Multiple sort keys for ZCatalog searching (was: RE: [Zope] Hardware for Zope + ZEO)

Dieter Maurer dieter@handshake.de
Mon, 31 Mar 2003 21:25:01 +0200


--eZn+NsyD2j
Content-Type: text/plain; charset=us-ascii
Content-Description: message body text
Content-Transfer-Encoding: 7bit

Chris Withers wrote at 2003-3-31 10:24 +0100:
 > Dieter Maurer wrote:
 > > I have code to extend ZCatalog's sorting capability to arbitrary many
 > > sort keys.
 > > 
 > > Maybe, we want something like this in the Zope core?
 > 
 > Yes PLEASE!
 > 
 > What does the code look like?
 > 
 > Anything I can do to help?

Attached.

Dieter

--eZn+NsyD2j
Content-Type: application/x-python
Content-Description: Sort extension for ZCatalog
Content-Disposition: attachment;
	filename="sortCatalog.py"
Content-Transfer-Encoding: base64

ZGVmIF9zb3J0KHJzLHNvcnRTcGVjcyk6CiAgJycnc29ydCByZXN1bHQgc2V0ICpycyogYWNj
b3JkaW5nIHRvICpzb3J0U3BlY3MqLgoKICAqc29ydFNwZWNzKiBpcyBhIHNlcXVlbmNlIG9m
IHBhaXJzICpzb3J0SW5kZXgqLCpzb3J0UmV2ZXJzZSouCiAgJycnCiAgaWYgbm90IHNvcnRT
cGVjczogcmV0dXJuIHJzCiAgbD0gW107IGFwcGVuZD0gbC5hcHBlbmQKICBzb3J0U3BlYz0g
c29ydFNwZWNzWzBdOyBzb3J0U3BlY3M9IHNvcnRTcGVjc1sxOl0KICBzb3J0SW5kZXgsIHNv
cnRSZXZlcnNlPSBzb3J0U3BlYwogICMgY29weSBjb2RlIGZyb20gIlpDYXRhbG9nLkNhdGFs
b2cuQ2F0YWxvZy5faW5kZXhlZFNlYXJjaCIKICBpZiBsZW4ocnMpID4gNCpsZW4oc29ydElu
ZGV4KToKICAgICMgcmVzdWx0IGxhcmdlIGNvbXBhcmVkIHRvICJzb3J0X2luZGV4IgogICAg
Zm9yIGssZG9jcyBpbiBzb3J0SW5kZXguaXRlbXMoKToKICAgICAgZG9jcz0gaW50ZXJzZWN0
aW9uKHJzLGRvY3MpCiAgICAgIGwuYXBwZW5kKChrLF9zb3J0KGRvY3Msc29ydHNwZWNzKSkp
CiAgICAjbC5zb3J0KCkgIyB0aGlzIGlzIG5vdCBuZWNlc3NhcnksIGFzICJCVHJlZXMuaXRl
bXMoKSIgcmV0dXJucyBzb3J0ZWQgcmVzdWx0cwogIGVsc2U6CiAgICBrZXlGb3I9IHNvcnRJ
bmRleC5rZXlGb3JEb2N1bWVudAogICAgZm9yIGRvYyBpbiBycy5rZXlzKCk6CiAgICAgIGs9
IGtleUZvcihkb2MpCiAgICAgIGwuYXBwZW5kKChrLFtkb2NdKSkKICAgIGwuc29ydCgpCiAg
ICBpZiBzb3J0U3BlY3M6CiAgICAgICMgZm9sZCBlcXVhbCBrZXlzCiAgICAgIGk9IDEKICAg
ICAgd2hpbGUgaSA8IGxlbihsKToKICAgICAgICBpZiBsW2ldWzBdID09IGxbaS0xXVswXTog
bFtpLTFdWzFdLmFwcGVuZChsW2ldWzFdWzBdKTsgZGVsIGxbaV0KICAgICAgICBlbHNlOiBp
Kz0gMQogICAgICAjIHNvcnQgc3Vic2VxdWVudCBsZXZlbHMKICAgICAgaT0gMDsgbj0gbGVu
KGwpCiAgICAgIHdoaWxlIGkgPCBuOgogICAgICAgIGxbaV09IChOb25lLF9zb3J0KElJU2V0
KGxbaV1bMV0pLHNvcnRTcGVjcykpOwogICAgICAgIGkrPSAxCiAgIyByZW1vdmUgc29ydGlu
ZyBrZXlzCiAgbD0gW2RvY3MgZm9yIGssZG9jcyBpbiBsXQogICMgbm93IHJldmVyc2UsIGlm
IG5lY2Vzc2FyeQogIGlmIHNvcnRSZXZlcnNlOiBsLnJldmVyc2UoKQogICMgZmxhdHRlbiB0
aGUgcmVzdWx0IC0gdGJpcyBtaWdodCBnZXQgbW9yZSBlZmZpY2llbnQsIHdoZW4gZG9uZSBs
YXp5bHkuCiAgIyBidXQsIHByb2JhYmx5LCBpdCBpcyBvZiBsb3dlciBvcmRlci4uLgogIHI9
IFtdCiAgZm9yIGRvY3MgaW4gbDogci5leHRlbmQoZG9jcykKICByZXR1cm4gcgoKZGVmIF9u
b3JtU29ydFNwZWNzKFNwZWNzLGNhdCk6CiAgJycnbm9ybWFsaXplICpzb3J0U3BlY3MqLicn
JwogIGw9IFtdCiAgZm9yIHMgaW4gU3BlY3M6CiAgICBpZiB0eXBlKHMpIGlzIFR1cGxlVHlw
ZTogc2ksc289IHMKICAgIGVsc2U6IHNpPXM7IHNvPSAnYXNjJwogICAgaT0gY2F0LmluZGV4
ZXNbc2ldCiAgICAjIGVuc3VyZSwgdGhlIGluZGV4IHN1cHBvcnRzIHNvcnRpbmcKICAgIGlm
IG5vdCBoYXNhdHRyKGksJ2tleUZvckRvY3VtZW50Jyk6CiAgICAgIHJhaXNlIFZhbHVlRXJy
b3IsJ0luZGV4IG5vdCBhZGVxdWF0ZSBmb3Igc29ydGluZzogJXMnICUgc2kKICAgICMgY2hl
Y2sgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIKICAgIHNvPSBzby5sb3dl
cigpCiAgICBpZiBzbyBpbiAoJ2FzYycsICdhc2NlbmRpbmcnKTogc3I9IDAKICAgIGVsaWYg
c28gaW4gKCdkZXNjJywgJ2Rlc2NlbmRpbmcnLCAncmV2ZXJzZScpOiBzcj0gMQogICAgbC5h
cHBlbmQoKGksc3IpKQogIHJldHVybiBsCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgTW9kdWxl
IGZ1bmN0aW9uCmRlZiBldmFsUXVlcnkoY2F0YWxvZyxxdWVyeSxzb3J0U3BlY3M9KCkpOgog
ICcnJ2V2YWx1YXRlICpxdWVyeSogaW4gdGhlIGNvbnRleHQgb2YgKmNhdGFsb2cqIGFuZCBz
b3J0IHRoZSByZXN1bHQKICBhY2NvcmRpbmcgdG8gKnNvcnRTcGVjcyouCgogICpzb3J0U3Bl
Y3MqIGlzIGEgc2VxdWVuY2Ugb2Ygc29ydCBzcGVjaWZpY3Rpb25zLiBBIHNvcnQgc3BlY2lm
aWNhdGlvbgogIGlzIGVpdGhlciBhbiBpbmRleCBuYW1lIG9yIGEgcGFpciBjb25zaXN0aW5n
IG9mIGFuIGluZGV4IG5hbWUgYW5kCiAgYSBzb3J0IG9yZGVyICgnYXNjL2Rlc2MnKS4KICAn
JycKICBjYXQ9IGNhdGFsb2cuX2NhdGFsb2cKICBycz0gcXVlcnkuX2V2YWwoX1F1ZXJ5Q29u
dGV4dChjYXQpKQogIGlmIG5vdCByczogcmV0dXJuIExhenlDYXQocnMpCiAgaWYgc29ydFNw
ZWNzOgogICAgcnM9IF9zb3J0KHJzLF9ub3JtU29ydFNwZWNzKHNvcnRTcGVjcyxjYXQpKQog
IHJldHVybiBMYXp5TWFwKGNhdC5fX2dldGl0ZW1fXyxycykK
--eZn+NsyD2j--