mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-28 04:24:00 +03:00
Add support for ipaddress objects in JSONEncoder
This commit is contained in:
parent
337ba211e8
commit
afdcf5c92d
|
@ -5,6 +5,7 @@ Helper classes for parsers.
|
||||||
import contextlib
|
import contextlib
|
||||||
import datetime
|
import datetime
|
||||||
import decimal
|
import decimal
|
||||||
|
import ipaddress
|
||||||
import json # noqa
|
import json # noqa
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
@ -45,6 +46,15 @@ class JSONEncoder(json.JSONEncoder):
|
||||||
return float(obj)
|
return float(obj)
|
||||||
elif isinstance(obj, uuid.UUID):
|
elif isinstance(obj, uuid.UUID):
|
||||||
return str(obj)
|
return str(obj)
|
||||||
|
elif isinstance(obj, (
|
||||||
|
ipaddress.IPv4Address,
|
||||||
|
ipaddress.IPv6Address,
|
||||||
|
ipaddress.IPv4Network,
|
||||||
|
ipaddress.IPv6Network,
|
||||||
|
ipaddress.IPv4Interface,
|
||||||
|
ipaddress.IPv6Interface)
|
||||||
|
):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, QuerySet):
|
elif isinstance(obj, QuerySet):
|
||||||
return tuple(obj)
|
return tuple(obj)
|
||||||
elif isinstance(obj, bytes):
|
elif isinstance(obj, bytes):
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import ipaddress
|
||||||
from datetime import date, datetime, timedelta, timezone
|
from datetime import date, datetime, timedelta, timezone
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
@ -78,6 +79,48 @@ class JSONEncoderTests(TestCase):
|
||||||
unique_id = uuid4()
|
unique_id = uuid4()
|
||||||
assert self.encoder.default(unique_id) == str(unique_id)
|
assert self.encoder.default(unique_id) == str(unique_id)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv4address(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv4Address object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv4Address("192.168.1.1")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv6address(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv6Address object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv4network(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv4Network object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv4Network("192.0.2.8/29")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv6network(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv4Network object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv6Network("2001:4860:0000::0000/32")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv4interface(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv4Interface object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv4Interface("192.0.2.8/29")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
|
def test_encode_ipaddress_ipv6interface(self):
|
||||||
|
"""
|
||||||
|
Tests encoding ipaddress IPv4Network object
|
||||||
|
"""
|
||||||
|
obj = ipaddress.IPv6Interface("2001:4860:4860::8888/32")
|
||||||
|
assert self.encoder.default(obj) == str(obj)
|
||||||
|
|
||||||
@pytest.mark.skipif(not coreapi, reason='coreapi is not installed')
|
@pytest.mark.skipif(not coreapi, reason='coreapi is not installed')
|
||||||
def test_encode_coreapi_raises_error(self):
|
def test_encode_coreapi_raises_error(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user