<br>I&#39;m pleased to announce the kick-off of acute-dbapi, a DB-API compliance test suite.&nbsp; Acute is still in it&#39;s infancy, but it&#39;s reached the level of maturity that it would benefit from community input.&nbsp; It currently contains 71 tests, and many more will be added soon.
<br><br>Comments, suggestions, and patches are all warmly welcome.&nbsp; Harsh criticism can wait until the 1.0 release, however.&nbsp; There are several TODOs listed in the TODO file, and many more generously sprinkled throughout the code; if you&#39;d like to help out but don&#39;t know where to begin, feel free to take a crack at one of them!
<br><br><br>From the README:<br><br>== Introduction ==<br>acute-dbapi is a testsuite for Python database drivers to check their compliance against the DB-API 2.0 standard (PEP 249).&nbsp; It is also intended to test common implementation features that haven&#39;t yet found their way into DB-API specification.&nbsp; Acute was was originally derived from Stuart Bishop&#39;s DBAPI20TestSuite `[1]`, and it&#39;s name stands for &quot;Anal Compliance Unit Test Environment,&quot; which is a tip-of-the-hat to Stuart, who described his testsuite in those terms `[2]`.
<br><br>Acute-dbapi is very much a work in progress.&nbsp;&nbsp; Feel free to contribute patches for anything you see that&#39;s out of place!<br><br><br>== Usage ==<br>To use, first checkout the current trunk:<br>svn co <a href="https://acute-dbapi.googlecode.com/svn/trunk" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

https://acute-dbapi.googlecode.com/svn/trunk</a> acute-dbabpi<br><br>Then cd to acute-dbapi/acute and update config.py to match your database driver, the database name to use &amp; your credentials for that database.<br>
<br>
You&#39;re then ready to run the testsuite with:<br>python test-dbapi.py<br><br>== Adding Support for Drivers ==<br>acute-dbapi currently supports pysqlite2, MySQLdb, and psycopg2.&nbsp; There are reports on driver functionality at the project&#39;s &quot;wiki&quot; as DriverFeatures `[3]` and TestResults `[4]`.
<br><br>There is a list of driver-supported features in &quot;features.py&quot;.&nbsp;&nbsp; A set of class attributes on the `SupportedFeatures` class define the default, expected, behavior for each feature.&nbsp;&nbsp; These are overridden for each driver in the initialization method of the class to specify any quirks of the driver&#39;s implementation.
<br><br>== Architecture ==<br>The testsuite is designed such that all tests are expected to pass when the driver&#39;s features are setup correctly in &quot;features.py&quot;.&nbsp; There are two mechanisms to support this:&nbsp; first, if a feature under test isn&#39;t supported by a driver, then that test will still be run but will be converted to an &#39;Unsupported&#39; status upon failure; if the test succeeds despite the fact that the driver is declared to not support the feature, then the second mechanism kicks in and the testsuite raises an `UnexpectedSuccess` error.&nbsp; The only tests that will be skipped are those that are under active development (these are the tests that are declared with @require(&#39;amiracle&#39;)).&nbsp;&nbsp; This setup makes it simpler to track which tests are truly in error versus the known failings of the driver.
<br><br>Tests that are under active development will be skipped.&nbsp; These tests are declared with a @require(&#39;amiracle&#39;) decorator.<br><br><br>== Philosophy ==<br>&nbsp; * Extensive unit tests improve code quality, allow developers to be more courageous in making aggressive changes, and improve user&#39;s ability to provide bug feedback.
<br>&nbsp; * Sharing applicable tests between projects strengthens standards and saves time when developing new compliant modules.<br>&nbsp; * The &quot;least common denominator&quot; approach of the DB-API 2.0 standard was necessary in Python&#39;s infancy, but technologies have matured to the point where further possibilities for standardization exist.&nbsp; Common features that haven&#39;t reached ubiquity should be made optional, not simply ignored or too lightly left as an &quot;implementation extension.&quot;&nbsp; The same process has occurred with SQL -- SQL 89 was very light, SQL 92 introduced conformance levels, and SQL 1999 greatly expanded on them. `[5]`
<br><br><br>== Finally ==<br><br>The project&#39;s homepage is at: <a href="http://code.google.com/p/acute-dbapi/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://code.google.com/p/acute-dbapi/
</a>.<br><br>acute-dbapi is licensed under the MIT license (see LICENSE).
<br><br>enjoy!<br><br><br><br>==== Footnotes ====<br>&nbsp;*1 Stuart Bishop&#39;s DB-API test suite is available at <a href="http://stuartbishop.net/Software/DBAPI20TestSuite/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://stuartbishop.net/Software/DBAPI20TestSuite/
</a>.<br><br>&nbsp;*2 The initial thread on Stuart Bishop&#39;s tests is at <a href="http://mail.python.org/pipermail/db-sig/2003-February/003116.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.python.org/pipermail/db-sig/2003-February/003116.html
</a>.&nbsp; There were several separate threads on the topic, so be sure to review all of February, March, and April 2003&#39;s archives as well (
<a href="http://mail.python.org/pipermail/db-sig/2003-February" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.python.org/pipermail/db-sig/2003-February</a>).&nbsp;&nbsp;&nbsp;&nbsp; Here&#39;s a bit of humor taken from one of the earlier threads:
<br><br>&nbsp; &quot;Now we have booze and barflies entering the discussion,&nbsp; plus rumours of
<br>&nbsp; DBAs on drugs... and I won&#39;t tell you what flashes through my mind each<br>&nbsp; time I read the subject line with &#39;Anal Compliance&#39; in it.&nbsp; All around<br>&nbsp; this is turning out to be a thoroughly unwholesome unit test.&quot; -- Ian Bicking
<br><br>&nbsp;*3 <a href="http://code.google.com/p/acute-dbapi/wiki/DriverFeatures" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://code.google.com/p/acute-dbapi/wiki/DriverFeatures</a><br><br>&nbsp;*4 
<a href="http://code.google.com/p/acute-dbapi/wiki/TestResults" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://code.google.com/p/acute-dbapi/wiki/TestResults
</a><br><br>&nbsp;*5 <a href="http://www.postgresql.org/docs/8.2/static/features.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.postgresql.org/docs/8.2/static/features.html</a><br><br>
<br><br>Thanks!<br>-Ken<br><br>