[Zope-dev] DirectoryStorage 0.04

Petru Paler ppetru@coltronix.com
Sat, 10 Jun 2000 00:27:32 +0300 (EEST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1463811836-743019727-960586052=:19838
Content-Type: TEXT/PLAIN; charset=US-ASCII


    Changelog:

0.04:
        - added missing binary flags to open() calls to make it work on NT.
        - added flush() calls after file writing
        - added close() method to the DirectoryStorage class

0.03:
        - don't die if posix.fsync is not available
        - base class renamed to DirectoryStorage
        - added directory (re)creation and locking
        - added a 'magic' file
        - last oid file open/close bug
        - moved serials to an gdbm database

0.02:
        - converted to using os.path.join

0.01:
        - initial release


-Petru

---1463811836-743019727-960586052=:19838
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="DirectoryStorage.py"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.10006100027320.19838@oliver.local.coltronix.com>
Content-Description: 
Content-Disposition: attachment; filename="DirectoryStorage.py"

IyBDb3B5cmlnaHQgKGMpIDIwMDAgUGV0cnUgUGFsZXIgKHBwZXRydUBjb2x0
cm9uaXguY29tKSBBbGwgcmlnaHRzIHJlc2VydmVkLg0KDQoNCiMgVG8tZG8g
bGlzdDoNCiMgQ3JpdGljYWw6DQojICAgIC0gTW9zdCBJL08gb3BlcmF0aW9u
cyBhcmUgbm90IGF0b21pYy4gVGhpcyBtZWFucyB0aGF0IEkvTyBlcnJvcnMg
KGFuZCwgZm9yDQojICAgIHRoYXQgbWF0dGVyLCBhbnkgZXhjZXB0aW9ucyBv
Y2N1cmVkIGluIF9maW5pc2gpIGxlYXZlIHRoZSBzdG9yYWdlIGluIGFuDQoj
ICAgIHVuZGVmaW5lZCBzdGF0ZQ0KIw0KIyBOb3QgY3JpdGljYWw6DQojICAg
IC0gUGVyZm9ybWFuY2UgdHVuaW5nIC0tIGFkZCBjYWNoZXMgd2hlcmUgYXBy
b3BpYXRlDQojICAgIC0gbWFrZSBzdXJlIGxvY2tpbmcgaXMgb2sNCiMgICAg
LSBwcm92aWRlIGRpcmVjdG9yeSBzcGxpdHRpbmcgdG8gZW5hYmxlIHVzZSBv
biBub24tcmVpc2VyIGZpbGVzeXN0ZW1zDQojDQojIC4uLiBhbmQgcHJvYmFi
bHkgbWFueSBvdGhlcnMNCg0KIiIiRGlyZWN0b3J5IHN0b3JhZ2UiIiINCg0K
X192ZXJzaW9uX18gPSAiMC4wNCINCg0KZnJvbSBCYXNlU3RvcmFnZSBpbXBv
cnQgQmFzZVN0b3JhZ2UNCmZyb20gbG9ja19maWxlIGltcG9ydCBsb2NrX2Zp
bGUNCmltcG9ydCBQT1NFeGNlcHRpb24NCmltcG9ydCBvcywgc3RydWN0LCBz
dGF0LCBvcGVyYXRvciwgZ2RibQ0KDQp0cnk6DQoJZnJvbSBwb3NpeCBpbXBv
cnQgZnN5bmMNCmV4Y2VwdDoNCglmc3luYyA9IE5vbmUNCg0KZGVmIG9pZDJz
dHIob2lkKToNCglyZXR1cm4gIiUwMlgiKjggJSBzdHJ1Y3QudW5wYWNrKCIh
OEIiLCBvaWQpDQoNCmRlZiBybXJmKGRpcik6DQoJIlJlY3Vyc2l2ZWx5IGRl
bGV0ZSBkaXIiDQoJZm9yIGYgaW4gb3MubGlzdGRpcihkaXIpOg0KCQlwYXRo
bmFtZSA9IG9zLnBhdGguam9pbihkaXIsIGYpDQoJCW1vZGUgPSBvcy5zdGF0
KHBhdGhuYW1lKVtzdGF0LlNUX01PREVdDQoJCWlmIHN0YXQuU19JU0RJUiht
b2RlKToNCgkJCXJtcmYocGF0aG5hbWUpDQoJCWVsaWYgc3RhdC5TX0lTUkVH
KG1vZGUpOg0KCQkJb3MudW5saW5rKHBhdGhuYW1lKQ0KCQllbHNlOg0KCQkJ
cmFpc2UgJ3JlbW92ZSBlcnJvcicsICdzdHJhbmdlIGZpbGUgaW4gZGlyIHN0
b3JhZ2UnDQoJb3Mucm1kaXIoZGlyKQ0KCQkNCk1BR0lDID0gJ0RpcmVjdG9y
eSBTdG9yYWdlIEZvcm1hdCB2MS4wJw0KDQpjbGFzcyBEaXJlY3RvcnlTdG9y
YWdlKEJhc2VTdG9yYWdlKToNCg0KCWRlZiBfX2luaXRfXyhzZWxmLCBkaXJu
YW1lLCBjcmVhdGU9MCk6DQoNCgkJaWYgbm90IG9zLnBhdGguZXhpc3RzKGRp
cm5hbWUpOg0KCQkJY3JlYXRlID0gMQ0KDQoJCWlmIG9zLnBhdGguZXhpc3Rz
KGRpcm5hbWUpOg0KCQkJdHJ5Og0KCQkJCWYgPSBvcGVuKG9zLnBhdGguam9p
bihkaXJuYW1lLCAnbG9jaycpLCAncisnKQ0KCQkJZXhjZXB0Og0KCQkJCWYg
PSBvcGVuKG9zLnBhdGguam9pbihkaXJuYW1lLCAnbG9jaycpLCAndysnKQ0K
CQkJbG9ja19maWxlKGYpDQoJCQl0cnk6DQoJCQkJZi53cml0ZShzdHIob3Mu
Z2V0cGlkKCkpKQ0KCQkJCWYuZmx1c2goKQ0KCQkJZXhjZXB0Og0KCQkJCXBh
c3MNCgkJCXNlbGYuX2xvY2tfZmlsZSA9IGYNCgkJDQoJCUJhc2VTdG9yYWdl
Ll9faW5pdF9fKHNlbGYsIGRpcm5hbWUpDQoNCgkJc2VsZi5fb2lkX2RpciA9
IG9zLnBhdGguam9pbihkaXJuYW1lLCAnb2lkJykNCgkJc2VsZi5fdGluZGV4
ID0gW10NCgkJc2VsZi5fb2lkID0gJ1wwXDBcMFwwXDBcMFwwXDAnDQoNCgkJ
aWYgY3JlYXRlOg0KCQkJaWYgb3MucGF0aC5leGlzdHMoZGlybmFtZSk6DQoJ
CQkJIyBwcnVuZSB0aGUgb2xkIGRpcg0KCQkJCXJtcmYoZGlybmFtZSkNCg0K
CQkJb3MubWtkaXIoZGlybmFtZSkNCgkJCW9zLm1rZGlyKG9zLnBhdGguam9p
bihkaXJuYW1lLCAnb2lkJykpDQoJCQlmID0gb3Blbihvcy5wYXRoLmpvaW4o
ZGlybmFtZSwgJ2xvY2snKSwgJ3crJykNCgkJCWxvY2tfZmlsZShmKQ0KCQkJ
dHJ5Og0KCQkJCWYud3JpdGUoc3RyKG9zLmdldHBpZCgpKSkNCgkJCQlmLmZs
dXNoKCkNCgkJCWV4Y2VwdDoNCgkJCQlwYXNzDQoJCQlzZWxmLl9sb2NrX2Zp
bGUgPSBmDQoJCQlmID0gb3Blbihvcy5wYXRoLmpvaW4oZGlybmFtZSwgJ21h
Z2ljJyksICd3KycpDQoJCQlmLndyaXRlKE1BR0lDKQ0KCQkJZi5jbG9zZSgp
DQoJCQkNCgkJCXNlbGYuX3NpbmRleCA9IGdkYm0ub3Blbihvcy5wYXRoLmpv
aW4oZGlybmFtZSwgJ3NlcmlhbCcpLCAnbicpDQoJCQlzZWxmLmxvZiA9IG9w
ZW4ob3MucGF0aC5qb2luKGRpcm5hbWUsICdsYXN0X29pZCcpLCAndytiJykN
CgkJZWxzZToNCgkJCXNlbGYuX3NpbmRleCA9IGdkYm0ub3Blbihvcy5wYXRo
LmpvaW4oZGlybmFtZSwgJ3NlcmlhbCcpLCAndycpDQoJCQlmID0gb3Blbihv
cy5wYXRoLmpvaW4oZGlybmFtZSwgJ2xhc3Rfb2lkJyksICdyK2InKQ0KCQkJ
c2VsZi5fb2lkID0gZi5yZWFkKCkNCgkJCXNlbGYubG9mID0gZg0KDQoJZGVm
IF9fbGVuX18oc2VsZik6DQoJCXJldHVybiBsZW4ob3MubGlzdGRpcihzZWxm
Ll9vaWRfZGlyKSkNCg0KCWRlZiBnZXRTaXplKHNlbGYpOg0KCQlmaWxlcyA9
IG9zLmxpc3RkaXIoc2VsZi5fb2lkX2RpcikNCgkJZmlsZXMgPSBtYXAobGFt
YmRhIHgsZD1zZWxmLl9vaWRfZGlyOiBvcy5wYXRoLmpvaW4oZCwgeCksIGZp
bGVzKQ0KCQlzaXplcyA9IG1hcChsYW1iZGEgeDogb3Muc3RhdCh4KVtzdGF0
LlNUX1NJWkVdLCBmaWxlcykNCgkJcmV0dXJuIHJlZHVjZShvcGVyYXRvci5h
ZGQsIHNpemVzKQ0KDQoJZGVmIGNsb3NlKHNlbGYpOg0KCQlzZWxmLmxvZi5j
bG9zZSgpDQoJCXNlbGYuX3NpbmRleC5jbG9zZSgpDQoJCXNlbGYuX2xvY2tf
ZmlsZS5jbG9zZSgpDQoNCglkZWYgbG9hZChzZWxmLCBvaWQsIHZlcnNpb24p
Og0KCQlzZWxmLl9sb2NrX2FjcXVpcmUoKQ0KCQl0cnk6DQoJCQlmID0gb3Bl
bihvcy5wYXRoLmpvaW4oc2VsZi5fb2lkX2RpcixvaWQyc3RyKG9pZCkpLCAn
cmInKQ0KCQkJcCA9IGYucmVhZCgpDQoJCQlmLmNsb3NlKCkNCgkJCXJldHVy
biBwLCBzZWxmLl9zaW5kZXhbb2lkXQ0KCQlmaW5hbGx5Og0KCQkJc2VsZi5f
bG9ja19yZWxlYXNlKCkNCg0KCWRlZiBzdG9yZShzZWxmLCBvaWQsIHNlcmlh
bCwgZGF0YSwgdmVyc2lvbiwgdHJhbnNhY3Rpb24pOg0KCQlpZiB0cmFuc2Fj
dGlvbiBpcyBub3Qgc2VsZi5fdHJhbnNhY3Rpb246DQoJCQlyYWlzZSBQT1NF
eGNlcHRpb24uU3RvcmFnZVRyYW5zYWN0aW9uRXJyb3Ioc2VsZiwgdHJhbnNh
Y3Rpb24pDQoNCgkJaWYgdmVyc2lvbjoNCgkJCXJhaXNlIFBPU0V4Y2VwdGlv
bi5VbnN1cHBvcnRlZCwgIlZlcnNpb25zIGFyZW4ndCBzdXBwb3J0ZWQiDQoN
CgkJc2VsZi5fbG9ja19hY3F1aXJlKCkNCgkJdHJ5Og0KCQkJaWYgc2VsZi5f
c2luZGV4Lmhhc19rZXkob2lkKToNCgkJCQlpZiBzZXJpYWwgIT0gc2VsZi5f
c2luZGV4W29pZF06DQoJCQkJCXJhaXNlIFBPU0V4Y2VwdGlvbi5Db25mbGlj
dEVycm9yDQoJCQlzZXJpYWwgPSBzZWxmLl9zZXJpYWwNCgkJCXNlbGYuX3Rp
bmRleC5hcHBlbmQoKG9pZCwgc2VyaWFsLCBkYXRhKSkNCgkJZmluYWxseToN
CgkJCXNlbGYuX2xvY2tfcmVsZWFzZSgpDQoNCgkJcmV0dXJuIHNlcmlhbA0K
DQoJZGVmIF9iZWdpbihzZWxmLCB0aWQsIHUsIGQsIGUpOg0KCQlwYXNzDQoN
CglkZWYgX2NsZWFyX3RlbXAoc2VsZik6DQoJCXNlbGYuX3RpbmRleCA9IFtd
DQoNCglkZWYgX2ZpbmlzaChzZWxmLCB0aWQsIHVzZXIsIGRlc2MsIGV4dCk6
DQoJCXRyeToNCgkJCWZvciBvaWQsIHNlcmlhbCwgZGF0YSBpbiBzZWxmLl90
aW5kZXg6DQoJCQkJc2VsZi5fc2luZGV4W29pZF0gPSBzZXJpYWwNCgkJCQlz
ZWxmLl9zaW5kZXguc3luYygpDQoJCQkJZiA9IG9wZW4ob3MucGF0aC5qb2lu
KHNlbGYuX29pZF9kaXIsb2lkMnN0cihvaWQpKSwgJ3diJykNCgkJCQlmLndy
aXRlKGRhdGEpDQoJCQkJZi5mbHVzaCgpDQoJCQkJaWYgZnN5bmM6DQoJCQkJ
CWZzeW5jKGYuZmlsZW5vKCkpDQoJCQkJZi5jbG9zZSgpDQoJCQlzZWxmLmxv
Zi5zZWVrKDApDQoJCQlzZWxmLmxvZi53cml0ZShzZWxmLl9vaWQpDQoJCQlz
ZWxmLmxvZy5mbHVzaCgpDQoJCQlpZiBmc3luYzoNCgkJCQlmc3luYyhzZWxm
LmxvZi5maWxlbm8oKSkNCgkJZXhjZXB0Og0KCQkJcmFpc2UgUE9TRXhjZXB0
aW9uLlRyYW5zYWN0aW9uRXJyb3IsICdJL08gZXJyb3IgY29tbWl0aW5nIHRy
YW5zYWN0aW9uIC0tIHlvdXIgc3RvcmFnZSBpcyBsaWtlbHkgY29ycnVwdCcN
Cg0KCWRlZiBwYWNrKHNlbGYsIHQsIHJlZmVyZW5jZXNmKToNCgkJbWF4b2lk
ID0gb2lkMnN0cihzZWxmLl9vaWQpDQoNCgkJcm9vdGwgPSBbJ1wwXDBcMFww
XDBcMFwwXDAnXQ0KCQlwb3AgPSByb290bC5wb3ANCgkJcGluZGV4ID0ge30N
CgkJcmVmZXJlbmNlZCA9IHBpbmRleC5oYXNfa2V5DQoJCXdoaWxlIHJvb3Rs
Og0KCQkJb2lkID0gcG9wKCkNCgkJCWlmIHJlZmVyZW5jZWQob2lkKToNCgkJ
CQljb250aW51ZQ0KDQoJCQkjIHNjYW4gcGlja2xlIGZvciByZWZlcmVuY2Vz
DQoJCQlmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fb2lkX2RpcixvaWQy
c3RyKG9pZCkpLCAncmInKQ0KCQkJcCA9IGYucmVhZCgpDQoJCQlmLmNsb3Nl
KCkNCgkJCXBpbmRleFtvaWQyc3RyKG9pZCldID0gcA0KCQkJcmVmZXJlbmNl
c2YocCwgcm9vdGwpDQoNCgkJIyBub3cgZGVsZXRlIGFueSB1bnJlZmVyZW5j
ZWQgZW50cmllcw0KCQlkZWxldGVkID0gW10NCgkJZm9yIG9pZCBpbiBvcy5s
aXN0ZGlyKHNlbGYuX29pZF9kaXIpOg0KCQkJaWYgbm90IHJlZmVyZW5jZWQo
b2lkKSBhbmQgKG9pZCA8PSBtYXhvaWQpOg0KCQkJCWRlbGV0ZWQuYXBwZW5k
KG9pZCkNCg0KCQl0cnk6DQoJCQlmb3IgaSBpbiBkZWxldGVkOg0KCQkJCW9z
LnVubGluayhvcy5wYXRoLmpvaW4oc2VsZi5fb2lkX2RpcixpKSkNCgkJZXhj
ZXB0Og0KCQkJcmFpc2UgUE9TRXhjZXB0aW9uLlRyYW5zYWN0aW9uRXJyb3Is
ICdJL08gZXJyb3IgZHVyaW5nIHBhY2sgLS0geW91ciBzdG9yYWdlIGlzIHBy
b2JhYmx5IHNjcmV3ZWQgdXAnDQoNCg==
---1463811836-743019727-960586052=:19838--