Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
140 lines (105 sloc) 5.81 KB

KNIME Python node archetype

Build Status Build status Download DOI

Generates KNIME workflow node skeleton repository with sample code. The node executes a Python script which is included in the skeleton. The script uses dictionary for dialog options and Pandas DataFrames as input and output.

This archetype was made because the instructions to create KNIME nodes at https://tech.knime.org/developer-guide, requires interaction with Eclipse wizards. We wanted a way to start and perform node development from the command line and headless. KNIME nodes are Eclipse plugins. The Tycho Maven plugin is used to build and handle dependencies of Eclipse plugins, so we use Tycho for KNIME node building.

The Maven archetype will generate a multi-module project with the following structure:

  • / - parent Maven project
  • /plugin/ - code for KNIME node
  • /tests/ - tests of KNIME node
  • /feature/ - eclipse feature
  • /p2/ - eclipse update site

The KNIME node will execute a Python script called /plugin/src/<package>/<python script file name>.py.

See https://github.com/3D-e-Chem/knime-python-wrapper for more information how the Python Wrapper node works.

Requirements

  • Java >=1.8
  • Maven >=3.0

The archetype is hosted on a BinTray repository. Maven does not resolve to this BinTray repository by default so it must be added.

The ~/.m2/settings.xml should contain the following profile:

<?xml version="1.0" encoding="UTF-8" ?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <profiles>
    <profile>
      <id>pythonknimearchetype</id>
      <repositories>
        <repository>
          <id>python-knime-archetype</id>
          <url>https://dl.bintray.com/nlesc/knime-python-node-archetype</url>
        </repository>
      </repositories>
    </profile>
  </profiles>
</settings>

Generate

The following command will generate a skeleton project

mvn archetype:generate -DarchetypeGroupId=nl.esciencecenter \
  -DarchetypeArtifactId=knime-python-node-archetype \
  -DarchetypeVersion=1.4.0 \
  -P pythonknimearchetype

The command will ask the following questions:

  1. Enter the groupId
  2. Enter the artifactId
  3. Enter the name of the package under which your code will be created
  4. Enter the version of your project, use x.y.z-SNAPSHOT format (for example 1.2.3-SNAPSHOT), where x.y.z is semantic versioning.
  5. Enter the GitHub organization name or GitHub username
  6. Enter the GitHub repository name
  7. Enter the KNIME node name
  8. Enter the Python script file name (must be given without .py extension)
  9. Enter the required Python package name (The presence of this Python package will be checked before executing the node)
  10. Confirm

The skeleton has been generated in a sub-directory named after the artifactId in the current working directory.

The following steps are needed to get a ready to use project.

  1. Change directory to generated code.

  2. Make skeleton git aware, by running git init.

  3. Fill in all placeholders ([Enter ... here.]) in

    • plugin/src/java/**/*.xml
    • feature/feature.xml
  4. Commit all changes and push to GitHub

  5. Optionally, setup Continuous Integration as described in the project README.md file.

Further instructions about generated project can be found in it's README.md file.

Generate from inside KNIME SDK

  1. Start up the KNIME SDK
  2. Install the m2e - Maven Integration for Eclipse software, (you might need to add the add the Eclipse software site which is http://download.eclipse.org/releases/neon for the version 3.5.1 of the KNIME SDK)
  3. Register the archetype catalog which contains this archetype 3.1. Goto Window > Preferences > Maven > Archetypes 3.2. Add a remove catalog with https://github.com/3D-e-Chem/knime-python-node-archetype/raw/master/archetype-catalog.xml
  4. Create a new project based on archetype 4.1. Goto File > New > Project ... > Maven 4.2. Select Maven Project & press Next button 4.3. Use default location & press Next button 4.4. Select Catalog you added in 3.2 4.5. Select the archetype with artifact id knime-python-node-archetype & press Next button 4.6. Fill in the form & press Finish button

New release

  1. Adjust version in pom.xml
  2. Update CHANGELOG.md & README.md & archetype-catalog.xml
  3. Commit & push
  4. Create GitHub release
  5. Correct License in the Zenodo entry and publish the entry
  6. Deploy to Bintray, see Deploy chapter below

Deploy

To deploy current version to Bintray.

  1. Add bintray API key to ~/.m2/settings.xml
<server>
    <id>bintray-nlesc-knime-python-node-archetype</id>
    <username>************</username>
    <password>********************************</password>
</server>
  1. Run mvn deploy

Attribution

The https://github.com/3D-e-Chem/tycho-knime-node-archetype was used as a starting point of this archetype.