Re: gzipped content in LivePages

Werner Thie <[email protected]> Thu, 15 Jul 2010 11:12:52 +0200
Newsgroups gmane.comp.python.quotient.dev
Organization THIEngineering AG
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------080909040908010005060009
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Odd to answer my own posts, but maybe this is of interest to someone 
between now and eternity...

Diddling with the code in nevow.compressing I found it difficult to do a 
selective prezipped JS content delivery within the LivePage class. So I 
searched for a way to do it by subclassing and found an (for me) 
acceptable way to deal with the problem at hand:

- deliver zipped JS modules only when present in the resource path
- fall back to standard unzipped content when negotiation does not allow 
zipped content

module directory on jsmodules path

./common
   __init__.js
   globals.js
   bigmodule.js
   bigmodule.js.gz

The attached code snippet shows how to do that by subclassing 
athena.MappingResource and LivePage.

Werner

On 29.05.2010 06:03, Werner Thie wrote:
> Hi
>
> Is there an easy way to switch to gzipped content in either nevow or
> twisted, helping a lot with  delivering more and more JScript code to
> the user (obfuscated and all I could squeeze out another factor of three)
>
> Thank you, Werner
>
> _______________________________________________
> Divmod-dev mailing list
> [email protected]
> http://divmod.org/cgi-bin/mailman/listinfo/divmod-dev

--------------080909040908010005060009
Content-Type: application/x-python;
 name="MappingCompressedResourceExample.py"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="MappingCompressedResourceExample.py"

