[Distutils] first cut at a distutils 'fetch' command

Anthony Baxter anthony@interlink.com.au
Mon Feb 10 09:10:12 2003


------- =_aaaaaaaaaa0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <14891.1044886083.1@arbhome.com.au>

The following is a first cut at a distutils 'fetch' command, and a 
small script to make invoking this easier. The script massages the
arguments, and calls a distutils 'setup' stub to do the work. It
accepts either a filename (which is assumes is a local cached copy of
the package, it then unpacks and builds it), a URL (in which case it 
fetches the URL, unpacks and builds it), or anything else is assumed 
to be a 'package name' - hopefully PyPI will grow a 'download_url' 
parameter, and it will "just work".

Comments welcome - it's not complete (the zipfile unpacker needs to be
done - I plan to "fix" zipfile so it's got a nice tarfile-like interface,
probably other stuff), but I'd like to know if this is worth pursuing 
further...

I don't have a name for the script yet - it's called 'distutils-helper'
at the moment, but that sucks :)

Anthony


------- =_aaaaaaaaaa0
Content-Type: application/octet-stream
Content-ID: <14891.1044886083.2@arbhome.com.au>
Content-Description: distutils.commands.fetch.py
Content-Transfer-Encoding: base64

IiIiZGlzdHV0aWxzLmNvbW1hbmQuZmV0Y2gKCkltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnZmV0
Y2gnIGNvbW1hbmQuCiIiIgoKIyBjcmVhdGVkIDIwMDMvMDIvMTAsIEFudGhvbnkgQmF4dGVyCgpf
X3JldmlzaW9uX18gPSAiJElkJCIKCmZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQK
ZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCgpmcm9tIGRpc3R1dGlscy5jb21tYW5kLnJl
Z2lzdGVyIGltcG9ydCByZWdpc3RlcgpQWVBJX1VSTCA9IHJlZ2lzdGVyLkRFRkFVTFRfUkVQT1NJ
VE9SWQpkZWwgcmVnaXN0ZXIKCmltcG9ydCB0ZW1wZmlsZSwgb3MsIHN5cwoKY2xhc3MgZmV0Y2gg
KENvbW1hbmQpOgoKICAgICMgQnJpZWYgKDQwLTUwIGNoYXJhY3RlcnMpIGRlc2NyaXB0aW9uIG9m
IHRoZSBjb21tYW5kCiAgICBkZXNjcmlwdGlvbiA9ICJmZXRjaCBhIHBhY2thZ2UiCgogICAgIyBM
aXN0IG9mIG9wdGlvbiB0dXBsZXM6IGxvbmcgbmFtZSwgc2hvcnQgbmFtZSAoTm9uZSBpZiBubyBz
aG9ydAogICAgIyBuYW1lKSwgYW5kIGhlbHAgc3RyaW5nLgogICAgdXNlcl9vcHRpb25zID0gWygn
cGFja2FnZT0nLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAicGFja2FnZSBuYW1lIHRvIGZl
dGNoIiksCiAgICAgICAgICAgICAgICAgICAgKCd1cmw9JywgTm9uZSwKICAgICAgICAgICAgICAg
ICAgICAgInVybCBvZiBwYWNrYWdlIHRvIGZldGNoIiksCiAgICAgICAgICAgICAgICAgICAgKCd0
bXBkaXI9JywgTm9uZSwgCiAgICAgICAgICAgICAgICAgICAgICJsb2NhbCB0ZW1wb3JhcnkgZGly
ZWN0b3J5IGZvciB1bnBhY2tpbmcgYW5kIGJ1aWxkaW5nIiksCiAgICAgICAgICAgICAgICAgICAg
KCdsb2NhbGZpbGU9JywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgImRvd25sb2FkZWQgbG9j
YWwgY29weSBvZiBzb3VyY2UgYXJjaGl2ZSIpLAogICAgICAgICAgICAgICAgICAgICgncHlwaS11
cmw9JywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgIlVSTCBmb3IgUHlQSSIpLAogICAgICAg
ICAgICAgICAgICAgXQoKICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgogICAgICAg
IHNlbGYucGFja2FnZSA9IE5vbmUKICAgICAgICBzZWxmLnVybCA9IE5vbmUKICAgICAgICBzZWxm
LnRtcGRpciA9IE5vbmUKICAgICAgICBzZWxmLmxvY2FsZmlsZSA9IE5vbmUKICAgICAgICBzZWxm
LnB5cGlfdXJsID0gUFlQSV9VUkwKICAgICAgICBzZWxmLmJ1aWxkX2RpciA9IE5vbmUKICAgICMg
aW5pdGlhbGl6ZV9vcHRpb25zKCkKCiAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CiAg
ICAgICAgaWYgc2VsZi51cmwgaXMgTm9uZSBhbmQgc2VsZi5sb2NhbGZpbGUgaXMgTm9uZToKICAg
ICAgICAgICAgc2VsZi51cmwgPSBQeVBJX2xvb2t1cF9kb3dubG9hZF91cmwoc2VsZi5wYWNrYWdl
KQogICAgICAgIGlmIHNlbGYubG9jYWxmaWxlOgogICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMoc2VsZi5sb2NhbGZpbGUpOgogICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0
aW9uRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICVzIGRvZXNuJ3Qg
ZXhpc3QiJShzZWxmLmxvY2FsZmlsZSkKICAgICMgZmluYWxpemVfb3B0aW9ucygpCgoKICAgIGRl
ZiBydW4gKHNlbGYpOgogICAgICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHJ1bl9zZXR1
cAogICAgICAgIGJ1aWxkX2RpciA9IHNlbGYudW5wYWNrKCkKICAgICAgICBkaXN0X29iaiA9IHNl
bGYuZ2V0ZGlzdCgpCiAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICBvcy5jaGRp
cihzZWxmLmJ1aWxkX2RpcikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRpc3Rfb2JqLnJ1bl9j
b21tYW5kKCdidWlsZCcpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiKipFcnJv
cjogV2hpbGUgYnVpbGRpbmcgaW4gZGlyZWN0b3J5ICVzOiIlc2VsZi5idWlsZF9kaXIKICAgICAg
ICAgICAgcHJpbnQgIkZpeCBwcm9ibGVtLCB0aGVuIHJ1biAnc2V0dXAucHkgaW5zdGFsbCcgaW4g
dGhhdCBkaXJlY3RvcnkiCiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgdHJ5OgogICAgICAgICAg
ICBkaXN0X29iai5ydW5fY29tbWFuZCgnaW5zdGFsbCcpCiAgICAgICAgZXhjZXB0OgogICAgICAg
ICAgICBwcmludCAiKipFcnJvcjogV2hpbGUgaW5zdGFsbGluZyBmcm9tIGRpcmVjdG9yeSAlczoi
JXNlbGYuYnVpbGRfZGlyCiAgICAgICAgICAgIHByaW50ICJGaXggcHJvYmxlbSwgdGhlbiBydW4g
J3NldHVwLnB5IGluc3RhbGwnIGluIHRoYXQgZGlyZWN0b3J5IgogICAgICAgICAgICByYWlzZQoK
ICAgICMgcnVuKCkKCiAgICBkZWYgdW5wYWNrKHNlbGYpOgogICAgICAgIGlmIG5vdCBzZWxmLmxv
Y2FsZmlsZToKICAgICAgICAgICAgc2VsZi5sb2NhbGZpbGUgPSBzZWxmLmZldGNoKHNlbGYudXJs
KQogICAgICAgIGlmIHNlbGYudG1wZGlyOgogICAgICAgICAgICB1bnBhY2tfZGlyID0gdGVtcGZp
bGUubWtkdGVtcChwcmVmaXg9ImRpc3R1dGlscyIsIGRpcj1zZWxmLnRtcGRpcikKICAgICAgICBl
bHNlOgogICAgICAgICAgICB1bnBhY2tfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9ImRp
c3R1dGlscyIpCiAgICAgICAgbmV3ZGlyID0gc2VsZi51bnBhY2tfZGlzdHJpYnV0aW9uKHNlbGYu
bG9jYWxmaWxlLCB1bnBhY2tfZGlyKQogICAgICAgIHNlbGYuYnVpbGRfZGlyID0gbmV3ZGlyCgog
ICAgZGVmIGdldGRpc3Qoc2VsZik6CiAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQg
cnVuX3NldHVwCiAgICAgICAgaWYgbm90IHNlbGYuYnVpbGRfZGlyOgogICAgICAgICAgICByYWlz
ZSBEaXN0dXRpbHNJbnRlcm5hbEVycm9yLCAiYnVpbGRfZGlyIG5vdCBzZXQhIgogICAgICAgIHNl
dHVwX3B5ID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGlyLCAnc2V0dXAucHknKQogICAgICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZXR1cF9weSk6CiAgICAgICAgICAgIHJhaXNlIERpc3RV
dGlsc0ZpbGVFcnJvciwgImNhbid0IGZpbmQgc2V0dXAucHkgZmlsZSAlcyIlKHNldHVwX3B5KQog
ICAgICAgIGRpc3RvYmogPSBydW5fc2V0dXAoc2V0dXBfcHksIHN0b3BfYWZ0ZXI9ImNvbmZpZyIp
CiAgICAgICAgcmV0dXJuIGRpc3RvYmoKCiAgICBkZWYgZmV0Y2ggKHNlbGYsIHVybCk6CiAgICAg
ICAgaW1wb3J0IHVybGxpYjIsIHRlbXBmaWxlCiAgICAgICAgb3V0ZmQsIHRtcGZpbGUgPSB0ZW1w
ZmlsZS5ta3N0ZW1wKHN1ZmZpeD1vcy5wYXRoLmJhc2VuYW1lKHVybCkpCiAgICAgICAgb3V0ZnAg
PSBvcy5mZG9wZW4ob3V0ZmQsICd3JykKICAgICAgICBpbmZwID0gdXJsbGliMi51cmxvcGVuKHVy
bCkKICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICBkYXRhID0gaW5mcC5yZWFkKCkKICAgICAg
ICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBvdXRm
cC53cml0ZShkYXRhKQogICAgICAgIG91dGZwLmNsb3NlKCkKICAgICAgICByZXR1cm4gdG1wZmls
ZQoKICAgIGRlZiB1bnBhY2tfZGlzdHJpYnV0aW9uKHNlbGYsIGRpc3RmaWxlLCBidWlsZGRpcik6
CiAgICAgICAgIiIidW5wYWNrIGRpc3RyaWJ1dGlvbiBpbiAnZGlzdGZpbGUnIGluICdidWlsZGRp
cicuIHJldHVybiB0aGUKICAgICAgICAgZnVsbCBwYXRoIHRvIHRoZSBuZXcgZGlyZWN0b3J5IGNy
ZWF0ZWQgaW4gJ2J1aWxkZGlyJyIiIgogICAgICAgIGlmIGRpc3RmaWxlLmxvd2VyKCkuZW5kc3dp
dGgoJ3ppcCcpOgogICAgICAgICAgICB1bnBhY2tlciA9IFppcGZpbGVVbnBhY2tlcgogICAgICAg
IGVsc2U6CiAgICAgICAgICAgIHVucGFja2VyID0gVGFyZmlsZVVucGFja2VyCiAgICAgICAgb2xk
X2N3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgb3MuY2hkaXIoYnVpbGRkaXIpCiAgICAgICAgbmV3
ZGlyID0gdW5wYWNrZXIoZGlzdGZpbGUpCiAgICAgICAgb3MuY2hkaXIob2xkX2N3ZCkKICAgICAg
ICByZXR1cm4gbmV3ZGlyCgojIGNsYXNzIHgKCmRlZiBQeVBJX2xvb2t1cF9kb3dubG9hZF91cmwo
cGFja2FnZSk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAiUHlQSSBkb2Vzbid0IGtu
b3cgYWJvdXQgZG93bmxvYWQgVVJMcyB5ZXQhIgoKZGVmIFppcGZpbGVVbnBhY2tlcihmaWxlbmFt
ZSk6CiAgICAiIiIgdW5wYWNrIHppcCBmaWxlICdmaWxlbmFtZScgaW4gY3VycmVudCBkaXJlY3Rv
cnkKICAgICAgICByZXR1cm5zIGZ1bGwgcGF0aCB0byBuZXcgZGlyZWN0b3J5IiIiCiAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAiemlwIGZpbGVzIG5vdCBzdXBwb3J0ZWQgeWV0IgoKZGVm
IFRhcmZpbGVVbnBhY2tlcihmaWxlbmFtZSk6CiAgICAiIiIgdW5wYWNrIHRhcmJhbGwgJ2ZpbGVu
YW1lJyBpbiBjdXJyZW50IGRpcmVjdG9yeS4gCiAgICAgICAgcmV0dXJucyBmdWxsIHBhdGggdG8g
bmV3IGRpcmVjdG9yeSIiIgogICAgaW1wb3J0IHRhcmZpbGUKICAgICMgdHJhbnNwYXJlbnQgLSBs
ZXQgaXQgd29yayBvdXQgY29tcHJlc3Npb24KICAgIHRmID0gdGFyZmlsZS5vcGVuKGZpbGVuYW1l
LCAncicpIAogICAgbWVtYmVycyA9IHRmLmdldG1lbWJlcnMoKQogICAgdWRpciA9IG1lbWJlcnNb
MF0KICAgIGlmIG5vdCB1ZGlyLmlzZGlyKCk6IAogICAgICAgIHJhaXNlIFVucGFja0Vycm9yLCAi
Zmlyc3QgZW50cnkgaW4gdGFyYmFsbCBzaG91bGQgYmUgYSBkaXJlY3RvcnkhIiAKICAgIGZvciBt
ZW1iZXIgaW4gdGYuZ2V0bWVtYmVycygpOgogICAgICAgIHRmLmV4dHJhY3QobWVtYmVyKQogICAg
cHJpbnQgdWRpci5uYW1lCiAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCB1ZGly
Lm5hbWUpCgo=

