Skip to content

Commit c1f719e

Browse files
author
Emmanouil Konstantinidis
committed
Catch errors for fields
1 parent a46271e commit c1f719e

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

rest_framework_docs/api_endpoint.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def __init__(self, pattern, parent_pattern=None):
1111
self.path = self.__get_path__(parent_pattern)
1212
self.allowed_methods = self.__get_allowed_methods__()
1313
# self.view_name = pattern.callback.__name__
14+
self.errors = None
1415
self.fields = self.__get_serializer_fields__()
1516

1617
def __get_path__(self, parent_pattern):
@@ -27,11 +28,15 @@ def __get_serializer_fields__(self):
2728
if hasattr(self.callback.cls, 'serializer_class') and hasattr(self.callback.cls.serializer_class, 'get_fields'):
2829
serializer = self.callback.cls.serializer_class
2930
if hasattr(serializer, 'get_fields'):
30-
fields = [{
31-
"name": key,
32-
"type": str(field.__class__.__name__),
33-
"required": field.required
34-
} for key, field in serializer().get_fields().items()]
31+
try:
32+
fields = [{
33+
"name": key,
34+
"type": str(field.__class__.__name__),
35+
"required": field.required
36+
} for key, field in serializer().get_fields().items()]
37+
except KeyError as e:
38+
self.errors = e
39+
fields = []
3540

3641
# FIXME:
3742
# Show more attibutes of `field`?

rest_framework_docs/static/less/style.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ body {
8686

8787
.panel-body {
8888
padding: 0;
89+
90+
.alert {
91+
padding: 5px 10px;
92+
margin-top: 10px;
93+
}
8994
}
9095

9196
> .panel-heading +.panel-collapse > .panel-body { border: 0; }

rest_framework_docs/templates/rest_framework_docs/home.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,18 @@ <h4 class="panel-title title">
4848

4949
<div id="{{ endpoint.path|slugify }}" class="panel-collapse collapse" role="tabpanel">
5050
<div class="panel-body">
51+
{% if endpoint.errors %}
52+
<div class="alert alert-danger" role="alert">Oops! There was something wrong with {{ endpoint.errors }}. Please check your code.</div>
53+
{% endif %}
54+
5155
{% if endpoint.fields %}
5256
<p>Fields:</p>
5357
<ul class="list fields">
5458
{% for field in endpoint.fields %}
5559
<li class="field">{{ field.name }}: {{ field.type }} {% if field.required %}<span class="label label-primary label-required" title="Required">R</span>{% endif %}</li>
5660
{% endfor %}
5761
</ul>
58-
{% else %}
62+
{% elif not endpoint.errors %}
5963
<p>No fields.</p>
6064
{% endif %}
6165
</div>

runtests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def run_tests_coverage():
4444
cov.stop()
4545
cov.save()
4646
cov.report()
47-
# cov.html_report(directory='covhtml')
47+
cov.html_report(directory='covhtml')
4848

4949
exit_on_failure(flake8_main(FLAKE8_ARGS))
5050
exit_on_failure(run_tests_coverage())

0 commit comments

Comments
 (0)