IyEgL3Vzci9iaW4vZW52IHB5dGhvbgojLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KCiIi
IgptYWlucGFnZS5weSAtIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMg
aGFwcGVuaW5nLCB0aGUgdXNlciB3aWxsIG5ldmVyCiAgICAgICAgICAgICAgZXZlciBzZWUg
YSBwYWdlIGNoYW5nZSBkdXJpbmcgdGhlIHdob2xlIHZpc2l0LiBFdmVyeXRoaW5nIHRoZSB1
c2VyIGl3CiAgICAgICAgICAgICAgc2hvd24gaXMgaW5qZWN0ZWQgYXMgYSBMaXZlRWxlbWVu
dCBpbnRvIHRoZSBwYWdlIGFuZCBkZWxldGVkIGFmdGVyIGl0CiAgICAgICAgICAgICAgaGFz
IHNlcnZlZCBpdHMgcHVycG9zZS4KCmF1dGhvciAgIDogV2VybmVyIFRoaWUsIHd0aApsYXN0
IGVkaXQ6IHd0aCwgMTUuMDcuMjAxMAptb2RoaXN0b3J5OgogIDE1LjA3LjIwMTAgLSB3dGgs
IG5ldyBNYXBwaW5nQ29tcHJlc3NlZFJlc291cmNlIGltcGxlbWVudGVkCiIiIgoKaW1wb3J0
IG9zLCBzeXMKCmZyb20gem9wZS5pbnRlcmZhY2UgaW1wb3J0IGltcGxlbWVudHMKCmZyb20g
dHdpc3RlZC5weXRob24gaW1wb3J0IHV0aWwsIGxvZwoKZnJvbSBuZXZvdyBpbXBvcnQgc3Rh
dGljLCBhdGhlbmEsIGxvYWRlcnMsIHVybCwgdGFncyBhcyBULCBpbmV2b3csIGd1YXJkCmZy
b20gbmV2b3cucGFnZSBpbXBvcnQgcmVuZGVyZXIKZnJvbSBuZXZvdy5jb21wcmVzc2lvbiBp
bXBvcnQgcGFyc2VBY2NlcHRFbmNvZGluZwpmcm9tIG5ldm93LmluZXZvdyBpbXBvcnQgSVJl
cXVlc3QKCmNsYXNzIE1hcHBpbmdDb21wcmVzc2VkUmVzb3VyY2UoYXRoZW5hLk1hcHBpbmdS
ZXNvdXJjZSk6CiAgIiIiCiAgTHtpbmV2b3cuSVJlc291cmNlfSB3aGljaCBsb29rcyB1cCBz
ZWdtZW50cyBpbiBhIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2xpYwogIG5hbWVzIGFuZCB0aGUg
ZmlsZXMgdGhleSBjb3JyZXNwb25kIHRvLiBBZGRpdGlvbmFsbHkgaWYgYSBjb21wcmVzc2Vk
IHZlcnNpb24KICBpcyBwcmVzZW50IGFuZCBjb250ZW50IG5lZ290aWF0aW9uIGFsbG93cyB6
aXBwZWQgcmVzb3VyY2VzLCB0aGUgemlwcGVkCiAgZmlsZSBpcyBwcmVmZXJyZWQKCiAgQHR5
cGUgbWFwcGluZzogQ3tkaWN0fQogIEBpdmFyIG1hcHBpbmc6IEEgbWFwIGJldHdlZW4gc3lt
Ym9saWMsIHJlcXVlc3RhYmxlIG5hbWVzIChlZywKICAnTmV2b3cuQXRoZW5hJykgYW5kIEN7
c3RyfSBpbnN0YW5jZXMgd2hpY2ggbmFtZSBmaWxlcyBjb250YWluaW5nIGRhdGEKICB3aGlj
aCBzaG91bGQgYmUgc2VydmVkIGluIHJlc3BvbnNlLgogICIiIgogIGltcGxlbWVudHMoaW5l
dm93LklSZXNvdXJjZSkKCiAgZGVmIGNhbkNvbXByZXNzKHNlbGYsIHJlcSk6CiAgICAiIiIK
ICAgIENoZWNrIHdoZXRoZXIgdGhlIGNsaWVudCBoYXMgbmVnb3RpYXRlZCBhIGNvbnRlbnQg
ZW5jb2Rpbmcgd2Ugc3VwcG9ydC4KICAgICIiIgogICAgdmFsdWUgPSByZXEuZ2V0SGVhZGVy
KCdhY2NlcHQtZW5jb2RpbmcnKQogICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIGVu
Y29kaW5ncyA9IHBhcnNlQWNjZXB0RW5jb2RpbmcodmFsdWUpCiAgICAgIHJldHVybiBlbmNv
ZGluZ3MuZ2V0KCdnemlwJywgMC4wKSA+IDAuMAogICAgcmV0dXJuIEZhbHNlCgoKICBkZWYg
cmVzb3VyY2VGYWN0b3J5KHNlbGYsIGZpbGVOYW1lKToKICAgICIiIgogICAgUmV0cmlldmUg
YSBwb3NzaWJseSAgTHtpbmV2b3cuSVJlc291cmNlfSB3aGljaCB3aWxsIHJlbmRlciB0aGUg
Y29udGVudHMgb2YKICAgIEN7ZmlsZU5hbWV9LgogICAgIiIiCiAgICBmID0gb3BlbihmaWxl
TmFtZSwgJ3JiJykKICAgIGpzID0gZi5yZWFkKCkKICAgIHJldHVybiBzdGF0aWMuRGF0YShq
cywgJ3RleHQvamF2YXNjcmlwdCcpCgoKICBkZWYgbG9jYXRlQ2hpbGQoc2VsZiwgY3R4LCBz
ZWdtZW50cyk6CiAgICB0cnk6CiAgICAgIGltcGwgPSBzZWxmLm1hcHBpbmdbc2VnbWVudHNb
MF1dCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgIHJldHVybiByZW5kLk5vdEZvdW5kCiAg
ICBlbHNlOgogICAgICByZXEgPSBJUmVxdWVzdChjdHgpCiAgICAgIGltcGxneiA9IGltcGwg
KyAnLmd6JwogICAgICBpZiBzZWxmLmNhbkNvbXByZXNzKHJlcSkgYW5kIG9zLnBhdGguZXhp
c3RzKGltcGxneik6CiAgICAgICAgaW1wbCA9IGltcGxnegogICAgICAgIHJlcS5zZXRIZWFk
ZXIoJ2NvbnRlbnQtZW5jb2RpbmcnLCAnZ3ppcCcpCiAgICAgIHJldHVybiBzZWxmLnJlc291
cmNlRmFjdG9yeShpbXBsKSwgW10KCgpjbGFzcyBtYWluUGFnZShhdGhlbmEuTGl2ZVBhZ2Up
OgogIGFkZFNsYXNoID0gVHJ1ZQogIGpzQ2xhc3MgPSB1J2NvbW1vbi5iaWdtb2R1bGUuTWFp
blBhZ2UnCgogIGRvY0ZhY3RvcnkgPSBsb2FkZXJzLnhtbHN0cigiIiIKICAgIDwhRE9DVFlQ
RSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRw
Oi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KICAgIDxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpuZXZvdz0i
aHR0cDovL25ldm93LmNvbS9ucy9uZXZvdy8wLjEiPgogICAgICA8aGVhZD4KICAgICAgICA8
dGl0bGUgbmV2b3c6ZGF0YT0idGl0bGUiIG5ldm93OnJlbmRlcj0iZGF0YSI+UGFnZSBUaXRs
ZTwvdGl0bGU+CiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250
ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgICAgICA8bmV2b3c6aW52aXNp
YmxlIG5ldm93OnJlbmRlcj0ibGl2ZWdsdWUiIC8+CiAgICAgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KICAgICAgICAgIGh0bWwgewogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAg
ICAgICAgICB9CiAgICAgICAgICBib2R5IHsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAw
JTsKICAgICAgICAgIH0KICAgICAgICAgICogaHRtbCBib2R5IHsKICAgICAgICAgICAgaGVp
Z2h0OiAxMDAlOwogICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICAgIDwvaGVhZD4K
ICAgICAgPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IG92ZXJmbG93
OiBoaWRkZW47IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7Ij4KICAgICAgPC9ib2R5Pgog
ICAgPC9odG1sPgogICIiIikKCiAgZGVmIGNoaWxkX2pzbW9kdWxlKHNlbGYsIGN0eCk6CiAg
ICAiIiIKICAgIGJ5IG92ZXJyaWRpbmcgd2UgbGV0IE1hcHBpbmdDb21wcmVzc2VkUmVzb3Vy
Y2UgZG8gaXRzIG1hZ2ljCiAgICAiIiIKICAgIHJldHVybiBNYXBwaW5nQ29tcHJlc3NlZFJl
c291cmNlKHNlbGYuanNNb2R1bGVzLm1hcHBpbmcpCgogIGRlZiByZW5kZXJfcGxheWdyb3Vu
ZChzZWxmLCBjdHgsIGRhdGEpOgogICAgZiA9IHBsYXlncm91bmQoKQogICAgZi5zZXRGcmFn
bWVudFBhcmVudChzZWxmKQogICAgcmV0dXJuIGN0eC50YWdbZl0KCg==
--------------080909040908010005060009
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline