Http lib back in the game

This commit is contained in:
Bernardo Heynemann 2012-03-08 16:32:29 -03:00
parent 617d79e91f
commit 00ecb7fb6d
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/ @env PYTHONPATH=$$PYTHONPATH:vows/sandbox/:. pyvows --cover --cover_package=django_pyvows --cover_threshold=95 vows/
ci_test: ci_test:

View file

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

View file

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

View file

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

View file

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

View file

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