{"push_id":900568523,"size":59,"distinct_size":59,"ref":"refs/heads/master","head":"13b747fb965785b5445796eeb99b4cfefc4c6778","before":"6964500dd3e3ffe203791994bf61a164fa70cfd8","commits":[{"sha":"18fbe65523fe44bf95cca6ae72dc9aa52e9e933e","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Initial commit","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/18fbe65523fe44bf95cca6ae72dc9aa52e9e933e"},{"sha":"8466609343f30b031ebf9380a33fb34be4e9110f","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 1: initial version (1a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/8466609343f30b031ebf9380a33fb34be4e9110f"},{"sha":"52a780d6542e37f0e7b6a919bf3d7861338e588c","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 2: A complete application (2a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/52a780d6542e37f0e7b6a919bf3d7861338e588c"},{"sha":"1970f982b6bf1baabb13bd802969dc5e3ffa8030","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 2: Dynamic routes (2b)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/1970f982b6bf1baabb13bd802969dc5e3ffa8030"},{"sha":"9405cbd5c52a7e6c8d423e545ffbaa08dc59849e","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 2: Command line options with Flask-Script (2c)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/9405cbd5c52a7e6c8d423e545ffbaa08dc59849e"},{"sha":"e55fc2f5f6eba0c73bcdc3fa5c1608d9643a7340","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 3: Templates (3a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/e55fc2f5f6eba0c73bcdc3fa5c1608d9643a7340"},{"sha":"2cbde43e0588a6ba03943f9634ae60099c535732","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 3: Templates with Flask-Bootstrap (3b)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/2cbde43e0588a6ba03943f9634ae60099c535732"},{"sha":"c2a213b4fb393dbb5d549eed0adc9f95d70fe199","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 3: Custom error pages (3c)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/c2a213b4fb393dbb5d549eed0adc9f95d70fe199"},{"sha":"c36b3aa18164ae1d201c9fe4f0c0f7e6d31dbbf5","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 3: Static files (3d)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/c36b3aa18164ae1d201c9fe4f0c0f7e6d31dbbf5"},{"sha":"2d7ec2eacf44e8237259535af26b7ef79d0ed1ef","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 3: Dates and times with Flask-Moment (3e)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/2d7ec2eacf44e8237259535af26b7ef79d0ed1ef"},{"sha":"9b853c0af157ef8f4441770aa3dee690d92fc100","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 4: Web forms with Flask-WTF (4a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/9b853c0af157ef8f4441770aa3dee690d92fc100"},{"sha":"f6076319e54de42c3dcd6908c987427ee182f59c","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 4: Redirects and user sessions (4b)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/f6076319e54de42c3dcd6908c987427ee182f59c"},{"sha":"6722abb786a3d1f4f2a10f3c4654a51b47064697","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 4: Message flashing (4c)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/6722abb786a3d1f4f2a10f3c4654a51b47064697"},{"sha":"535b16eedc69f88b519d98b650ecaf01a81a03a5","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 5: Database models with Flask-SQLAlchemy (5a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/535b16eedc69f88b519d98b650ecaf01a81a03a5"},{"sha":"94d87dcd8ec723df8e11b9cf18f8842394aa5e26","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 5: Database use in the application (5b)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/94d87dcd8ec723df8e11b9cf18f8842394aa5e26"},{"sha":"e18950defbacc7b216563170773124d4fdc56638","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 5: Shell context (5c)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/e18950defbacc7b216563170773124d4fdc56638"},{"sha":"23ee700d6691d33911abf34b72474aefaca2912f","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 5: Database migrations with Flask-Migrate (5d)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/23ee700d6691d33911abf34b72474aefaca2912f"},{"sha":"f2a15d624ed36592c3f9277f5e90ff7c7e2a9abb","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 6: Email support with Flask-Mail (6a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/f2a15d624ed36592c3f9277f5e90ff7c7e2a9abb"},{"sha":"09d4ff0f5cad0d9d7b3478c3eab761e2dd31eb37","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 6: Asynchronous emails (6b)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/09d4ff0f5cad0d9d7b3478c3eab761e2dd31eb37"},{"sha":"4987f6caefddd9706e06e5fa1266528e0b80a752","author":{"email":"867e6f7716cd7d89b2aa6d04c9799a31b0e6903e@gmail.com","name":"Miguel Grinberg"},"message":"Chapter 7: Large file structure (7a)","distinct":true,"url":"https://api.github.com/repos/drinkyouroj/unroots-blog/commits/4987f6caefddd9706e06e5fa1266528e0b80a752"}]}