Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

A simple solution for generating Typescript interfaces from your Django Rest Framework Serializers.

Project description

django-typomatic

A simple solution for generating Typescript interfaces from your Django Rest Framework Serializers.

Since I now require a simple package to generate Typescript interfaces for Django Rest Framework serializers, I've decided to port over my Typemallow package for use with DRF serializers!

Usage:

Using django-typomatic is just as simple!

First, install the package pip install django-typomatic

Next, for your Django Rest Framework serializers that you wish to generate Typescript interfaces for, simply import ts_interface and generate_ts from the django_typomatic module, and add the @ts_interface() class decorator to your Django Rest Framework serializer class.

All that is required to generate your Typescript interfaces is to call the generate_ts() function, and provide a filepath as a parameter to output the result.

main.py

from django_typomatic import ts_interface, generate_ts
from rest_framework import serializers


@ts_interface()
class Foo(serializers.Serializer):
    some_field = serializers.CharField()
    another_field = serializers.DateTimeField()


generate_ts('./output.ts')

output.ts

export interface Foo {
    some_field: string;
    another_field: date;
}

django-typomatic supports nested serializers, as well as list fields and other fields that act as lists (any field with many=True)

main.py

from django_typomatic import ts_interface, generate_ts
from rest_framework import serializers


@ts_interface()
class Foo(serializers.Serializer):
    some_field = serializers.IntegerField(many=True)
    another_field = serializers.CharField()


@ts_interface()
class Bar(serializers.Serializer):
    foo = Foo()
    foos = Foo(many=True)
    bar_field = serializers.CharField()

output.ts

export interface Foo {
    some_field: number[];
    another_field: string;
}

export interface Bar {
    foo: Foo;
    foos: Foo[];
    bar_field: string;
}

Extended Usage:

The @ts_interface() decorator function accepts an optional parameter, context, which defaults to... well... 'default'.

"Why is this the case?"

When a Serializer is identified with with @ts_interface decorator, it is added to a list in a dictionary of serializers, with the dictionary key being the value provided to the context parameter. If you were to provide different contexts for each serializer, additional keys will be created if they do not exist, or the serializer will simply be appended to the list at the existing key.

This comes in handy, as the generate_ts() function also accepts an optional context parameter, which will filter only serializers in the dictionary at the specific key.

This is useful if you wish to output different contexts to different files, e.g.

main.py

...
from django_typomatic import ts_interface, generate_ts
from rest_framework import serializers


@ts_interface(context='internal')
class Foo(serializers.Serializer):
    foo = serializers.CharField()


@ts_interface(context='internal')
class Bar(serializers.Serializer):
    bar = serializers.CharField()


@ts_interface(context='external')
class FooBar(serializers.Serializer):
    foo_bar = serializers.CharField()


''' 
we're telling django-typomatic that we only want to generate interfaces from serializers with 
an 'internal' context to './internal.ts' 
'''
generate_ts('./internal.ts', context='internal')

''' 
only generate interfaces from serializers with an 'external' context to './external.ts' 
'''
generate_ts('./external.ts', context='external')

internal.ts

export interface Foo {
    foo: string;
}

export interface Bar {
    bar: string;
}

external.ts

export interface FooBar {
    foo_bar: string;
}

Project details


Release history Release notifications

Download files

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

Files for django-typomatic, version 0.0.1
Filename, size File type Python version Upload date Hashes
Filename, size django_typomatic-0.0.1-py3-none-any.whl (16.2 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size django-typomatic-0.0.1.tar.gz (3.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page