CherryPy Essentials Rapid Python Web Application Development Design, develop, test, and deploy your Python web applications easily Sylvain Hellegouarch BIRMINGHAM - MUMBAI CherryPy Essentials Rapid Python Web Application Development Copyright © 2007 Packt Publishing All rights reserved No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However, the information contained in this book is sold without warranty, either express or implied Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals However, Packt Publishing cannot guarantee the accuracy of this information First published: March 2007 Production Reference: 2220307 Published by Packt Publishing Ltd 32 Lincoln Road Olton Birmingham, B27 6PA, UK ISBN 978-1-904811-84-8 ����������������� www.packtpub.com Cover Image by www.visionwt.com Credits Author Sylvain Hellegouarch Reviewers Rémi Delon Project Manager Patricia Weir Project Coordinator Sagara Naik Robert Brewer Indexer Development Editor Bhushan Pangaonkar Nanda Padmanabhan Proofreader Technical Editors Chris Smith Saurabh Singh Shayantani Chaudhuri Ved Prakash Jha Layouts and Illustrations Shantanu Zagade Manjiri Nadkarni Editorial Manager Dipali Chittar Cover Designer Shantanu Zagade About the Author Sylvain Hellegouarch is an IT Software Consultant dedicated to the development of free software projects such as CherryPy Since 2004, he has been coordinating and administrating the community efforts around the project providing support for newcomers and seasoned developers, alike In 2006, he developed 'bridge' and 'amplee', two Python-based projects centered on XML and the upcoming Atom Publishing Protocol respectively He has also been deeply involved in The Viberavetions Project, a comprehensive grassroots solution for independent artists and musicians to better connect with consumers, as well as the nuXleus project, a platform designed for faster, more reliable inter- and intra-application and personal communication Born in France, Sylvain graduated with a degree in Computer Science from South Brittany University, Lorient, France in 2002 Since then he has been working as an IT consultant for a variety of companies, both small and large He currently resides in the United Kingdom Acknowledgement Throwing myself into the adventure of writing a book was a challenge I had in mind for a while before Packt Publishing came along and I thank them for trusting me on the CherryPy book Overall writing a book is a task you can't carry alone; editors and reviewers are critical to the release of a good quality book I thoroughly thank Robert Brewer and Rémi Delon for undertaking the task of reviewing my work and I much appreciate how difficult it has been Both contributed complementary feedback that hopefully will make you enjoy reading this book Beyond that I want to thank Robert for making CherryPy such a fantastic product to use; I hope this book will show how professional CherryPy is Of course all of this would not have been possible if Rémi, the founder of the project, had not given the keys and his full trust to the community for carrying the project In addition I would like to thank Christian Wyglendowski who has done a fantastic job at supporting the community for so long with such indulgence and sense of humor I would also like to give thanks to my contacts at Packt Publishing, Nanda Padmanabhan, Patricia Weir, and Suneet Amrute for their support and patience throughout the making of this book They have trusted me and listened to my concerns in a way that I can only be grateful for I also want to acknowledge the support I received from folks at the Viberavetions project especially M David Peterson who has become a close friend, without forgetting Uche Ogbuji, Russ Miles and Kurt Cagle who have all shared their views at times when I needed them I heartily want to thank all my friends who have always respected my passion for being part of open-source projects and communities while reminding me that there is more to life than lines of code They have been a breath of fresh air to me throughout these years and a great comfort when times weren't good: one person particularly who has taken a great place in my life and who has always pushed me ahead Lastly I want to deeply thank my beloved family for always being discreetly there for me and supporting my decisions even when they did not look like they were in my best interests You have never failed me and the work I have put into this book is a way for me to thank you for that Merci vous This book is for the CherryPy community and beyond About the Reviewers Rémi Delon is a French software developer and entrepreneur living in London, UK He has been developing software for over 10 years and contributing to the open-source community for over five years He is the original creator of CherryPy and is now running WebFaction, a fast growing hosting service specialized in agile tools, including CherryPy and TurboGears Robert Brewer is the System Architect for Amor Ministries, a non-profit house-building ministry that serves the poors of Mexico He is the lead developer of the CherryPy project, and wrote most of version 3.0 He is also the author of the modpython gateway for WSGI, and is the creator of Dejavu, a pure-Python Object-Relational Mapper Founded in 2003 by the original CherryPy creator, WebFaction is a reliable and affordable hosting provider for your CherryPy applications You can get an exclusive 20% discount by using the promo code "CHERRYPYBOOK" when you sign up with WebFaction, visit http://www.webfaction.com for more details Table of Contents Preface Chapter 1: Introduction to CherryPy Overview History of CherryPy The Community CherryPy Project Strengths Beyond CherryPy Through the Book Summary 7 10 11 11 12 Chapter 2: Download and Install CherryPy 13 Chapter 3: Overview of CherryPy 25 Requirements Overview Installation from a Tarball Installation through Easy Install Installation from Subversion Testing your Installation Keeping CherryPy Up to Date Summary Vocabulary Basic Example Built-In HTTP Server Internal Engine Configuration Object Publisher Engine Library The Autoreload Feature The Caching Module 13 14 16 18 20 23 23 24 25 26 32 32 33 36 38 39 39 Table of Contents The Coverage Module The Encoding/Decoding Module The HTTP Module The Httpauth Module The Profiler Module The Sessions Module The Static Module The Tidy Module The Wsgiapp Module The XML-RPC Module Tools Error and Exception Handling Summary 39 40 40 40 40 41 42 42 42 42 43 44 49 Chapter 4: CherryPy in Depth 51 HTTP Compliance Multiple HTTP Servers Multi-Threaded Application Server URI Dispatching HTTP Method Dispatcher Routes Dispatcher Virtual Host Dispatcher Hook into CherryPy's Core Engine CherryPy Toolbox Basic Authentication Tool Caching Tool Decoding Tool Digest Authentication Tool Encode Tool Error Redirect Tool Etag Tool Gzip Tool Ignore Headers Tool Log Headers Tool Log Tracebacks Tool Proxy Tool Referer Tool Response Headers Tool Trailing Slash Tool XML-RPC Tool Toolbox Creating a Tool 51 52 54 55 55 57 58 59 61 62 63 64 65 66 67 67 69 69 70 71 72 73 74 75 76 77 77 [ ii ] Table of Contents Static Resource Serving Using the Staticfile Tool to Serve a Single File Using the Staticdir Tool to Serve a Complete Directory Bypassing Static Tools to Serve Static Content WSGI Support Hosting a WSGI Application within the CherryPy WSGI Server Hosting a CherryPy WSGI Application within a Third-Party WSGI Server Summary Chapter 5: A Photoblog Application A Photoblog Application Photoblog Entities Vocabulary DBMSes Overview Relational Database Management System (RDBMS) Object-Oriented Database Management System (OODBMS) XML Database Management System (XMLDBMS) Object-Relational Mapping Python Object-Relational Mappers Photoblog Application Entity Modeling Mapping Entities Units and UnitProperties Associating Units The Sandbox Interface Querying Units Extending the Data Access Layer Summary Chapter 6: Web Services 81 81 83 85 86 87 89 90 91 91 92 94 95 95 96 97 97 98 108 109 111 112 112 113 114 117 119 Traditional Web Development Separation of Concerns REST Uniform Resource Identifier HTTP Methods Putting it Together REST Interface through CherryPy Atom Publishing Protocol Atom XML-Document Format APP Implementation Summary 119 121 122 123 124 128 130 131 132 134 136 [ iii ]