------- =_aaaaaaaaaa0
Content-Type: application/octet-stream
Content-ID: <14891.1044886083.3@arbhome.com.au>
Content-Description: distutils-helper.py
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgpkZWYgcGFyc2VfYXJncygpOgogICAgInJldHVybiBzYW5p
dGlzZWQgYXJndW1lbnQgbGlzdCIKICAgIGltcG9ydCBzeXMsIG9zLnBhdGgKCiAgICAKICAgIGlm
IGxlbihzeXMuYXJndikgPCAyIG9yIHN5cy5hcmd2WzFdIGluICgiLS1oZWxwIiwiLWgiKToKICAg
ICAgICByZXR1cm4gW1snLS1oZWxwJywgJ2ZldGNoJ10sIF0KICAgIGFyZ3MgPSBbXQogICAgZ2xv
YmFsYXJncyA9IFtdCiAgICBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XToKICAgICAgICBpZiBhcmcu
c3RhcnRzd2l0aCgnLScpOgogICAgICAgICAgICBnbG9iYWxhcmdzLmFwcGVuZChhcmcpCiAgICAg
ICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhhcmcpOgogICAgICAgICAgICAjIGl0J3MgYSBsb2NhbCBm
aWxlbmFtZSAoYXJjaGl2ZSkKICAgICAgICAgICAgYXJncy5hcHBlbmQoWydmZXRjaCddK2dsb2Jh
bGFyZ3MrWyctLWxvY2FsZmlsZT0lcyclYXJnXSkKICAgICAgICBlbGlmICc6Ly8nIGluIGFyZzoK
ICAgICAgICAgICAgIyBpdCdzIGEgVVJMCiAgICAgICAgICAgIGFyZ3MuYXBwZW5kKFsnZmV0Y2gn
XStnbG9iYWxhcmdzK1snLS11cmw9JXMnJWFyZ10pCiAgICAgICAgZWxzZToKICAgICAgICAgICAg
IyBwdW50LCBhc3N1bWUgaXQncyBhIHBhY2thZ2UKICAgICAgICAgICAgYXJncy5hcHBlbmQoWydm
ZXRjaCddK2dsb2JhbGFyZ3MrWyctLXBhY2thZ2U9JXMnJWFyZ10pCiAgICByZXR1cm4gYXJncwoK
CmRlZiBtYWluKCk6CiAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoKICAgIGFy
Z3MgPSBwYXJzZV9hcmdzKCkKICAgIGZvciBhcmdsaXN0IGluIGFyZ3M6CiAgICAgICAgcHJpbnQg
YXJnbGlzdAogICAgICAgIGRpc3QgPSBzZXR1cChuYW1lPSJkdW1teSIsIHNjcmlwdF9hcmdzPWFy
Z2xpc3QpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCgo=

------- =_aaaaaaaaaa0--