Skip to main content

camel-case-async-middleware

Camel case JSON support for Django REST framework.

This is a fork of djangorestframework-camel-case by Vitaly Babiy. The renderers, parsers, and case-conversion utilities are unchanged; the only functional difference is that CamelCaseMiddleWare is now async-capable (async_capable = True), so it no longer forces Django to fall back to async_to_sync for the whole middleware chain when the downstream handler is an async view. See HISTORY.rst for details on why this matters.

Installation

At the command line:

$ pip install camel-case-async-middleware

Add the render and parser to your django settings file.

# ...
REST_FRAMEWORK = {

    'DEFAULT_RENDERER_CLASSES': (
        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
        'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
        # Any other renders
    ),

    'DEFAULT_PARSER_CLASSES': (
        # If you use MultiPartFormParser or FormParser, we also have a camel case version
        'djangorestframework_camel_case.parser.CamelCaseFormParser',
        'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',
        'djangorestframework_camel_case.parser.CamelCaseJSONParser',
        # Any other parsers
    ),
}
# ...

Add query param middleware to django settings file.

# ...
MIDDLEWARE = [
    # Any other middleware
    'djangorestframework_camel_case.middleware.CamelCaseMiddleWare',
]
# ...

Swapping Renderer

By default the package uses rest_framework.renderers.JSONRenderer. If you want to use another renderer, the two possible are:

drf_orjson_renderer.renderers.ORJSONRenderer or drf_ujson.renderers.UJSONRenderer or rest_framework.renderers.UnicodeJSONRenderer for DRF < 3.0,specify it in your django settings file. settings file.

# ...
JSON_CAMEL_CASE = {
    'RENDERER_CLASS': 'drf_orjson_renderer.renderers.ORJSONRenderer'
}
# ...

Underscoreize Options

No Underscore Before Number

As raised in this comment there are two conventions of snake case.

# Case 1 (Package default)
v2Counter -> v_2_counter
fooBar2 -> foo_bar_2

# Case 2
v2Counter -> v2_counter
fooBar2 -> foo_bar2

By default, the package uses the first case. To use the second case, specify it in your django settings file.

REST_FRAMEWORK = {
    # ...
    'JSON_UNDERSCOREIZE': {
        'no_underscore_before_number': True,
    },
    # ...
}

Alternatively, you can change this behavior on a class level by setting json_underscoreize:

from djangorestframework_camel_case.parser import CamelCaseJSONParser
from rest_framework.generics import CreateAPIView

class NoUnderscoreBeforeNumberCamelCaseJSONParser(CamelCaseJSONParser):
    json_underscoreize = {'no_underscore_before_number': True}

class MyView(CreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer
    parser_classes = (NoUnderscoreBeforeNumberCamelCaseJSONParser,)

Ignore Fields

You can also specify fields which should not have their data changed. The specified field(s) would still have their name change, but there would be no recursion. For example:

data = {"my_key": {"do_not_change": 1}}

Would become:

{"myKey": {"doNotChange": 1}}

However, if you set in your settings:

REST_FRAMEWORK = {
    # ...
    "JSON_UNDERSCOREIZE": {
        # ...
        "ignore_fields": ("my_key",),
        # ...
    },
    # ...
}

The my_key field would not have its data changed:

{"myKey": {"do_not_change": 1}}

Ignore Keys

You can also specify keys which should not be renamed. The specified field(s) would still change (even recursively). For example:

data = {"unchanging_key": {"change_me": 1}}

Would become:

{"unchangingKey": {"changeMe": 1}}

However, if you set in your settings:

REST_FRAMEWORK = {
    # ...
    "JSON_UNDERSCOREIZE": {
        # ...
        "ignore_keys": ("unchanging_key",),
        # ...
    },
    # ...
}

The unchanging_key field would not be renamed:

{"unchanging_key": {"changeMe": 1}}

ignore_keys and ignore_fields can be applied to the same key if required.

Running Tests

To run the current test suite, execute the following from the root of he project:

$ python -m unittest discover

License

  • Free software: BSD license

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

camel_case_async_middleware-1.5.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

camel_case_async_middleware-1.5.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file camel_case_async_middleware-1.5.0.tar.gz.

File metadata

File hashes

Hashes for camel_case_async_middleware-1.5.0.tar.gz
Algorithm Hash digest
SHA256 0ef797586e6cde5b30657078c3997a17f22f465fa5db50f494fb7075307d13b2
MD5 077a1736086b81798b52b089db29bb98
BLAKE2b-256 ad441dbb8578b769f9fbeed4eed97d146b9deb416d9e944719bd4290271af1f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for camel_case_async_middleware-1.5.0.tar.gz:

Publisher: release.yml on zxzinn/djangorestframework-camel-case

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file camel_case_async_middleware-1.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for camel_case_async_middleware-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 62695276bfb1aff344fed84211955abbbdc81b735c675cce1991898706e5221f
MD5 201e3cf8a2e60cbc1428311230e70abc
BLAKE2b-256 d0315cec0bb3ee7a974df2bc2ac70194fc14200e64a4e2d7942d4dc0aa285bbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for camel_case_async_middleware-1.5.0-py3-none-any.whl:

Publisher: release.yml on zxzinn/djangorestframework-camel-case

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page