| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| <parent> |
| <groupId>org.apache.tinkerpop</groupId> |
| <artifactId>tinkerpop</artifactId> |
| <version>3.3.11-SNAPSHOT</version> |
| </parent> |
| <artifactId>gremlin-python</artifactId> |
| <name>Apache TinkerPop :: Gremlin Python</name> |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.tinkerpop</groupId> |
| <artifactId>gremlin-core</artifactId> |
| <version>${project.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.python</groupId> |
| <artifactId>jython-standalone</artifactId> |
| <version>2.7.1</version> |
| </dependency> |
| <!-- TESTING --> |
| <dependency> |
| <groupId>org.apache.tinkerpop</groupId> |
| <artifactId>tinkergraph-gremlin</artifactId> |
| <version>${project.version}</version> |
| <scope>test</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tinkerpop</groupId> |
| <artifactId>gremlin-test</artifactId> |
| <version>${project.version}</version> |
| <scope>test</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.tinkerpop</groupId> |
| <artifactId>gremlin-server</artifactId> |
| <version>${project.version}</version> |
| <scope>test</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.slf4j</groupId> |
| <artifactId>slf4j-log4j12</artifactId> |
| <scope>test</scope> |
| </dependency> |
| </dependencies> |
| <properties> |
| <!-- provides a way to convert maven.test.skip value to skipTests for use in skipping python tests --> |
| <maven.test.skip>false</maven.test.skip> |
| <skipTests>${maven.test.skip}</skipTests> |
| <gremlin.server.dir>${project.parent.basedir}/gremlin-server</gremlin.server.dir> |
| </properties> |
| <build> |
| <directory>${basedir}/target</directory> |
| <finalName>${project.artifactId}-${project.version}</finalName> |
| <resources> |
| <resource> |
| <directory>src/main/resources |
| </directory> |
| </resource> |
| </resources> |
| <testResources> |
| <testResource> |
| <directory>${basedir}/src/test/resources |
| </directory> |
| </testResource> |
| </testResources> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-clean-plugin</artifactId> |
| <executions> |
| <execution> |
| <goals> |
| <goal>clean</goal> |
| </goals> |
| </execution> |
| </executions> |
| <configuration> |
| <filesets> |
| <!-- SOURCE DIRECTORIES --> |
| <fileset> |
| <directory>${basedir}/src/main/jython/gremlin_python</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/gremlin_python/driver</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/gremlin_python/process</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/gremlin_python/structure</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/gremlin_python/structure/io</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <!-- TEST DIRECTORIES --> |
| <fileset> |
| <directory>${basedir}/src/main/jython/tests</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/tests/driver</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/tests/process</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/tests/structure</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| <fileset> |
| <directory>${basedir}/src/main/jython/tests/structure/io</directory> |
| <includes> |
| <include>**/*.pyc</include> |
| <include>**/*.class</include> |
| </includes> |
| <excludes> |
| <exclude>**/*.py</exclude> |
| </excludes> |
| <followSymlinks>false</followSymlinks> |
| </fileset> |
| </filesets> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| |
| <profiles> |
| <!-- This default profile works around the issue where the glv-python profile which is expected to run all tests |
| can't override the exclusions defined below. --> |
| <profile> |
| <id>glv-python-standard</id> |
| <activation> |
| <activeByDefault>true</activeByDefault> |
| </activation> |
| <build> |
| <plugins> |
| <!-- excludes python related tests that require python itself installed on the system - run with the |
| python profile if glVPython is present --> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <python.home>${project.build.outputDirectory}</python.home> |
| </systemPropertyVariables> |
| <excludes> |
| <exclude>**/jsr223/Python*Test.java</exclude> |
| <exclude>**/graphson/GraphSON*Test.java</exclude> |
| </excludes> |
| </configuration> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| <!-- activates the building of python components and requires that python be installed on the system --> |
| <profile> |
| <id>glv-python</id> |
| <activation> |
| <activeByDefault>false</activeByDefault> |
| <file> |
| <exists>.glv</exists> |
| </file> |
| </activation> |
| <build> |
| |
| <!-- don't exclude any tests as python is assumed to be installed on this system --> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-surefire-plugin</artifactId> |
| <configuration> |
| <systemPropertyVariables> |
| <python.home>${project.build.outputDirectory}</python.home> |
| </systemPropertyVariables> |
| </configuration> |
| </plugin> |
| <!-- need to create python-reports directory at this point or else pytest can't write the report to it --> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-antrun-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>create-python-reports-directory</id> |
| <phase>initialize</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <target> |
| <mkdir dir="${project.build.directory}/python-reports"/> |
| <mkdir dir="${project.build.directory}/python-packaged/env"/> |
| </target> |
| </configuration> |
| </execution> |
| <!-- copy files in jython directory to target/py and run virtual env to sandbox python. |
| there is no need to "activate" the virtualenv because all calls to python occur |
| directly from bin/ --> |
| <execution> |
| <id>setup-py-env</id> |
| <phase>process-resources</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <tasks> |
| <!-- seems like we need a few different copies of the same source. all the |
| different python/jython stuff doesn't seem to want to share. we use |
| /python for basic tests and stuff, /jython for jython compilation with |
| the jython plugin, /python-packaged for distribution tasks. some of the |
| problem seems to stem from the python lifecycle not binding perfectly well |
| to the maven lifecycle (integration tests seems to cause troubles |
| specifically). note that the commands to install wheel are largely for |
| safety in case someone is using an older version of virtualenv (which |
| doesn't install wheel by default) --> |
| <copy todir="${project.build.directory}/python3"> |
| <fileset dir="src/main/jython"/> |
| </copy> |
| <copy todir="${project.build.directory}/python2"> |
| <fileset dir="src/main/jython"/> |
| </copy> |
| <copy todir="${project.build.directory}/python-packaged"> |
| <fileset dir="src/main/jython"/> |
| </copy> |
| <!-- print versions of python and virtualenv --> |
| <exec dir="${project.build.directory}/python2" executable="python2" |
| failonerror="true"> |
| <arg line="--version"/> |
| </exec> |
| <exec dir="${project.build.directory}/python2" executable="python3" |
| failonerror="true"> |
| <arg line="--version"/> |
| </exec> |
| <exec dir="${project.build.directory}/python2" executable="virtualenv" |
| failonerror="true"> |
| <arg line="--version"/> |
| </exec> |
| <exec dir="${project.build.directory}/python2" executable="virtualenv" |
| failonerror="true"> |
| <arg line="--python=python2 env"/> |
| </exec> |
| <!-- pip 20 doesn't work with python 2 it seems --> |
| <exec dir="${project.build.directory}/python2" executable="env/bin/python" |
| failonerror="true"> |
| <arg line="-m pip install pip>=19.3.1,<20.0.0"/> |
| </exec> |
| <exec dir="${project.build.directory}/python2" executable="env/bin/pip" |
| failonerror="true"> |
| <arg line="install wheel radish-bdd PyHamcrest aenum isodate"/> |
| </exec> |
| <exec dir="${project.build.directory}/python3" executable="virtualenv" |
| failonerror="true"> |
| <arg line="--python=python3 env"/> |
| </exec> |
| <exec dir="${project.build.directory}/python3" executable="env/bin/pip" |
| failonerror="true"> |
| <arg line="install wheel radish-bdd PyHamcrest aenum isodate"/> |
| </exec> |
| <exec dir="${project.build.directory}/python-packaged" executable="virtualenv" |
| failonerror="true"> |
| <arg line="--python=python3 env"/> |
| </exec> |
| <exec dir="${project.build.directory}/python-packaged" executable="env/bin/pip" |
| failonerror="true"> |
| <arg line="install wheel"/> |
| </exec> |
| </tasks> |
| </configuration> |
| </execution> |
| <execution> |
| <id>native-python2-build</id> |
| <phase>compile</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <target> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python2" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <!-- oddly the "build-lib" needs to be in place or else docs won't generate --> |
| <arg line="setup.py build --build-lib ${project.build.outputDirectory}/Lib"/> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| <execution> |
| <id>native-python3-build</id> |
| <phase>compile</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <target> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python3" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <arg line="setup.py build --build-lib ${project.build.outputDirectory}/Lib"/> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| |
| <!-- |
| build/package python source distribution and wheel archive. the version is bound to an |
| environment variable that gets used in setup.py to dynamically construct a module |
| __version__file |
| --> |
| <execution> |
| <id>package-py</id> |
| <phase>package</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <target> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python-packaged" |
| failonerror="true"> |
| <env key="VERSION" value="${project.version}"/> |
| <env key="PYTHONPATH" value=""/> |
| <arg line="setup.py sdist bdist_wheel"/> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| |
| <!-- |
| use pytest to execute native python tests - output of xunit output is configured in setup.cfg. |
| this has to be an integration-test because we need gremlin-server running and the standard |
| test phase doesn't have a pre/post event like integration-test does. |
| --> |
| <execution> |
| <id>native-python2-test</id> |
| <phase>integration-test</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <skip>${skipTests}</skip> |
| <target> |
| <!-- setup.py seems to have troubles with the recently published zipp 1.0.0 --> |
| <exec dir="${project.build.directory}/python2" executable="env/bin/python" |
| failonerror="true"> |
| <arg line="-m pip install zipp>=0.5.0,<1.0.0"/> |
| </exec> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python2" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <arg line="setup.py test"/> |
| </exec> |
| <!-- radish seems to like all dependencies in place --> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python2" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <arg line="setup.py install"/> |
| </exec> |
| <!-- run for graphson 3.0 --> |
| <exec executable="env/bin/radish" dir="${project.build.directory}/python2" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <env key="PYTHONIOENCODING" value="utf-8:surrogateescape"/> |
| <arg line="-f dots -e -t -b ${project.build.directory}/python2/radish ${project.basedir}/../gremlin-test/features/ --user-data="serializer=application/vnd.gremlin-v3.0+json""/> <!-- -no-line-jump --> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| <execution> |
| <id>native-python3-test</id> |
| <phase>integration-test</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <skip>${skipTests}</skip> |
| <target> |
| <exec executable="env/bin/python" dir="${project.build.directory}/python3" |
| failonerror="true"> |
| <env key="PYTHONPATH" value=""/> |
| <arg line="setup.py test"/> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| <plugin> |
| <groupId>org.codehaus.gmavenplus</groupId> |
| <artifactId>gmavenplus-plugin</artifactId> |
| <dependencies> |
| <dependency> |
| <groupId>org.codehaus.groovy</groupId> |
| <artifactId>groovy-all</artifactId> |
| <version>${groovy.version}</version> |
| <classifier>indy</classifier> |
| <scope>runtime</scope> |
| </dependency> |
| <dependency> |
| <groupId>log4j</groupId> |
| <artifactId>log4j</artifactId> |
| <version>${log4j.version}</version> |
| <scope>runtime</scope> |
| </dependency> |
| </dependencies> |
| <executions> |
| <execution> |
| <id>generate-dsl</id> |
| <phase>generate-sources</phase> |
| <goals> |
| <goal>execute</goal> |
| </goals> |
| <configuration> |
| <properties> |
| <property> |
| <name>projectBaseDir</name> |
| <value>${project.basedir}</value> |
| </property> |
| </properties> |
| <scripts> |
| <script>${project.basedir}/glv/generate.groovy</script> |
| </scripts> |
| </configuration> |
| </execution> |
| <execution> |
| <id>gremlin-server-start</id> |
| <phase>pre-integration-test</phase> |
| <goals> |
| <goal>execute</goal> |
| </goals> |
| <configuration> |
| <properties> |
| <property> |
| <name>skipTests</name> |
| <value>${skipTests}</value> |
| </property> |
| <property> |
| <name>python</name> |
| <value>true</value> |
| </property> |
| <property> |
| <name>gremlinServerDir</name> |
| <value>${gremlin.server.dir}</value> |
| </property> |
| <property> |
| <name>settingsFile</name> |
| <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value> |
| </property> |
| <property> |
| <name>executionName</name> |
| <value>${project.name}</value> |
| </property> |
| <property> |
| <name>projectBaseDir</name> |
| <value>${project.basedir}</value> |
| </property> |
| </properties> |
| <scripts> |
| <script>${gremlin.server.dir}/src/test/scripts/test-server-start.groovy</script> |
| </scripts> |
| </configuration> |
| </execution> |
| <execution> |
| <id>gremlin-server-stop</id> |
| <phase>post-integration-test</phase> |
| <goals> |
| <goal>execute</goal> |
| </goals> |
| <configuration> |
| <properties> |
| <property> |
| <name>skipTests</name> |
| <value>${skipTests}</value> |
| </property> |
| <property> |
| <name>executionName</name> |
| <value>${project.name}</value> |
| </property> |
| </properties> |
| <scripts> |
| <script>${gremlin.server.dir}/src/test/scripts/test-server-stop.groovy</script> |
| </scripts> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| <!-- |
| Provides a way to deploy the gremlinpython GLV to pypi. This cannot be part of the standard maven execution |
| because pypi does not have a staging environment like sonatype for releases. As soon as the release is |
| published it is public. In our release workflow, deploy occurs prior to vote on the release and we can't |
| make this stuff public until the vote is over. |
| --> |
| <profile> |
| <id>glv-python-deploy</id> |
| <activation> |
| <activeByDefault>false</activeByDefault> |
| <property> |
| <name>pypi</name> |
| </property> |
| </activation> |
| <build> |
| <plugins> |
| <!-- |
| pypi doesn't have a staging area like sonatype so the deploy to pypi is done out of the normal |
| release band. it is performed after successful VOTE in which case, the maven artifacts should |
| not be deployed again - hence the plugin is disabled. deployment to pypi uses the antrun plugin |
| below with twine so disabling the plugin has no effect on the pypi deployment. |
| --> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-deploy-plugin</artifactId> |
| <configuration> |
| <skip>true</skip> |
| </configuration> |
| </plugin> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-antrun-plugin</artifactId> |
| <executions> |
| <!-- deploy to pypi. assumes that ~/.pypirc is configured appropriately --> |
| <execution> |
| <id>deploy-py</id> |
| <phase>deploy</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| <configuration> |
| <target> |
| <exec dir="${project.build.directory}/python-packaged" executable="env/bin/pip" |
| failonerror="true"> |
| <arg line="install twine==1.12.1"/> |
| </exec> |
| <!-- check the dist for errors before deploying --> |
| <exec dir="${project.build.directory}/python-packaged" executable="env/bin/twine" |
| failonerror="true"> |
| <arg line="check dist/*"/> |
| </exec> |
| <!-- to use the pypi test environment add: -r pypitest --> |
| <exec dir="${project.build.directory}/python-packaged" executable="env/bin/twine" |
| failonerror="true"> |
| <arg line="upload dist/* -r pypi -s "/> |
| </exec> |
| </target> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| </profiles> |
| </project> |