Dynamic Web Programming: python pg and cgi modules Mansi M. Kasliwal Carnegie Institution for Science California Institute of Technology Database • Logical tables to organize large amounts of data • Easy-to-manage: add/subtract/modify • Structure facilitating super-fast complex queries • Python “pg” module • connect • query, insert, delete, update (Note: psycopg2 module for cursor handling in large databases, copy command etc.) 2 An Example Database Schema createdb tutorial psql –d tutorial CREATE SEQUENCE people_id_seq; CREATE TABLE people ( id bigint NOT NULL default nextval(‘people_id_seq’), firstname text, lastname text ); CREATE TABLE education ( people_id bigint, subject text, degree text, college text, year int ); 3 Example pg commands import pg #Connect to Database db = pg.connect(dbname=‘tutorial’, host=‘localhost’, user=‘mmk’) #Add Entries db.insert(people, [firstname=‘mansi’, lastname=‘kasliwal’]) delete(table, [d,] [key = val, ...]) update(table, [d,] [key = val, ...]) #Example Query Joining Two Tables result = db.query(“SELECT * from people, education WHERE people.id = education.people_id AND subject=‘astronomy’;”) 4 Dynamic Web Programming • Generate nimble webpages on-the-fly that push and pull data to and fro a database • Python “cgi” module is easy-to-use • URL: GET method • e.g. tutorial.cgi?firstname=‘mansi’&lastname=‘kasliwal’ • FORM: POST method • • • • Radio buttons or check boxes Drop down menu File upload/download Blank Text Area • Retrieving cookies • e.g. os.environ['REMOTE_USER'] (Note: wsgi is more portable than cgi since it unifies the application programming interface; wsgi = Web Server Gateway Interface) 5 Example Form #!/usr/bin/python # Import modules for CGI handling import cgi, cgitb # Create instance of FieldStorage form =cgi.FieldStorage() # Put up a form <form action="/cgi-bin/tutorial.cgi" method="post"> First Name: <input type="text" name="firstname"> <br /> Last Name: <input type="text" name="lastname" /> <input type="submit" value="Submit" /> </form> # Get data from fields first_name = form.getvalue('firstname') last_name = form.getvalue('lastname') #Insert entry into database db.insert(people, [firstname=‘%s’, lastname=‘%s’] %(first_name, last_name)) 6 Check box / Dropdown Menu <form action="/cgi-bin/checkbox.cgi" method="POST" target="_blank"> <input type="checkbox" name="maths" value="on" /> Maths <input type="checkbox" name="physics" value="on" /> Physics <input type="submit" value="Select Subject" /> </form> <form action="/cgi-bin/dropdown.cgi" method="post" target="_blank"> <select name="dropdown"> <option value="Maths" selected>Maths</option> <option value="Physics">Physics</option> </select> <input type="submit" value="Submit"/> </form> 7 Applications in Time Domain 1. A Treasures Portal 2. Follow-up Marshals a. Extragalactic Transients b. Milky Way Variables c. Solar System d. Target-of-opportunity 8 iPTF Treasures Portal 9 Developers: MMK, Yi Cao The iPTF Treasure Chest A versatile portal with query derivatives: 1. ROBOTIC treasurer 2. SYSTEMATIC daily monitoring 3. YOUNG supernovae 4. GAP transients in the local universe 5. SLOWLY rising supernovae 6. LARGE amplitude stars 7. Fermi/Icecube target of opportunity fields triggers 8. M31/M33 transients and variables 9. FAST Transients 10. NUCLEAR Transients Developers: MMK, Yi Cao, Iair Arcavi 10 11 Developers: Robert Quimby, MMK, Iair Arcavi 12 13 Light Curves: Key to Variable Stars 14 Developers: David Levitan Automatically match with SDSS, WISE, Simbad Links to NED, CRTS, LINEAR, etc. Periods 15 Period search 16 Movement: Key to Asteroids Developer: Adam Waszczak 17 Target-of-Opportunity Marshal Developer: Leo Singer 18 Questions? 19