Development — Products.ZMySQLDA 4.0b2.dev0 documentation

# Development

## Getting the source code

The source code is maintained on GitHub. To check out the trunk:

    $ git clone https://github.com/zms-publishing/Products.ZMySQLDA.git

You can also browse the code online at https://github.com/zms-publishing/Products.ZMySQLDA

## Bug tracker

For bug reports, suggestions or questions please use the GitHub issue tracker at https://github.com/zms-publishing/Products.ZMySQLDA/issues.

## Running the tests using `zc.buildout`

`Products.ZMySQLDA` ships with its own `buildout.cfg` file and `bootstrap.py` for setting up a development buildout:

    $ python bootstrap.py
    ...
    Generated script '.../bin/buildout'
    $ bin/buildout
    ...

Once you have a buildout, the tests can be run as follows:

    $ bin/test
    Running tests at level 1
    Running zope.testrunner.layer.UnitTests tests:
      Set up zope.testrunner.layer.UnitTests in 0.000 seconds.
      Running:
    ..............................................................
      Ran 62 tests with 0 failures and 0 errors in 0.043 seconds.
    Tearing down left over layers:
      Tear down zope.testrunner.layer.UnitTests in 0.000 seconds.

To run tests for all supported Python versions, code coverage and a PEP-8 coding style checker, you can use `tox` after completing the buildout step above:

    $ bin/tox
    GLOB sdist-make: ...
    ...
    ____________________________________ summary _____________________________________
    py27: commands succeeded
    py27_zope213: commands succeeded
    py35: commands succeeded
    py36: commands succeeded
    flake8: commands succeeded
    coverage: commands succeeded
    congratulations :)

## Running the functional tests

Some tests are hard or even impossible to perform without a real running database backend. During a normal test run they will be skipped, and you will see output like this:

    Total: 62 tests, 0 failures, 0 errors and 5 skipped in 0.090 seconds.

To run those functional tests you need to have a MySQL/MariaDB server running and listening on the standard unix socket, normally located at `/tmp/mysl.sock`. This database server must have a database named `zmysqldatest` that can be accessed by a user `zmysqldatest` with password `zmysqldatest`. To set this up, log into the running database server with an admin user and execute the following statements:

    mysql> CREATE DATABASE IF NOT EXISTS zmysqldatest;
    mysql> CREATE USER 'zmysqldatest'@'localhost' IDENTIFIED BY 'zmysqldatest';
    mysql> GRANT ALL PRIVILEGES ON zmysqldatest.* TO 'zmysqldatest'@'localhost';

If everything worked you’ll see test output like this:

    Total: 62 tests, 0 failures, 0 errors and 0 skipped in 0.105 seconds.

If the functional tests are still skipped, uncomment the `print` call in the `_mySQLNotAvailable` function in the module `Products.ZMySQLDA.tests.base`. It will print any errors emitted by the database server.

## Building the documentation using `zc.buildout`

The `Products.ZMySQLDA` buildout installs the Sphinx scripts required to build the documentation, including testing its code snippets:

    $ cd docs
    $ make html
    ...
    build succeeded.

    The HTML pages are in _build/html.

## Making a release

These instructions assume that you have a development sandbox set up using `zc.buildout` as the scripts used here are generated by the buildout.

    $ bin/buildout -N
    $ python setup.py sdist bdist_wheel upload --sign

The `bin/buildout` step will make sure the correct package information is used.