SNAP CPython Adapter

Target release2.0
Epic SNAP-79 - Getting issue details... STATUS
Document statusDRAFT
Document owner

Former user (Deleted)

DesignerFormer user (Deleted)
DevelopersFormer user (Deleted), Marco Peters
QAOlga Faber (Unlicensed)


  • Let Python programmers write GPF operators using CPython and its scientific extension libraries numpy, scipy, pandas, etc.
  • It should be transparent to users how operators are implemented, e.g. using the native Java GPF API, using the Python API or using the stand-alone tools adapter.

Background and strategic fit

Scientists prefer Python over Java.


  • Users have Python 2.7, 3.3 or 3.4 installed.


#TitleUser StoryImportanceNotes

User interaction and design

A Python extension module is a JAR file or directory which must contain a plain text file META-INF/snappy.def which lists all Python extensions contained in the modulePython extension modules are found in the following locations:

  • <module-jar-file>   a module JAR file
  • ${user.home}/.snap/snappy/ext/*    the directories in directory snappy/ext in the SNAP user directory
  • ${snap.snappy.ext}   from the directory paths given in the special system property snap.snappy.ext

The text file snappy.def contains either empty lines, comment lines starting with the '#' character, or lines declaring a Python extension as follows:

[<ext-rel-path>/]<ext>      ExtClass

The type of the extension is derived from the Python class ExtClass. If the class name ends with Op it is assumed to be a GPF operator, if it ends with Action it is assumed to be an action to be placed in the menu or in a toolbar. A single <ext> may contain any number of Python classes that provide extensions to SNAP.

Each Python extension must follow this schema:


<ext>.py   the Python code containing the class ExtClass  

<ext>-info.xml   contains the operator metadata such as processing parameter definitions (for GPF operators only)


Below is a list of questions to be addressed as a result of this requirements document:


Not Doing