Gadfly! An SQL Database in Python

gadfly.py main module
gfserve.py main TCP/IP server mode
gfclient.py main TCP/IP client mode
gsocket.py client/server support module
gstest.py client/server test module
gfinstall.py installation script
gftest.py test suite
sqlbind.py grammar bindings
sqlgen.py grammar generation
sqlgram.py SQL grammar
sqlgtest.py grammar tests
sqlsem.py main semantic objects
sqlmod.py update semantic objects
gfdb0.py data and file archiving
relalg.py relational algebra interpreter (toy)
kjbuckets0.py base data structures (python version)
These are the core files to the Gadfly SQL database engine (beta). A relational database query engine that supports the Structured Query Language (SQL), implemented entirely in Python (with optional builtin support from the kjbuckets builtin data structure accelerator).
Gadfly has been tested on Windows 95, Windows NT, Linux, and Unix (solaris), and it should run anywhere that Python runs (bebox, maybe Palm Pilot/WinCE eventually...)
Supports transactions and recovery
Supports a LARGE subset of SQL
Supports client/server access via TCP/IP sockets.
Requires the kwParsing package (and included in it too).

kwParser, Python lint, IDL, etc...

kwParser is a parser generator for Python. It transforms an abstract specification of a language grammar (for example the CORBA Interface Definition Language) together with "interpretation functions" that define the semantics of the language into a compiler or translator or interpreter. In the case of CORBA IDL a python program using kwParser could generate stubs and support code (in Python or some other language) to talk to a CORBA interface.

The release given here has had some micro-optimizations (26 June 1997) which with luck don't break anything. In particular regexen are used more intelligently and the generation phase will use kjbuckets if it's available.

This is moderately heavy computer science. Not for the timid.

COPYRIGHT Do what you like, just don't sue me (roughly translated).
DLispShort.py A very simple example language specification.
DumbLispGen.py Another example specification
arefize.py (not related: simple program used to generate this page)
idl.py A very complex example: CORBA IDL parser generator. This is a good example of a complex grammar. The interpretation functions and terminal regexes are all stubbed.
pygram.py A very complex example: The python grammar. This module uses a hand written lexer to handle Python's beautiful peculiarities. Used by kypylint.py.
Look at the top of the module for editable parameters.
kjpylint.py An attempt to use the pygram parser to do simple checking on python source files. Reports references not set, assignments not used, etcetera. not all warnings indicate real problems of course. Used like this:
% python kjpylint.py /home/app/arw/Python-1.5a1/Lib/SocketServer.py
setup
loading
now parsing
(verify_request) 'request' defined before 225 not used
(verify_request) 'self' defined before 225 not used
(verify_request) 'client_address' defined before 225 not used
(handle_error) 'request' defined before 245 not used
(handle_error) 'self' defined before 245 not used
(collect_children) 'status' defined before 293 not used
(setup) 'self' defined before 368 not used
(__del__) 'self' defined before 371 not used
(handle) 'self' defined before 374 not used
(finish) 'self' defined before 377 not used
() '__version__' defined before 104 not used
269: (qref) 'max_packet_size' not defined in module?
Here only the last line indicates a possible real bug in SocketServer.py
Bugs/Features:
Barfs on inconsistent indentation (ie space-tab is not the same as tab).
Grumpy about one line for loops and lambdas.
For very weird cases may not parse strings correctly.
See top of module for more info.
Right now kjpylint might like to see an extra newline at the end of the file. I'll look into this, sorry.

Latest: Thu Jul 17 13:50:03 EDT 1997
kjParseBuild.py The Parser generator module, used only to generate the data structures required for parsing.
kjParser.py The Parser module, used both during the generation phase and also after generation when the generated parser is used.
kwParsing.html HTML documentation for the package.
kjSet.py support module for parser generation. (uses kjbuckets builtin if available, or uses a straight Python implementation if not.)
kwP.tar.gz The package (tarred, gzipped)
kwParsing parser generator related files.
humble servant

Not speaking for the "pros".