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; }