mirror of
https://github.com/not-kennethreitz/python-for-humans.git
synced 2026-06-05 23:20:18 +00:00
3.0 KiB
3.0 KiB
!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