Skip to main content

walax is a Javascript framework for interacting with objects remotely via Django.

Project description

Welcome to walax 👋

Version License: MIT

walax : django :: django : sql

Walax is a Javascript framework for interacting with objects remotely via Django. The goal is to provide a 'batteries-included' library for easily creating front-end applications, which automatically consumes and instantiates its interface from CoreAPI-compatible remote.

While other implementations should be possible, walax was designed and tested using Django and DRF (see the example records Django project for a simple working configuration).

🏠 Homepage

Walax is meant to provide all the scaffolding for a fully-featured client-side application with API backing; as such, it encompasses an array of common functionality, and attempts to present them in an integrated fashion. It includes a Django API for simple server configuration.

Walax has two main dependencies:

  • mithril: view components and routing, as well as XHR
  • mobx: state management

Both libraries are small, fast, and provide (in the author's opinion ;) powerful, un-intrusive access to critical features required by an SPA; walax is therefore opinionated on these choices. (You can use just the object system with whatever state/display/routing library you like, but these are used internally by walax, and are included in the exposed interface.)

For now, here are some examples of the walax API:

Examples

// Javascript 
import w from Walax
w.initialize()
w.load('/api')

# Python
from django.urls import path, include
from walax.routers import WalaxRouter
from .models import MODELS
router = WalaxRouter()
for model in MODELS:
    router.register_model(model)
...
urlpatterns += path('api/', include(router.urls))

Making remote requests

w.net.get('/records/api/?format=openapi-json')

w.net.delete('/api/endpoint/', {id: 23})

w.net.post('/some/form/somewhere', {}, '<request body goes here>')

Logging

w.log.info('just fyi', someVar)

w.log.error('oh dear')  // will throw an exception

w.log.fatal('i give up')  // terminates 

w.log.assert(1>2, 'math stopped working')  // asserts

let a = new Band()
a.name = 'Beatles'
a.d('band-specific debug message')
// logs: "Band: Beatles", 'band-specific debug message')

Objects (remote API)

let Band = w.obj.records.Band

let beatles = new Band()
beatles.name = 'Beatles'
// actually sets an integer from a Django `choices` field
beatles.genre = 'Rock' 
beatles.save()

for (let band in Band.objects.all()) {
    // ...
}

Miscellaneous batteries

class a extends WalaxEntity {}
class b extends a {}
class c extends b {}
let d = new c()
if (w.checkClass(d, a)) { /*...*/ }

w.augment(d, 'prop', () => 1, x => console.log('set'))
d.prop // returns 1

d.d('debugging info', data)
d.e('error message')  // throws a TypeError
d.a(false, 'assertion failed')
d.i('this is just information')

Django setup

django-admin startproject example
pip3 install walax
# TODO

Author

👤 Matt Barry matt@hazelmollusk.org

Show your support

Give a ⭐️ if this project helped you!


This README was generated with ❤️ by readme-md-generator

Project details


Download files

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

Source Distribution

walax-1.1.4.tar.gz (6.8 kB view hashes)

Uploaded Source

Built Distribution

walax-1.1.4-py3-none-any.whl (8.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page