Skip to content

Commit

Permalink
Fix duration field inspector
Browse files Browse the repository at this point in the history
- Durations should be represented as an `openapi.TYPE_STRING` so swagger
  and other tools do not prevent valid input ("00:10:00" is valid, but
  not a number)

See:

https://www.django-rest-framework.org/api-guide/fields/#durationfield and
https://docs.djangoproject.com/en/3.0/ref/utils/#django.utils.dateparse.parse_duration
  • Loading branch information
terencehonles committed Sep 24, 2021
1 parent effc8f2 commit f5b0cb8
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/drf_yasg/inspectors/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ def decimal_field_type(field):
(models.DateTimeField, (openapi.TYPE_STRING, openapi.FORMAT_DATETIME)),
(models.DateField, (openapi.TYPE_STRING, openapi.FORMAT_DATE)),
(models.DecimalField, (decimal_field_type, openapi.FORMAT_DECIMAL)),
(models.DurationField, (openapi.TYPE_INTEGER, None)),
(models.DurationField, (openapi.TYPE_STRING, None)),
(models.FloatField, (openapi.TYPE_NUMBER, None)),
(models.IntegerField, (openapi.TYPE_INTEGER, None)),
(models.IPAddressField, (openapi.TYPE_STRING, openapi.FORMAT_IPV4)),
Expand All @@ -407,7 +407,7 @@ def decimal_field_type(field):
(serializers.IntegerField, (openapi.TYPE_INTEGER, None)),
(serializers.FloatField, (openapi.TYPE_NUMBER, None)),
(serializers.DecimalField, (decimal_field_type, openapi.FORMAT_DECIMAL)),
(serializers.DurationField, (openapi.TYPE_NUMBER, None)), # ?
(serializers.DurationField, (openapi.TYPE_STRING, None)),
(serializers.DateField, (openapi.TYPE_STRING, openapi.FORMAT_DATE)),
(serializers.DateTimeField, (openapi.TYPE_STRING, openapi.FORMAT_DATETIME)),
(serializers.ModelField, (openapi.TYPE_STRING, None)),
Expand Down

0 comments on commit f5b0cb8

Please sign in to comment.