Creating a New Orion Package

The easiest way to start a new package containing Cubes and Floes is to use the template for Orion packages provided on GitHub). This template will provide a consistent starting point for creating cubes and floes as well as set up helpful tools like running tests and building documentation.

See Floe’s Orion integration documentation for more details on packaging, linting and detection, hardware requirements, parallelism, scheduling, and other run-time considerations.


  • Sets up skeleton of an Orion package containing Cubes and Floes
  • Simple example Cube and Floe
  • Testing setup using PyTest including working tests for the example cube and floe
  • Automatic documentation generation (using Sphinx ) for cubes and floes
  • Commands for running tests, building docs, and packaging using Invoke
  • Version configuration via storing the version only in the module’s file


  • Python 3.7 or higher. We recommend starting with a clean conda environment.
  • Cookiecutter
  • Access to OpenEye’s Python package server, Magpie. If you are a licensed Orion user and don’t have access, please contact OpenEye Support.

Follow the instructions there to configure access to Orion python packages via your pip.conf file.


  1. Install cookiecutter, usually via running pip install cookiecutter

  2. Run cookiecutter  gh:oess/cookiecutter-orion-package

    Note: running cookiecutter directly against the GitHub repository requires git to be locally installed. To install without requiring git, download the ZIP file from GitHub and run cookiecutter

  3. This will generate a directory with the name you provided as the project_slug in the cookiecutter setup. Switch into the directory

cd <project_slug>
  1. Next install the package and the development requirements:
pip install -e .
pip install -r requirements_dev.txt


Once all dependencies are installed, you should be able to use invoke to build a version of the package for upload to Orion (the tar.gz will be in the dist directory):

invoke package

Documentation can be built via the following command:

invoke docs

A local webserver for the docs can be launched on port 8000 as follows:

invoke serve-docs

Tests are set up for each of the floes included, they can be run locally:

invoke test-all

Command to just test cubes

invoke test-cubes

Command to just test floes

invoke test-floes

To clean up generated documentation and packaging files, run:

invoke clean

You can also selectively clean only documentation files as follows:

invoke clean-docs

Output Skeleton

The following directory structure will be created by the cookiecutter, the items marked in {{ }} will be replaced by your choices upon completion:

{{cookiecutter.project_slug}}/       <-- Top directory for your Project.
├──                        <-- README with your Project Name and description.
├── docs/                            <-- Docs subdirectory set up for automatic documentation of cubes and floes.
│   ├── Makefile
│   ├── make.bat
│   └── source
│       ├── _static
│       ├── _templates
│       ├──
│       └── index.rst
├── floes/                           <-- Subdirectory where all floes should be placed.
│   └──                    <-- An example floe.
├── manifest.json                    <-- Manifest for Orion.
├── requirements.txt                 <-- Requirements file for developers of this package.
├──                         <-- Python file for creating a python package
├──                         <-- Python file with defined tasks for building docs, running tests, and building the package.
├── tests/                           <-- Subdirectory for testing of cubes and floes.
│   ├──               <-- An example unit test for the included cube.
│   └── floe_tests/                  <-- Subdirectory for floe tests.
│       └──           <-- An example unit test for the included floe.
└── {{cookiecutter.module_name}}/    <-- Subdirectory of the package for the python module. All cubes should go in here.
    └──                    <-- An example cube.

Package Documentation

In the package’s manifest.json, specify: documentation_root: <RELATIVE_PATH_TO_DOCS> The root directory specified must contain an index.html file.

Example manifest.json contents:

    "name": "package_name",
    "requirements": "requirements.txt",
    "python_version": "3.7",
    "version": "0.0.1",
    "documentation_root": "docs"

Where docs is the relative path to a directory named docs/ which must contain an index.html file that acts as the starting point for the package’s documentation alongside the rest of your documentation files.