Skip to main content

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: myprovidermod.py
import reddel_server

class MyProvider(reddel_server.ProviderBase)
    @reddel_server.red_src()
    @reddel_server.red_validate([reddel_server.OptionalRegionValidator(),
                                 reddel_server.SingleNodeValidator(),
                                 reddel_server.TypeValidator(["def"])])
    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.

Installation

At the command line:

pip install reddel-server

Usage

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]

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.

Documentation

https://reddel-server.readthedocs.io/

Bugs/Requests

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

Development

To run the all tests run:

tox

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

Windows

set PYTEST_ADDOPTS=--cov-append
tox

Other

PYTEST_ADDOPTS=--cov-append tox

License

Copyright David Zuber, 2016.

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

Changelog

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.

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

reddel-server-0.2.0.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

reddel_server-0.2.0-py2.py3-none-any.whl (23.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file reddel-server-0.2.0.tar.gz.

File metadata

File hashes

Hashes for reddel-server-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4a6e65833e123fbfe14204f52df808c2c0d7c15d51efea2d0b3dd3c16be3151d
MD5 fa1369022352c8830626ee26822b9a8d
BLAKE2b-256 420c55ec823738ae1e6e8beb1c179e5d1459c5cd86561daec310d8e50fcb19f2

See more details on using hashes here.

File details

Details for the file reddel_server-0.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for reddel_server-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a89b19411e1989d227fd2775df9a5cbc06d87ec9e357700a92ffd99701675a09
MD5 60e00dc805e41b3469f3740b7e4ba45a
BLAKE2b-256 a20a648a61dab66267e25574221f8c8a49acf37fb09e886c7608c55d6bbaa0aa

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