Skip to content

Instantly share code, notes, and snippets.

@lanior
Created December 10, 2010 10:07
Show Gist options
  • Save lanior/736042 to your computer and use it in GitHub Desktop.
Save lanior/736042 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from flup.server.fcgi import WSGIServer
import cgi
import urlparse
import traceback
from datetime import datetime
def process(request):
def parse_date(date):
try:
return datetime.strptime(date, '%d.%m.%y')
except ValueError:
return datetime.strptime(date, '%d.%m.%Y')
d1 = request.get('d1', '')
d2 = request.get('d2', '')
result = 'None'
if request.get('submit'):
try:
date1 = parse_date(d1)
date2 = parse_date(d2)
diff = abs((date1 - date2).days)
result = '1 day' if diff == 1 else '%d days' % (diff)
except ValueError:
result = 'Invalid dates'
return '''
<!DOCTYPE html>
<p>Date format: dd.mm.YY or dd.mm.yyyy</p>
<form method="GET" action="/">
<input name="d1" value="%s" />
<input name="d2" value="%s" />
<input name="submit" type="submit" />
</form>
<p>Result: %s</p>
''' % (cgi.escape(d1, True), cgi.escape(d2, True), result)
class Request:
def __init__(self, environ):
self.params = urlparse.parse_qs(environ['QUERY_STRING'])
self.form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)
def get(self, name, default=None):
return self.params[name][0] if name in self.params else default
def app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
try:
request = Request(environ)
return process(request)
except:
return '<pre>%s</pre>' % (traceback.format_exc())
WSGIServer(app, bindAddress=('localhost', 8000)).run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment