Table of Contents
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.
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] 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.
https://reddel-server.readthedocs.io/
Please use the GitHub issue tracker to submit bugs or request features.
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 |
Copyright David Zuber, 2016.
Distributed under the terms of the GNU General Public License version 3, reddel-server is free and open source software.