setuptools.setup(
name='fwx',
- version='0.0.6',
+ version='0.0.8',
author='David Kerkeslager',
author_email='kerkeslager+pypi@gmail.com',
description="fwx isn't a framework, it's a library.",
(
'env',
'GET',
+ 'POST',
'accept',
'accept_encoding',
'accept_language',
)
class Request(_Request):
- def __new__(cls, env, **kwargs):
+ def __new__(cls, method, path, env=None):
+ if env is None:
+ env = {}
+
errors = []
accept = env.get('HTTP_ACCEPT')
accept_language = env.get('HTTP_ACCEPT_LANGUAGE')
content = env.get('CONTENT', '')
content_type = env.get('CONTENT_TYPE')
- method = env.get('REQUEST_METHOD')
- path = env.get('PATH_INFO')
query = env.get('QUERY_STRING')
user_agent = env.get('HTTP_USER_AGENT')
except:
cookie = http.cookies.SimpleCookie()
-
try:
GET = urllib.parse.parse_qs(query)
except:
GET = {}
errors.append('Unable to parse GET parameters from query string "{}"'.format(query))
+ if method == 'POST':
+ try:
+ if content_type == 'application/x-www-form-urlencoded':
+ POST = urllib.parse.parse_qs(content)
+ else:
+ POST = {}
+ errors.append('Unable to parse POST parameters from content string "{}"'.format(content))
+
+ except:
+ POST = {}
+ errors.append('Unable to parse POST parameters from content string "{}"'.format(content))
+
+ else:
+ POST = {}
+
if method == 'GET':
parameters = GET
elif method == 'POST':
- raise Exception('not yet implemented')
+ parameters = POST
else:
parameters = None
cls,
env=env,
GET=GET,
+ POST=POST,
accept=accept,
accept_encoding=accept_encoding,
accept_language=accept_language,
return result
def _get_request_from_env(env):
- return Request(env)
+ method = env.get('REQUEST_METHOD')
+ path = env.get('PATH_INFO')
+ return Request(method, path, env)
_Response = collections.namedtuple(
'Response',
return (b'',)
def default_file_not_found_handler(request):
- return Response('', status=404)
+ return TextResponse(
+ 'Path "{}" with query "{}" not found'.format(request.path, request.query),
+ status=404,
+ )
def route_on_subpath(**kwargs):
routes = kwargs.pop('routes')
file_not_found_handler = kwargs.pop(
- 'file_not_found_hanlder',
+ 'file_not_found_handler',
default_file_not_found_handler,
)
class RequestTests(unittest.TestCase):
def test_GET(self):
- request = fwx.Request({
- 'PATH_INFO': '/',
+ request = fwx.Request('GET', '/', {
'QUERY_STRING': 'foo=bar&baz=qux',
- 'REQUEST_METHOD': 'GET',
})
self.assertEqual(request.GET['foo'], ['bar'])
self.assertEqual(request.GET['baz'], ['qux'])
def test_parameters(self):
- request = fwx.Request({
- 'PATH_INFO': '/',
- 'REQUEST_METHOD': 'GET',
+ request = fwx.Request('GET', '/', {
'QUERY_STRING': 'foo=bar&baz=qux',
})
)
self.assertEqual(
- router(fwx.Request({
- 'PATH_INFO': '/bar/bara/anne/',
- 'REQUEST_METHOD': 'GET',
- })).content,
+ router(fwx.Request('GET', '/bar/bara/anne/')).content,
'bar',
)
)
self.assertEqual(
- router(fwx.Request({
- 'PATH_INFO': '/bar/bara/anne/',
- 'REQUEST_METHOD': 'GET',
- })).content,
+ router(fwx.Request('GET', '/bar/bara/anne/')).content,
'bara/anne/',
)
)
self.assertEqual(
- router(fwx.Request({
- 'PATH_INFO': '/bar/bara/anne/',
- 'REQUEST_METHOD': 'GET',
- })).content,
+ router(fwx.Request('GET', '/bar/bara/anne/')).content,
'/bar/bara/anne/',
)
+class default_file_not_found_Tests(unittest.TestCase):
+ def test_responds(self):
+ response = fwx.default_file_not_found_handler(
+ fwx.Request('GET', '/bar/bara/anne/'),
+ )
+
+ self.assertNotEqual(response, None)
+
if __name__ == '__main__':
unittest.main()