New Sub-packages and Modules¶
When adding new packages and modules (which map to folders and files)
to the library you are required to update both the build/install
system (setup.py
) and add files to the documentation folder.
All python source code must be under the main skbeam
directory.
Non-python sources goes in the src
directory.
Build¶
For a folder in the source-tree to be a package it must have an
__init__.py
file (even if it is empty). All of the python
(*.py
) files in that package are then recognized as modules in
that package which can be imported in other files (See Relative Imports header).
In order for distutils
to work it must be explicitly told what
packages from the source tree to byte-compile and install. This is
done via the packages
key word argument (kwarg) to setup()
in
setup.py
. If you add a package, then it’s dotted-name must be
added to this list.
e.g. if you add a new package called utils
to the skbeam
folder,
the following setup.py file:
setup(
name='scikit-beam',
version='0',
author='Brookhaven National Lab',
packages=["skbeam"],
)
would need to be modified to:
setup(
name='scikit-beam',
version='0',
author='Brookhaven National Lab',
packages=["skbeam", "skbeam.utils"], <------- modification happened here
)
Documentation¶
See Documentation for documentation about writing and building the documentation.
Continuing the example from above where a ‘utils’ source code package was added,
a folder called /doc/resource/api/utils
should be added. Let’s also
presume that you’ve got fitting.py
in the /skbeam/utils/
. In the
documentation /doc/resource/api/utils
folder, create a file named
index.rst
with the contents:
UTILS API
=========
Contents:
.. toctree::
:maxdepth: 2
fitting
Also, add the /doc/resource/api/utils/index.rst
to
/doc/resource/api/index.rst
. This will tell sphinx
to include
the new package in the API documentation.
Now, let’s create a module called fitting.py
in the utils
package. When you add fitting.py
you need to add a corresponding file
in the documentation folder structure:
/doc/resource/api/utils/fitting.rst
. In fitting.rst
use the
following template:
======================
:mod:`fitting` Module
======================
Any prose you want to add about the module, such as examples, discussion,
or saying hi to your mom can go here.
.. automodule:: skbeam.core.fitting
:members:
:show-inheritance:
:undoc-members:
This will automatically walk the module to extract and format the doc strings of all the classes and functions in the module.
Testing¶
When you add a new module or package please add the corresponding
files and folders in the skbeam/tests
folder. Packages get
test_packagename
and modules get test_module_name.py
in the proper directory.
Using the example above, you would create the directory
/skbeam/tests/test_utils/
and the file test_fitting.py
in the
test_utils
folder.
Remember: Write a test for all new functionality!!
Relative Imports¶
See the issue (#?) in the scikit-beam repo on github.