Using httplib2

This commit is contained in:
Bernardo Heynemann 2012-03-08 15:57:32 -03:00
parent 00625f718f
commit d7f2e46c94
6 changed files with 46 additions and 41 deletions

View file

@ -1,4 +1,4 @@
pyvows:
pyvows: db
@env PYTHONPATH=$$PYTHONPATH:vows/sandbox/:. pyvows --cover --cover_package=django_pyvows --cover_threshold=95 vows/
ci_test:

View file

@ -8,8 +8,7 @@
# http://www.opensource.org/licenses/mit-license
# Copyright (c) 2011 Rafael Caricio rafael@caricio.com
from pyvows import Vows, expect
from pyvows import Vows
class Model(object):
def __init__(self, context, model):

View file

@ -1,5 +1,7 @@
import urllib2
from urllib import urlencode
#!/usr/bin/python
# -*- coding: utf-8 -*-
import httplib2
import mimetypes
import mimetools
@ -70,10 +72,12 @@ class MultiPartForm(object):
def get(url):
response = urllib2.urlopen(url)
return response
h = httplib2.Http()
resp, content = h.request(url)
return resp, content
def post(url, data):
h = httplib2.Http()
form = MultiPartForm()
for field, value in data.iteritems():
@ -82,15 +86,15 @@ def post(url, data):
else:
form.add_field(field, str(value))
request = urllib2.Request(url)
body = str(form)
request.add_header('Content-type', form.get_content_type())
request.add_header('Content-length', len(body))
request.add_data(body)
headers = {
'Content-type': form.get_content_type(),
'Content-length': str(len(body))
}
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, err:
response = h.request(url, 'POST', headers=headers, body=body)
except httplib2.HttpLib2Error, err:
response = err
return response

View file

@ -43,7 +43,8 @@ django-pyvows are pyvows extensions to django web framework.
install_requires=[
"pyvows",
"django"
"django",
"httplib2"
],
)

View file

@ -8,9 +8,10 @@
# http://www.opensource.org/licenses/mit-license
# Copyright (c) 2011 Rafael Caricio rafael@caricio.com
import urllib2
from os.path import abspath, join, dirname
import httplib2
from django_pyvows.context import DjangoContext, DjangoHTTPContext
from django_pyvows.assertions import *
@ -25,57 +26,57 @@ class HttpContextVows(DjangoHTTPContext):
self.start_server()
return self.get("/")
def the_return_code_should_be_200(self, topic):
expect(topic.getcode()).to_equal(200)
def the_return_code_should_be_200(self, (topic, content)):
expect(topic.status).to_equal(200)
def should_return_the_success_response(self, topic):
expect(topic.read()).to_equal("hello world")
def should_return_the_success_response(self, (topic, content)):
expect(content).to_equal("hello world")
class Methods(DjangoContext):
def topic(self):
return self.get('/?name=rafael')
def should_be_possible_to_pass_get_parameters(self, topic):
expect(topic.getcode()).to_equal(200)
def should_be_possible_to_pass_get_parameters(self, (topic, content)):
expect(topic.status).to_equal(200)
class AskMyName(DjangoContext):
def topic(self):
return self.get('/say/')
def should_ask_for_my_name(self, topic):
expect(topic.read()).to_equal('What\'s your name?')
def should_ask_for_my_name(self, (topic, content)):
expect(content).to_equal('What\'s your name?')
class SayHelloToMe(DjangoContext):
def topic(self):
return self.get('/say/?name=Rafael')
def should_say_hello_to_me(self, topic):
expect(topic.read()).to_equal('Hello, Rafael!')
def should_say_hello_to_me(self, (topic, content)):
expect(content).to_equal('Hello, Rafael!')
class PostIt(DjangoContext):
def topic(self):
return self.post('/post_it/', {'value': 'posted!'})
def should_be_posted(self, topic):
expect(topic.read()).to_equal('posted!')
def should_be_posted(self, (topic, content)):
expect(content).to_equal('posted!')
class PostFile(DjangoContext):
def topic(self):
return self.post('/post_file/', {'the_file': open(TEST_FILE_PATH) })
def should_be_posted_to_the_server(self, topic):
expect(topic.read()).to_equal("the contents")
def should_be_posted_to_the_server(self, (topic, content)):
expect(content).to_equal("the contents")
class PostToNotFound(DjangoContext):
def topic(self):
return self.post('/post_/', {'the_file': open(TEST_FILE_PATH) })
def should_be_thrown_an_error(self, topic):
expect(topic).to_be_an_error_like(urllib2.HTTPError)
def should_be_404(self, (topic, content)):
expect(topic.status).to_equal(404)

View file

@ -54,25 +54,25 @@ class SettingsVows(DjangoContext):
def topic(self):
self.settings.SAY_HELLO_WITHOUT_NAME = False
self.start_server(port=8002)
self.start_server(port=9000)
return self.get('/say/')
def should_be_ok(self, topic):
expect(topic.code).to_equal(200)
def should_be_ok(self, (topic, content)):
expect(topic.status).to_equal(200)
def should_ask_for_my_name(self, topic):
expect(topic.read()).to_equal("What's your name?")
def should_ask_for_my_name(self, (topic, content)):
expect(content).to_equal("What's your name?")
class SayHelloWithoutName(DjangoHTTPContext):
def topic(self):
self.settings.SAY_HELLO_WITHOUT_NAME = True
self.start_server(port=8003)
self.start_server(port=9001)
return self.get('/say/')
def should_be_ok(self, topic):
expect(topic.code).to_equal(200)
def should_be_ok(self, (topic, content)):
expect(topic.status).to_equal(200)
def should_(self, topic):
expect(topic.read()).to_equal("Hello, guess!")
def should_(self, (topic, content)):
expect(content).to_equal("Hello, guess!")