Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Python EPC server for reddel.

Project Description

Python EPC server component for reddel. It provides an easy way to send (python) source code from Emacs to the server, inspect or transform it via Redbaron and send the result back.

An example on how to expose a simple function to add arguments:

# file:
import reddel_server

class MyProvider(reddel_server.ProviderBase)
    def add_arg(self, red, start, end, index, arg):
        red.arguments.insert(index, arg)
        return red

Start the reddel server from Emacs:

>>> (require 'epc)

>>> (defvar my-epc (epc:start-epc "reddel" nil))

>>> ;; make sure myprovidermod is in a directory within the PYTHONPATH
>>> (epc:call-sync my-epc 'add_provider '("myprovidermod.MyProvider"))

>>> (message (epc:call-sync my-epc 'add_arg '("def foo(arg1, arg3): pass" nil nil 1 "arg2")))
"def foo(arg1, arg2, arg3): pass"

Redbaron provides a lossless format, so even formatting and comments are preserved.


At the command line:

pip install reddel-server


You can start a reddel server from within Emacs like shown above or start it from the command line. A executable reddel is provided by this project, which should suitable for most use cases.

$ reddel --help
Usage: reddel [OPTIONS]

  --address TEXT       address to bind the server to
  --port INTEGER       address to bind the server to
  -p, --provider TEXT  dotted path to a provider class
  -v, --verbosity LVL  Either CRITICAL, ERROR, WARNING, INFO or DEBUG
  --debug              Show tracebacks when erroring.
  --help               Show this message and exit.
--address TEXT Default is localhost. Can be an IP or domain name.
--port INTEGER Defaults to a random free port.
-p, --provider TEXT Example: mypkg.mymod.MyProviderClass You can provide this multiple times. Defines additional providers that are available from the start. More providers can be added at runtime via reddel_server.ChainedProvider.add_provider.
-v, --verbosity LVL Define the logging level.
--debug By default all expected exceptions are only logged without the traceback. If this flag is set, the traceback is printed as well.
--help Show the help message and exit.

Calling a function from within Emacs is very simple thanks to epc:

>>> (progn
...   (require 'epc)
...   (defvar my-epc (epc:start-epc "reddel" nil))
...   ;; list all methods compatible with the given source
...   (message (epc:call-sync my-epc 'list_methods '("def foo(arg1, arg3): pass"))))

(epc:start-epc "reddel" nil) starts the server by executing reddel without any arguments (nil). Then you can make calls to that server by referring to the manager returned from epc:start-epc. To execute a call, you can use (epc:call-sync <manager> <method> <arguments>), where <manager> is the manager returned by epc:start-epc, <method> is the function and <arguments> is a list of arguments passed to <method>.

The Builtin Functions section in the documentation provides a guide through all functions that ship with this package. If you need advanced features check the reference documentation for help on how to write your own server.


Please use the GitHub issue tracker to submit bugs or request features.


To run the all tests run:


Note, to combine the coverage data from all the tox environments run:

set PYTEST_ADDOPTS=--cov-append
PYTEST_ADDOPTS=--cov-append tox


Copyright David Zuber, 2016.

Distributed under the terms of the GNU General Public License version 3, reddel-server is free and open source software.


0.2.0 (2017-01-02)

  • You can optionally specify regions for methods that take in source code.
  • Restructure the validators into several small classes.

0.1.0 (2016-11-17)

  • First release on PyPI.

Release History

This version
History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(23.3 kB) Copy SHA256 Hash SHA256
Wheel any Jan 2, 2017
(44.7 kB) Copy SHA256 Hash SHA256
Source None Jan 2, 2017

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Kabu Creative Kabu Creative UX & Design Google Google Cloud Servers Fastly Fastly CDN StatusPage StatusPage Statuspage DigiCert DigiCert EV Certificate