Skip to main content

Django Introspection REST API.

Project description

Introduction

Django app that exposes some internals through a REST API. Intended for development tools comsumption.

The first objective is writing an emacs plugin that helps developing django apps.

Installation

To install from pypi just run pip install djira.

To install de development version clone the git repo:

git clone https://github.com/patxoca/djira.git

From a virtualenv (recommended), install the package in development mode:

cd djira
python setup.py develop

Configuration

Add djira to INSTALLED_APPS in your project’s config and include djira URLs in your root url definition:

urlpatterns = [
    ...
    url(r"^__djira__/", include("djira.urls")),
    ...
]

In order to test the installation start the development server and point a browser to http://localhost:8000/__djira__/__ping__/, this should display a pong response.

Calling an endpoint

As seen in the previous section, calling an endpoint is just a matter of executing a GET request on some URL.

Warning: djira provides a read-only API so it only accepts GET and HEAD requests.

In order to improve readability the output from the following examples has been prettyfied. Depending on the plugins you have enabled the output may be different.

$ curl http://localhost:8000/__djira__/__ping__/
"pong"

If you get no output make sure you have included the trailing slash in the URL.

The API can be queried to get details about the endpoints. The __list__ endpoint returns info about the registered endpoints:

$ curl http://localhost:8000/__djira__/__list__/
[
  {
    "name": "__list__",
    "description": "List available endpoints.",
    "parameters": {}
  },
  {
    "name": "__ping__",
    "description": "Test service availability.",
    "parameters": {}
  },
  {
    "name": "__version__",
    "description": "Get djira API version.",
    "parameters": {}
  },
  {
    "name": "get_model_info",
    "description": "Return a dict with info about the given model.",
    "parameters": {
      "description": "",
      "type": "schema",
      "extra": {
        "model_id": {
          "description": "Model name.",
          "type": "string",
          "required": true
        }
      }
    }
  },
  {
    "name": "get_models_names",
    "description": "Return a list with the models names.",
    "parameters": {}
  }
]

If the endpoint is omitted it is assumed to be __list__.

Arguments are passed in the query string:

$ curl http://localhost:8000/__djira__/get_model_info/?model_id=FooBarModel
{
  "name": [
    "FooBarModel"
  ],
  "verbose_name": "Some descriptive text",
  "fields": [
    {
      "name": "my_field",
      "type": "int"
    }
  ]
}

Available endpoints

Only the __list__, __ping__ and __version__ endpoints are guaranteed to be available, the remaining endpoints (including those provided by djira itself) are implemented as plugins and can be replaced or removed on a per project basis.

Plugins

I want djira to be easily extensible so you can add your own endpoints to the API without getting a headache.

djira uses pluggy in order to manage the plugins.

Writing plugins

Take a look at the hookspec.py module to see what the current specification of the plugin API is.

Take a look at the demo.py module for an example.

Take a look at the pluggy docs for extra details.

Warning: endpoints with dunder names are reserved for internal usage.

Loading plugins

In order to discover and load plugins djira implements two plugin loaders:

  • entry_points: loads all plugins declared in a djira entry point. Load order is undefined. This is the default loader.

  • django_config: loads all plugins listed in the enabled_plugins configuracion option. This loader gives finer control on what plugins are loaded on what order at the expense of increased verbosity.

The plugin loader is configured in settings.py:

DJIRA = {
    "plugin_loader": "djira.plugin_loader.django_config",
    "enabled_plugins": ["djira.demo"],
}

This example enables the djira.demo plugin.

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

djira-0.2.1.tar.gz (33.6 kB view details)

Uploaded Source

Built Distribution

djira-0.2.1-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file djira-0.2.1.tar.gz.

File metadata

  • Download URL: djira-0.2.1.tar.gz
  • Upload date:
  • Size: 33.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.4

File hashes

Hashes for djira-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9f591cf2d3921af8850eb6f99fd9466a71c3d85de99bf1d3b33058a170f5af0c
MD5 ec8e8a57c74df15fed5af422ce1ccee2
BLAKE2b-256 581e3460b55ffb484b5eec953b56945ea980e0f0ce6868dea8bc0ea441b9113c

See more details on using hashes here.

File details

Details for the file djira-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: djira-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.4

File hashes

Hashes for djira-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8266d76de8fbbc9239a6b7906bd60a2b984bce4db922238d86da866baa9ed4f9
MD5 99b21703e4cd40ab8a41a1f92705594f
BLAKE2b-256 63cc81e481c3d9f92928566d2b56b8c326f4fb88b62d736f593c9b348312c28a

See more details on using hashes here.

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