Generates Python C API code in order to aid in C extension development.
Copyright (c) 2009 Rasmus Andersson. Licensed under MIT.
General usage:
Usage: pyca [options] COMMAND [ARGS] Commands: help Display help about a certain command or pyca itself. init Create and initialize a new project. show Generate and display Python C code. Options: --version show program's version number and exit -h, --help show this help message and exit -q, --quiet Don't print status messages to stdout
Usage: pyca init [options] <name> [<path>]
Create and initialize a new project.
If <path> is not specified it defaults to './' + <name>
Options:
-h, --help show this help message and exit
--dry-run Simulate but don't actually do anything.
-t <title>, --title=<title>
Human-readable title of project. Defaults to <name>.
-a <author>, --author=<author>
Author of the project. If not set, author will be
guessed.
-u <url>, --url=<url>
URL pointing to more information.
-y <year>, --year=<year>
Copyright year. Defaults to 2009
-l <license>, --license=<license>
Software license. Defaults to 'mit' (for a list of
available licenses, see contents of directory
<pycadir>/skeleton/licenses)
Usage: pyca show <signature>
pyca show <type> <signature> [<type> <signature> ...]
Generate and display Python C code.
Examples:
Show a function:
pyca show 'mymod.myfunc(myarg1, myarg2)'
Show a function (with type hinting):
pyca show 'mymod.myfunc(i size, s message = "hello")'
Show a method and a function:
pyca show meth 'mymod.MyClass.mymeth(i size, s message = "hello")'\
func 'mymod.myfunc(i size, s message = "hello")'
Show a static method:
pyca show smeth 'mymod.MyClass.mymeth(i size, s message = "hello")'
Type hinting is (optionally) performed by adding a PyArg_Parse symbol in front
of arguments.
Options:
-h, --help show this help message and exit
$ ./pyca init fluffy_hamster Creating new project 'fluffy_hamster' in '/Users/rasmus/src/pyca/fluffy_hamster' PROJECT_AUTHOR => 'Rasmus Andersson <rasmus@hidden.email>' PROJECT_AUTHOR_EMAIL => 'rasmus@hidden.email' PROJECT_AUTHOR_NAME => 'Rasmus Andersson' PROJECT_MODULE => 'fluffy_hamster' PROJECT_MODULE_UPPER => 'FLUFFY_HAMSTER' PROJECT_TITLE => 'fluffy_hamster' PROJECT_URL => '' PROJECT_YEAR => '2009' dir fluffy_hamster cpy fluffy_hamster/.gitignore cpy fluffy_hamster/CHANGELOG.rst dir fluffy_hamster/docs dir fluffy_hamster/docs/source dir fluffy_hamster/docs/source/_static cpy fluffy_hamster/docs/source/_static/info.png cpy fluffy_hamster/docs/source/_static/jump.png cpy fluffy_hamster/docs/source/_static/screen.css dir fluffy_hamster/docs/source/_templates sub 2 fluffy_hamster/docs/source/_templates/layout.html sub 4 fluffy_hamster/docs/source/conf.py sub 1 fluffy_hamster/docs/source/index.rst dir fluffy_hamster/docs/source/library sub 1 fluffy_hamster/docs/source/library/index.rst sub 3 fluffy_hamster/docs/source/library/fluffy_hamster.rst dir fluffy_hamster/lib dir fluffy_hamster/lib/fluffy_hamster sub 3 fluffy_hamster/lib/fluffy_hamster/__init__.py cpy fluffy_hamster/lib/fluffy_hamster/release.py dir fluffy_hamster/lib/fluffy_hamster/test sub 2 fluffy_hamster/lib/fluffy_hamster/test/__init__.py cpy fluffy_hamster/MANIFEST.in sub 1 fluffy_hamster/README.rst sub 10 fluffy_hamster/setup.py dir fluffy_hamster/src sub 19 fluffy_hamster/src/__init__.c sub 3 fluffy_hamster/src/__init__.h sub 4 fluffy_hamster/src/_macros.h cpy fluffy_hamster/src/util.c sub 2 fluffy_hamster/src/util.h sub 1 fluffy_hamster/test-working sub 2 fluffy_hamster/LICENSE $ cd fluffy_hamster/ $ ./test-working ./test-working: Building and testing with Python 2.4 ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK ./test-working: Building and testing with Python 2.5 ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK ./test-working: Building and testing with Python 2.6 ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK ./test-working: Building and testing with Python 3.0 ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK
Note that you do not need to have any existing project in order to use the
show command, as is simply parses signatures and generates Python C code
just-in-time.
$ pyca show meth 'mymod.SomeClass.echo(s msg, i times=3, s# prefix = "")'
> docs/source/mymod.SomeClass.echo.rst:
.. method:: echo(msg, times=3, prefix="")
> src/mymod_SomeClass.h:
/**
* @param const char *msg
* @param int times = 3
* @param const char *prefix = ""
*/
PyObject *mymod_SomeClass_echo(PyObject *self, PyObject *args, PyObject *kwargs);
> src/mymod_SomeClass.c:
/**
* mymod.SomeClass.echo(s msg, i times=3, s# prefix = "")
*/
PyObject *mymod_SomeClass_echo(PyObject *self, PyObject *args, PyObject *kwargs) {
const char *msg = NULL;
int times = 3;
const char *prefix = "";
int prefix_length = 0;
static char *kwlist[] = {"msg", "times", "prefix", NULL};
/* Parse arguments */
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|is#:echo", kwlist,
&msg, ×, &prefix, &prefix_length))
{
return NULL;
}
/* TODO: implementation */
PyErr_SetString(PyExc_NotImplementedError, "mymod.SomeClass.echo");
return NULL;
}