Files
python-for-humans/3_proposal/0_proposal.md
T
Kenneth Reitz 56ff7221b5 snapshot
2011-10-06 19:55:13 -04:00

169 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
!SLIDE bullets incremental
# This is a serious problem.
!SLIDE bullets incremental
# The Solution is Simple.
- Build elegant tools to perform these tasks.
- Provide a real resource for learning.
!SLIDE
## Python needs more Pragmatic Packages.
!SLIDE dark
## pra•gmat•ic |pragˈmatik|, *adj*:
Dealing with things sensibly and realistically in a way that is
based on practical rather than theoretical considerations.
!SLIDE
# An Examples.
### Let's mess around. Maybe play with the GitHub API?
!SLIDE
!SLIDE small code
@@@ ruby
require 'net/http'
require 'uri'
uri = URI.parse('https://api.github.com/user')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new(uri.request_uri)
req.basic_auth('username', 'password')
r = http.request(req)
puts r
## Let's port this to Python.
!SLIDE smaller code execute
# Python (hours later).
@@@ python
import urllib2
gh_url = 'https://api.github.com/user'
req = urllib2.Request(gh_url)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'user', 'pass')
auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)
urllib2.install_opener(opener)
handler = urllib2.urlopen(req)
print handler.read()
!SLIDE smaller code execute
#I lied — there's more!
@@@ python
import re
class HTTPForcedBasicAuthHandler(HTTPBasicAuthHandler):
auth_header = 'Authorization'
rx = re.compile('(?:.*,)*[ \t]*([^ \t]+)[ \t]+'
'realm=(["\'])(.*?)\\2', re.I)
def __init__(self, *args, **kwargs):
HTTPBasicAuthHandler.__init__(self, *args, **kwargs)s
def http_error_401(self, req, fp, code, msg, headers):
url = req.get_full_url()
response = self._http_error_auth_reqed(
'www-authenticate', url, req, headers)
self.reset_retry_count()
return response
http_error_404 = http_error_401
!SLIDE
# Admit it.
If this was you, you'd leave Python and never come back.
!SLIDE
# Break it down.
!SLIDE
# Enter Requests.
!SLIDE
# The Codez, they are ugleh.
[trollface or something]
!SLIDE
## Unless there's an explicit requirement,
## a student should never see urllib2.
# No excuses.
!SLIDE
# Pragmatic Package.
@@@ python
import requests
url = 'https://api.github.com/user'
auth = ('username', 'password')
r = requests.get(url, auth=auth)
print r.content
!SLIDE
# Fit the 90% Use Case.
!SLIDE
# The API is all that matters.
## Everything else is secondary.
!SLIDE incremental bullets
# I Mean ***Everything***.
- Features.
- Efficiency.
- Performance.
- Corner-cases.
!SLIDE
# urllib2
"I'd rather be writing ColdFusion."
!SLIDE small
# subprocess
A powerful module that .
@@@ python
import envoy
c = envoy.run('ls')
.
@@@ pycon
>>> c.status_code
200