Skip to content

Commit 20fe000

Browse files
Add support for automatic datetime handing within hug
1 parent db7d206 commit 20fe000

4 files changed

Lines changed: 25 additions & 16 deletions

File tree

examples/versioning.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""A simple example of a hug API call with versioning"""
2+
import hug
23

34

45
@hug.version[1].get('/echo')

hug/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def decorator(api_function):
2121
defaults = {}
2222
for index, default in enumerate(reversed(api_function.__defaults__ or ())):
2323
defaults[accepted_parameters[-(index + 1)]] = default
24-
required = accepted_parameters[:-(len(api_function.__defaults__))]
24+
required = accepted_parameters[:-(len(api_function.__defaults__ or ()))]
2525

2626
def interface(request, response):
2727
input_parameters = request.params

hug/documentation.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,27 @@ def generate(module, base_url=""):
1414

1515
for handler, methods in mapping.items():
1616
doc = url_doc.setdefault(",".join(methods), OrderedDict())
17-
doc['usage'] = handler.api_function.__doc__
17+
usage = handler.api_function.__doc__
18+
if usage:
19+
doc['usage'] = usage
1820
if handler.example:
1921
doc['example'] = "{0}{1}".format(base_url, url)
2022
if isinstance(handler.example, str):
2123
doc['example'] += "?{0}".format(handler.example)
22-
inputs = doc.setdefault('inputs', OrderedDict())
2324
doc['outputs'] = OrderedDict(format=handler.output_format.__doc__)
2425

25-
api = handler.api_function
26-
types = api.__annotations__
27-
28-
for argument in handler.accepted_parameters:
29-
if argument in ('request', 'response'):
30-
continue
31-
32-
input_definition = inputs.setdefault(argument, OrderedDict())
33-
input_definition['type'] = types.get(argument, hug.types.text).__doc__
34-
default = handler.defaults.get(argument, None)
35-
if default is not None:
36-
input_definition['default'] = default
26+
if handler.accepted_parameters:
27+
inputs = doc.setdefault('inputs', OrderedDict())
28+
types = handler.api_function.__annotations__
29+
for argument in handler.accepted_parameters:
30+
if argument in ('request', 'response'):
31+
continue
32+
33+
input_definition = inputs.setdefault(argument, OrderedDict())
34+
input_definition['type'] = types.get(argument, hug.types.text).__doc__
35+
default = handler.defaults.get(argument, None)
36+
if default is not None:
37+
input_definition['default'] = default
3738

3839
return documentation
3940

hug/output_format.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import json as json_converter
2+
from datetime import datetime
3+
4+
5+
def _json_converter(item):
6+
if isinstance(item, datetime):
7+
return item.isoformat()
8+
raise TypeError("Type not serializable")
29

310

411
def json(content):
512
"""JSON (Javascript Serialized Object Notation)"""
6-
return json_converter.dumps(content).encode('utf8')
13+
return json_converter.dumps(content, default=_json_converter).encode('utf8')
714

815

916
def text(content):

0 commit comments

Comments
 (0)