Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1779 [created] cb159e8b2


TINKERPOP-1779 Bump to GMavenPlus 1.6

Moved embedded groovy scripts that were in the pom to their own files. They are 
more manageable that way as you get some syntax highlighting/intellisense in 
the IDE when they have the right file extension. It also makes the pom a bit 
easier to follow. Removed a bunch of python test resources that were no longer 
in use. Centralized the scripts that start/stop Gremlin Server for GLV tests so 
that we don't have them copy/pasted everywhere.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cb159e8b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cb159e8b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cb159e8b

Branch: refs/heads/TINKERPOP-1779
Commit: cb159e8b2bb4f25c309f01d8997e22806fb311c6
Parents: c59393f
Author: Stephen Mallette <[email protected]>
Authored: Tue Sep 12 11:18:41 2017 -0400
Committer: Stephen Mallette <[email protected]>
Committed: Tue Sep 12 11:18:41 2017 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 giraph-gremlin/pom.xml                          |  14 +
 gremlin-console/pom.xml                         |  14 +
 gremlin-dotnet/pom.xml                          | 216 +-------------
 .../appsettings.json                            |   4 +-
 gremlin-dotnet/test/pom.xml                     |  79 ++----
 gremlin-groovy-test/pom.xml                     |  14 +
 gremlin-groovy/pom.xml                          |  14 +
 .../glv/GraphTraversalSource.template           | 102 +++++++
 gremlin-python/glv/TraversalSource.template     | 282 +++++++++++++++++++
 gremlin-python/pom.xml                          | 166 +++--------
 .../resources/GraphTraversalSource.template     | 102 -------
 .../src/main/resources/TraversalSource.template | 282 -------------------
 .../gremlin/python/driver/credentials.kryo      | Bin 138 -> 0 bytes
 .../python/driver/generate-modern.groovy        |  33 ---
 .../driver/gremlin-server-modern-secure-py.yaml |  63 -----
 .../driver/tinkergraph-credentials.properties   |  22 --
 .../python/driver/tinkergraph-empty.properties  |  18 --
 .../tinkerpop/gremlin/server/Settings.java      |   3 +-
 .../gremlin/server/util/MetricManager.java      |   5 +-
 hadoop-gremlin/pom.xml                          |  14 +
 pom.xml                                         |  16 +-
 spark-gremlin/pom.xml                           |  14 +
 23 files changed, 551 insertions(+), 927 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c15835c..4e64fd6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.7 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Bump to GMavenPlus 1.6.
 * Bump to Jackson 2.8.10.
 * Added an `EmbeddedRemoteConnection` so that it's possible to mimic a remote 
connection within the same JVM.
 * The Console's `plugin.txt` file is only updated if there were manually 
uninstalled plugins.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/giraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/giraph-gremlin/pom.xml b/giraph-gremlin/pom.xml
index cacf54c..f55a6a4 100644
--- a/giraph-gremlin/pom.xml
+++ b/giraph-gremlin/pom.xml
@@ -227,6 +227,20 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index 0531af3..50d7b0e 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -203,6 +203,20 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-dotnet/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/pom.xml b/gremlin-dotnet/pom.xml
index d2ab17c..a0ef34f 100644
--- a/gremlin-dotnet/pom.xml
+++ b/gremlin-dotnet/pom.xml
@@ -54,6 +54,7 @@ limitations under the License.
                         <groupId>org.codehaus.groovy</groupId>
                         <artifactId>groovy-all</artifactId>
                         <version>${groovy.version}</version>
+                        <classifier>indy</classifier>
                         <scope>runtime</scope>
                     </dependency>
                     <dependency>
@@ -71,211 +72,18 @@ limitations under the License.
                             <goal>execute</goal>
                         </goals>
                         <configuration>
+                            <properties>
+                                <property>
+                                    <name>projectBaseDir</name>
+                                    <value>${project.basedir}</value>
+                                </property>
+                                <property>
+                                    <name>projectVersion</name>
+                                    <value>${project.version}</value>
+                                </property>
+                            </properties>
                             <scripts>
-                                <script><![CDATA[
-import org.apache.tinkerpop.gremlin.jsr223.CoreImports
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
-import org.apache.tinkerpop.gremlin.process.traversal.P
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
-import org.apache.tinkerpop.gremlin.structure.Direction
-import java.lang.reflect.Modifier
-
-def toCSharpTypeMap = ["Long": "long",
-                       "Integer": "int",
-                       "String": "string",
-                       "Object": "object",
-                       "java.util.Map<java.lang.String, E2>": 
"IDictionary<string, E2>",
-                       "java.util.Map<java.lang.String, B>": 
"IDictionary<string, E2>",
-                       "java.util.List<E>": "IList<E>",
-                       "java.util.Map<K, V>": "IDictionary<K, V>",
-                       "java.util.Collection<E2>": "ICollection<E2>",
-                       "java.util.Collection<B>": "ICollection<E2>",
-                       "java.util.Map<K, java.lang.Long>": "IDictionary<K, 
long>",
-                       "TraversalMetrics": "E2"]
-
-def useE2 = ["E2", "E2"];
-def methodsWithSpecificTypes = ["constant": useE2,
-                                "limit": useE2,
-                                "mean": useE2,
-                                "optional": useE2,
-                                "range": useE2,
-                                "select": ["IDictionary<string, E2>", "E2"],
-                                "sum": useE2,
-                                "tail": useE2,
-                                "tree": ["object"],
-                                "unfold": useE2]
-
-def getCSharpGenericTypeParam = { typeName ->
-    def tParam = ""
-    if (typeName.contains("E2")) {
-        tParam = "<E2>"
-    }
-    else if (typeName.contains("<K, V>")) {
-        tParam = "<K, V>"
-    }
-    else if (typeName.contains("<K, ")) {
-        tParam = "<K>"
-    }
-    return tParam
-}
-
-def toCSharpType = { name ->
-    String typeName = toCSharpTypeMap.getOrDefault(name, name);
-    if (typeName.equals(name) && (typeName.contains("? extends") || 
typeName.equals("Tree"))) {
-        typeName = "E2"
-    }
-    return typeName;
-}
-
-def toCSharpMethodName = { symbol -> (String) 
Character.toUpperCase(symbol.charAt(0)) + symbol.substring(1) }
-
-def getJavaParameterTypeNames = { method ->
-    def typeArguments = method.genericReturnType.actualTypeArguments;
-    return typeArguments.
-            collect { (it instanceof Class) ? ((Class)it).simpleName : 
it.typeName }.
-            collect { name ->
-                if (name.equals("A")) {
-                    name = "object"
-                }
-                else if (name.equals("B")) {
-                    name = "E2";
-                }
-                name
-            }
-}
-
-def binding = ["pmethods": P.class.getMethods().
-                                 findAll { 
Modifier.isStatic(it.getModifiers()) }.
-                                 findAll { 
P.class.isAssignableFrom(it.returnType) }.
-                                 collect { it.name }.
-                                 unique().
-                                 sort { a, b -> a <=> b },
-               "sourceStepMethods": GraphTraversalSource.getMethods(). // 
SOURCE STEPS
-                                        findAll { 
GraphTraversalSource.class.equals(it.returnType) }.
-                                        findAll {
-                                            !it.name.equals("clone") &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withBindings) &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withRemote) &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withComputer)
-                                        }.
-                                        collect { it.name }.
-                                        unique().
-                                        sort { a, b -> a <=> b },
-               "sourceSpawnMethods": GraphTraversalSource.getMethods(). // 
SPAWN STEPS
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) && !it.name.equals('inject')}.
-                                        collect { [methodName: it.name, 
typeArguments: it.genericReturnType.actualTypeArguments.collect{t -> 
((java.lang.Class)t).simpleName}] }.
-                                        unique().
-                                        sort { a, b -> a.methodName <=> 
b.methodName },
-               "graphStepMethods": GraphTraversal.getMethods().
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) }.
-                                        findAll { !it.name.equals("clone") && 
!it.name.equals("iterate") }.
-                                        groupBy { it.name }.
-                                        // Select unique by name, with the 
most amount of parameters
-                                        collect { it.value.sort { a, b -> 
b.parameterCount <=> a.parameterCount }.first() }.
-                                        sort { a, b -> a.name <=> b.name }.
-                                        collect { javaMethod ->
-                                            def typeNames = 
getJavaParameterTypeNames(javaMethod)
-                                            def t1 = toCSharpType(typeNames[0])
-                                            def t2 = toCSharpType(typeNames[1])
-                                            def tParam = 
getCSharpGenericTypeParam(t2)
-                                            return ["methodName": 
javaMethod.name, "t1":t1, "t2":t2, "tParam":tParam]
-                                        },
-               "anonStepMethods": __.class.getMethods().
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) }.
-                                        findAll { 
Modifier.isStatic(it.getModifiers()) }.
-                                        findAll { !it.name.equals("__") && 
!it.name.equals("start") }.
-                                        groupBy { it.name }.
-                                        // Select unique by name, with the 
most amount of parameters
-                                        collect { it.value.sort { a, b -> 
b.parameterCount <=> a.parameterCount }.first() }.
-                                        sort { it.name }.
-                                        collect { javaMethod ->
-                                            def typeNames = 
getJavaParameterTypeNames(javaMethod)
-                                            def t2 = toCSharpType(typeNames[1])
-                                            def tParam = 
getCSharpGenericTypeParam(t2)
-                                            def specificTypes = 
methodsWithSpecificTypes.get(javaMethod.name)
-                                            if (specificTypes) {
-                                                t2 = specificTypes[0]
-                                                tParam = specificTypes.size() 
> 1 ? "<" + specificTypes[1] + ">" : ""
-                                            }
-                                            return ["methodName": 
javaMethod.name, "t2":t2, "tParam":tParam]
-                                        },
-               "toCSharpMethodName": toCSharpMethodName]
-
-def engine = new groovy.text.GStringTemplateEngine()
-def traversalTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/GraphTraversal.template')).make(binding)
-def traversalFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs')
-traversalFile.newWriter().withWriter{ it << traversalTemplate }
-
-def graphTraversalTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/GraphTraversalSource.template')).make(binding)
-def graphTraversalFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs')
-graphTraversalFile.newWriter().withWriter{ it << graphTraversalTemplate }
-
-def anonymousTraversalTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/AnonymousTraversal.template')).make(binding)
-def anonymousTraversalFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/__.cs')
-anonymousTraversalFile.newWriter().withWriter{ it << 
anonymousTraversalTemplate }
-
-def pTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/P.template')).make(binding)
-def pFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/P.cs')
-pFile.newWriter().withWriter{ it << pTemplate }
-
-// Process enums
-def toCSharpName = { enumClass, itemName ->
-    if (enumClass.equals(Direction.class)) {
-        itemName = itemName.toLowerCase()
-    }
-
-    return itemName.substring(0, 1).toUpperCase() + itemName.substring(1)
-}
-
-def createEnum = { enumClass, csharpToJava ->
-    def b = ["enumClass": enumClass,
-             "constants": enumClass.getEnumConstants().
-                                    sort { a, b -> a.name() <=> b.name() }.
-                                    collect { value ->
-                                        def csharpName = 
toCSharpName(enumClass, value.name())
-                                        csharpToJava.put(enumClass.simpleName 
+ "." + csharpName, value.name())
-                                        return csharpName
-                                    }.join(",\n\t\t")]
-
-    def enumTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/Enum.template')).make(b)
-    def enumFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/' + 
enumClass.getSimpleName() + '.cs')
-    enumFile.newWriter().withWriter{ it << enumTemplate }
-}
-
-def enumCSharpToJavaNames = [:]
-CoreImports.getClassImports().findAll { Enum.class.isAssignableFrom(it) }.
-                             sort { a, b -> a.getSimpleName() <=> 
b.getSimpleName() }.
-                             each { createEnum(it, enumCSharpToJavaNames) }
-
-def lastIndex = (enumCSharpToJavaNames.size() - 1);
-def body = new StringBuilder()
-enumCSharpToJavaNames.eachWithIndex{ node, i ->
-    body.append("""{"$node.key", "$node.value"}""")
-    body.append(i == lastIndex ? "\n" : ",\n            ")
-}
-
-def namingConversionsTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/NamingConversions.template')).make(["body":body])
-def namingConversionsFile = new 
File('${project.basedir}/src/Gremlin.Net/Process/Traversal/NamingConversions.cs')
-namingConversionsFile.newWriter().withWriter{ it << namingConversionsTemplate }
-
-def determineVersion = {
-    def env = System.getenv()
-    def mavenVersion = env.containsKey("TP_RELEASE_VERSION") ? 
env.get("DOTNET_RELEASE_VERSION") : '${project.version}'
-
-    // only want to generate a timestamp for the version if this is a nuget 
deploy
-    if (!mavenVersion.endsWith("-SNAPSHOT") || null == 
System.getProperty("nuget")) return mavenVersion
-
-    return mavenVersion.replace("-SNAPSHOT", "-dev-" + 
System.currentTimeMillis())
-}
-
-def versionToUse = determineVersion()
-def csprojTemplate = engine.createTemplate(new 
File('${project.basedir}/glv/Gremlin.Net.csproj.template')).make(["projectVersion":versionToUse])
-def csprojFile = new 
File('${project.basedir}/src/Gremlin.Net/Gremlin.Net.csproj')
-csprojFile.newWriter().withWriter{ it << csprojTemplate }
-]]>
-                                </script>
+                                
<script>${project.basedir}/glv/generate.groovy</script>
                             </scripts>
                         </configuration>
                     </execution>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
index 5788e50..1adda9a 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/appsettings.json
@@ -1,5 +1,5 @@
 {
   "TestServerIpAddress": "localhost",
-  "TestServerPort": 45950,
-  "TestSecureServerPort": 45951
+  "TestServerPort": 45940,
+  "TestSecureServerPort": 45941
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-dotnet/test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/pom.xml b/gremlin-dotnet/test/pom.xml
index ea61c22..7b82a2e 100644
--- a/gremlin-dotnet/test/pom.xml
+++ b/gremlin-dotnet/test/pom.xml
@@ -128,41 +128,22 @@ limitations under the License.
                                     <goal>execute</goal>
                                 </goals>
                                 <configuration>
+                                    <properties>
+                                        <property>
+                                            <name>skipTests</name>
+                                            <value>${skipTests}</value>
+                                        </property>
+                                        <property>
+                                            <name>gremlinServerDir</name>
+                                            
<value>${gremlin.server.dir}</value>
+                                        </property>
+                                        <property>
+                                            <name>executionName</name>
+                                            <value>${project.name}</value>
+                                        </property>
+                                    </properties>
                                     <scripts>
-                                        <script>
-                                            <![CDATA[
-import org.apache.tinkerpop.gremlin.server.GremlinServer
-import org.apache.tinkerpop.gremlin.server.Settings
-import org.apache.tinkerpop.gremlin.server.Settings.ScriptEngineSettings
-
-if (${skipTests}) return
-
-log.info("Starting Gremlin Server instances for native testing of 
gremlin-dotnet")
-def settings = 
Settings.read("${gremlin.server.dir}/conf/gremlin-server-modern.yaml")
-settings.graphs.graph = 
"${gremlin.server.dir}/conf/tinkergraph-empty.properties"
-settings.scriptEngines["gremlin-groovy"].scripts = 
["${gremlin.server.dir}/scripts/generate-modern.groovy"]
-settings.port = 45950
-
-def server = new GremlinServer(settings)
-server.start().join()
-
-project.setContextValue("gremlin.dotnet.server", server)
-log.info("Gremlin Server with no authentication started on port 45950")
-
-def settingsSecure = 
Settings.read("${gremlin.server.dir}/conf/gremlin-server-modern.yaml")
-settingsSecure.graphs.graph = 
"${gremlin.server.dir}/conf/tinkergraph-empty.properties"
-settingsSecure.scriptEngines["gremlin-groovy"].scripts = 
["${gremlin.server.dir}/scripts/generate-modern.groovy"]
-settingsSecure.port = 45951
-settingsSecure.authentication.className = 
"org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator"
-settingsSecure.authentication.config = [credentialsDb: 
"${gremlin.server.dir}/conf/tinkergraph-credentials.properties", 
credentialsDbLocation: "${gremlin.server.dir}/data/credentials.kryo"]
-
-def serverSecure = new GremlinServer(settingsSecure)
-serverSecure.start().join()
-
-project.setContextValue("gremlin.dotnet.server.secure", serverSecure)
-log.info("Gremlin Server with authentication started on port 45951")
-]]>
-                                        </script>
+                                        
<script>${gremlin.server.dir}/src/test/scripts/test-server-start.groovy</script>
                                     </scripts>
                                 </configuration>
                             </execution>
@@ -173,26 +154,18 @@ log.info("Gremlin Server with authentication started on 
port 45951")
                                     <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>
-                                            <![CDATA[
-import org.apache.tinkerpop.gremlin.server.GremlinServer
-
-if (${skipTests}) return
-
-log.info("Tests for native gremlin-dotnet complete")
-
-def server = project.getContextValue("gremlin.dotnet.server")
-log.info("Shutting down $server")
-server.stop().join()
-
-def serverSecure = project.getContextValue("gremlin.dotnet.server.secure")
-log.info("Shutting down $serverSecure")
-serverSecure.stop().join()
-
-log.info("Gremlin Server instance shutdown for gremlin-dotnet")
-]]>
-                                        </script>
+                                        
<script>${gremlin.server.dir}/src/test/scripts/test-server-stop.groovy</script>
                                     </scripts>
                                 </configuration>
                             </execution>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-groovy-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/pom.xml b/gremlin-groovy-test/pom.xml
index ef96f0c..4fa6ea5 100644
--- a/gremlin-groovy-test/pom.xml
+++ b/gremlin-groovy-test/pom.xml
@@ -50,6 +50,20 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-groovy/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml
index 0a10534..53806ab 100644
--- a/gremlin-groovy/pom.xml
+++ b/gremlin-groovy/pom.xml
@@ -113,6 +113,20 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/glv/GraphTraversalSource.template
----------------------------------------------------------------------
diff --git a/gremlin-python/glv/GraphTraversalSource.template 
b/gremlin-python/glv/GraphTraversalSource.template
new file mode 100644
index 0000000..54b339e
--- /dev/null
+++ b/gremlin-python/glv/GraphTraversalSource.template
@@ -0,0 +1,102 @@
+'''
+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.
+'''
+
+import sys
+from .traversal import Traversal
+from .traversal import TraversalStrategies
+from .strategies import VertexProgramStrategy
+from .traversal import Bytecode
+from ..driver.remote_connection import RemoteStrategy
+from .. import statics
+from ..statics import long
+
+class GraphTraversalSource(object):
+    def __init__(self, graph, traversal_strategies, bytecode=None):
+        self.graph = graph
+        self.traversal_strategies = traversal_strategies
+        if bytecode is None:
+          bytecode = Bytecode()
+        self.bytecode = bytecode
+        self.graph_traversal = GraphTraversal
+    def __repr__(self):
+        return "graphtraversalsource[" + str(self.graph) + "]"
+    def get_graph_traversal_source(self):
+        return self.__class__(self.graph, 
TraversalStrategies(self.traversal_strategies), Bytecode(self.bytecode))
+    def get_graph_traversal(self):
+        return self.graph_traversal(self.graph, self.traversal_strategies, 
Bytecode(self.bytecode))
+
+<% sourceStepMethods.each{ method -> %>
+    def <%= method %>(self, *args):
+        source = self.get_graph_traversal_source()
+        source.bytecode.add_source("<%= toJava.call(method) %>", *args)
+        return source
+<% } %>
+
+    def withRemote(self, remote_connection):
+        source = self.get_graph_traversal_source()
+        
source.traversal_strategies.add_strategies([RemoteStrategy(remote_connection)])
+        return source
+    def withComputer(self,graph_computer=None, workers=None, result=None, 
persist=None, vertices=None, edges=None, configuration=None):
+        return 
self.withStrategies(VertexProgramStrategy(graph_computer,workers,result,persist,vertices,edges,configuration))
+
+<% sourceSpawnMethods.each { method -> %>
+    def <%= method %>(self, *args):
+        traversal = self.get_graph_traversal()
+        traversal.bytecode.add_step("<%= toJava.call(method) %>", *args)
+        return traversal
+<% } %>
+
+class GraphTraversal(Traversal):
+    def __init__(self, graph, traversal_strategies, bytecode):
+        super(GraphTraversal, self).__init__(graph, traversal_strategies, 
bytecode)
+    def __getitem__(self, index):
+        if isinstance(index, int):
+            return self.range(long(index), long(index + 1))
+        elif isinstance(index, slice):
+            return self.range(long(0) if index.start is None else 
long(index.start), long(sys.maxsize) if index.stop is None else 
long(index.stop))
+        else:
+            raise TypeError("Index must be int or slice")
+    def __getattr__(self, key):
+        return self.values(key)
+<% graphStepMethods.each { method -> %>
+    def <%= method %>(self, *args):
+        self.bytecode.add_step("<%= toJava.call(method) %>", *args)
+        return self
+<% } %>
+
+class __(object):
+    graph_traversal = GraphTraversal
+    @classmethod
+    def start(cls):
+        return GraphTraversal(None, None, Bytecode())
+    @classmethod
+    def __(cls, *args):
+        return __.inject(*args)
+
+<% anonStepMethods.each{ method -> %>
+    @classmethod
+    def <%= method %>(cls, *args):
+        return cls.graph_traversal(None, None, Bytecode()).<%= method %>(*args)
+<% } %>
+
+<% anonStepMethods.each{ method -> %>
+def <%= method %>(*args):
+    return __.<%= method %>(*args)
+statics.add_static('<%= method %>', <%= method %>)
+<% } %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/glv/TraversalSource.template
----------------------------------------------------------------------
diff --git a/gremlin-python/glv/TraversalSource.template 
b/gremlin-python/glv/TraversalSource.template
new file mode 100644
index 0000000..66ea940
--- /dev/null
+++ b/gremlin-python/glv/TraversalSource.template
@@ -0,0 +1,282 @@
+'''
+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.
+'''
+
+from aenum import Enum
+from .. import statics
+from ..statics import long
+
+class Traversal(object):
+    def __init__(self, graph, traversal_strategies, bytecode):
+        self.graph = graph
+        self.traversal_strategies = traversal_strategies
+        self.bytecode = bytecode
+        self.side_effects = TraversalSideEffects()
+        self.traversers = None
+        self.last_traverser = None
+    def __repr__(self):
+        return str(self.bytecode)
+    def __eq__(self, other):
+        if isinstance(other, self.__class__):
+            return self.bytecode == other.bytecode
+        else:
+            return False
+    def __iter__(self):
+        return self
+    def __next__(self):
+        if self.traversers is None:
+            self.traversal_strategies.apply_strategies(self)
+        if self.last_traverser is None:
+            self.last_traverser = next(self.traversers)
+        object = self.last_traverser.object
+        self.last_traverser.bulk = self.last_traverser.bulk - 1
+        if self.last_traverser.bulk <= 0:
+            self.last_traverser = None
+        return object
+    def toList(self):
+        return list(iter(self))
+    def toSet(self):
+        return set(iter(self))
+    def iterate(self):
+        while True:
+            try: self.nextTraverser()
+            except StopIteration: return self
+    def nextTraverser(self):
+        if self.traversers is None:
+            self.traversal_strategies.apply_strategies(self)
+        if self.last_traverser is None:
+            return next(self.traversers)
+        else:
+            temp = self.last_traverser
+            self.last_traverser = None
+            return temp
+    def next(self, amount=None):
+        if amount is None:
+            return self.__next__()
+        else:
+            count = 0
+            tempList = []
+            while count < amount:
+                count = count + 1
+                try: temp = self.__next__()
+                except StopIteration: return tempList
+                tempList.append(temp)
+            return tempList
+    def promise(self, cb=None):
+        self.traversal_strategies.apply_async_strategies(self)
+        future_traversal = self.remote_results
+        future = type(future_traversal)()
+        def process(f):
+            try:
+                traversal = f.result()
+            except Exception as e:
+                future.set_exception(e)
+            else:
+                self.traversers = iter(traversal.traversers)
+                self.side_effects = traversal.side_effects
+                if cb:
+                    try:
+                        result = cb(self)
+                    except Exception as e:
+                        future.set_exception(e)
+                    else:
+                        future.set_result(result)
+                else:
+                    future.set_result(self)
+        future_traversal.add_done_callback(process)
+        return future
+
+<% enums.each { e -> %>
+<%= e.getSimpleName() %> = Enum('<%= e.getSimpleName() %>', ' <%= 
e.getEnumConstants().sort{a, b -> a.name() <=> b.name()}.collect{v -> 
toPython.call(v.name())}.join(" ") %>')
+<% e.getEnumConstants().each {v -> %>
+statics.add_static('<%= toPython.call(v.name()) %>', <%= 
v.getDeclaringClass().getSimpleName() %>.<%= toPython.call(v.name()) %>)<% } %>
+<% } %>
+
+class P(object):
+    def __init__(self, operator, value, other=None):
+        self.operator = operator
+        self.value = value
+        self.other = other
+
+<% pmethods.each { method -> %>
+    @staticmethod
+    def <%= method %>(*args):
+        return P("<%= toPython.call(method) %>", *args)
+<% } %>
+    def and_(self, arg):
+        return P("and", self, arg)
+    def or_(self, arg):
+        return P("or", self, arg)
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.operator == 
other.operator and self.value == other.value and self.other == other.other
+    def __repr__(self):
+        return self.operator + "(" + str(self.value) + ")" if self.other is 
None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
+    def and_(self, arg):
+        return P("and", self, arg)
+    def or_(self, arg):
+        return P("or", self, arg)
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.operator == 
other.operator and self.value == other.value and self.other == other.other
+    def __repr__(self):
+        return self.operator + "(" + str(self.value) + ")" if self.other is 
None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
+<% pmethods.findAll{!it.equals("clone")}.each { method -> %>
+def <%= method %>(*args):
+    return P.<%= method %>(*args)
+statics.add_static('<%= method %>',<%= method %>)
+<% } %>
+
+'''
+TRAVERSER
+'''
+
+class Traverser(object):
+    def __init__(self, object, bulk=None):
+        if bulk is None:
+            bulk = long(1)
+        self.object = object
+        self.bulk = bulk
+    def __repr__(self):
+        return str(self.object)
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.object == 
other.object
+
+'''
+TRAVERSAL SIDE-EFFECTS
+'''
+
+class TraversalSideEffects(object):
+    def keys(self):
+        return set()
+    def get(self, key):
+        raise KeyError(key)
+    def __getitem__(self, key):
+        return self.get(key)
+    def __repr__(self):
+        return "sideEffects[size:" + str(len(self.keys())) + "]"
+
+'''
+TRAVERSAL STRATEGIES
+'''
+
+class TraversalStrategies(object):
+    global_cache = {}
+    def __init__(self, traversal_strategies=None):
+        self.traversal_strategies = traversal_strategies.traversal_strategies 
if traversal_strategies is not None else []
+    def add_strategies(self, traversal_strategies):
+        self.traversal_strategies = self.traversal_strategies + 
traversal_strategies
+    def apply_strategies(self, traversal):
+        for traversal_strategy in self.traversal_strategies:
+            traversal_strategy.apply(traversal)
+    def apply_async_strategies(self, traversal):
+        for traversal_strategy in self.traversal_strategies:
+            traversal_strategy.apply_async(traversal)
+    def __repr__(self):
+        return str(self.traversal_strategies)
+
+
+class TraversalStrategy(object):
+    def __init__(self, strategy_name=None, configuration=None):
+        self.strategy_name = type(self).__name__ if strategy_name is None else 
strategy_name
+        self.configuration = {} if configuration is None else configuration
+    def apply(self, traversal):
+        return
+    def apply_async(self, traversal):
+        return
+    def __eq__(self, other):
+        return isinstance(other, self.__class__)
+    def __hash__(self):
+        return hash(self.strategy_name)
+    def __repr__(self):
+        return self.strategy_name
+
+'''
+BYTECODE
+'''
+
+class Bytecode(object):
+    def __init__(self, bytecode=None):
+        self.source_instructions = []
+        self.step_instructions = []
+        self.bindings = {}
+        if bytecode is not None:
+            self.source_instructions = list(bytecode.source_instructions)
+            self.step_instructions = list(bytecode.step_instructions)
+    def add_source(self, source_name, *args):
+        instruction = [source_name]
+        for arg in args:
+            instruction.append(self.__convertArgument(arg))
+        self.source_instructions.append(instruction)
+    def add_step(self, step_name, *args):
+        instruction = [step_name]
+        for arg in args:
+            instruction.append(self.__convertArgument(arg))
+        self.step_instructions.append(instruction)
+    def __eq__(self, other):
+        if isinstance(other, self.__class__):
+            return self.source_instructions == other.source_instructions and 
self.step_instructions == other.step_instructions
+        else:
+            return False
+    def __convertArgument(self,arg):
+        if isinstance(arg, Traversal):
+            self.bindings.update(arg.bytecode.bindings)
+            return arg.bytecode
+        elif isinstance(arg, dict):
+            newDict = {}
+            for key in arg:
+                newDict[self.__convertArgument(key)] = 
self.__convertArgument(arg[key])
+            return newDict
+        elif isinstance(arg, list):
+            newList = []
+            for item in arg:
+                newList.append(self.__convertArgument(item))
+            return newList
+        elif isinstance(arg, set):
+            newSet = set()
+            for item in arg:
+                newSet.add(self.__convertArgument(item))
+            return newSet
+        elif isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], 
str):
+            self.bindings[arg[0]] = arg[1]
+            return Binding(arg[0],self.__convertArgument(arg[1]))
+        else:
+            return arg
+    def __repr__(self):
+        return (str(self.source_instructions) if len(self.source_instructions) 
> 0 else "") + \\
+               (str(self.step_instructions) if len(self.step_instructions) > 0 
else "")
+
+
+'''
+BINDINGS
+'''
+
+class Bindings(object):
+    def of(self,key,value):
+        if not isinstance(key, str):
+            raise TypeError("Key must be str")
+        return (key,value)
+
+class Binding(object):
+    def __init__(self,key,value):
+        self.key = key
+        self.value = value
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.key == other.key and 
self.value == other.value
+    def __hash__(self):
+        return hash(self.key) + hash(self.value)
+    def __repr__(self):
+        return "binding[" + self.key + "=" + str(self.value) + "]"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 1b70325..b60b867 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -467,7 +467,8 @@ limitations under the License.
                             <dependency>
                                 <groupId>org.codehaus.groovy</groupId>
                                 <artifactId>groovy-all</artifactId>
-                                <version>${groovy.version}</version>
+                                <version>2.4.11</version>
+                                <classifier>indy</classifier>
                                 <scope>runtime</scope>
                             </dependency>
                             <dependency>
@@ -485,84 +486,14 @@ limitations under the License.
                                     <goal>execute</goal>
                                 </goals>
                                 <configuration>
+                                    <properties>
+                                        <property>
+                                            <name>projectBaseDir</name>
+                                            <value>${project.basedir}</value>
+                                        </property>
+                                    </properties>
                                     <scripts>
-                                        <script><![CDATA[
-import org.apache.tinkerpop.gremlin.jsr223.CoreImports
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
-import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
-import org.apache.tinkerpop.gremlin.process.traversal.P
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
-import java.lang.reflect.Modifier
-
-// this is a bit of a copy of what's in SymbolHelper - no way around it 
because this code generation task occurs
-// before the SymbolHelper is available to the plugin.
-def toPythonMap = ["global": "global_",
-                   "as": "as_",
-                   "in": "in_",
-                   "and": "and_",
-                   "or": "or_",
-                   "is": "is_",
-                   "not": "not_",
-                   "from": "from_",
-                   "list": "list_",
-                   "set": "set_",
-                   "all": "all_"]
-def toJavaMap = toPythonMap.collectEntries{k,v -> [(v):k]}
-
-def toPython = { symbol -> toPythonMap.getOrDefault(symbol, symbol) }
-def toJava = { symbol -> toJavaMap.getOrDefault(symbol, symbol) }
-
-def binding = ["enums": CoreImports.getClassImports()
-                                 .findAll { Enum.class.isAssignableFrom(it) }
-                                 .sort { a, b -> a.getSimpleName() <=> 
b.getSimpleName() },
-               "pmethods": P.class.getMethods().
-                                 findAll { 
Modifier.isStatic(it.getModifiers()) }.
-                                 findAll { 
P.class.isAssignableFrom(it.returnType) }.
-                                 collect { toPython(it.name) }.
-                                 unique().
-                                 sort { a, b -> a <=> b },
-               "sourceStepMethods": GraphTraversalSource.getMethods(). // 
SOURCE STEPS
-                                        findAll { 
GraphTraversalSource.class.equals(it.returnType) }.
-                                        findAll {
-                                            !it.name.equals("clone") &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withBindings) &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withRemote) &&
-                                                    
!it.name.equals(TraversalSource.Symbols.withComputer)
-                                        }.
-                                        collect { toPython(it.name) }.
-                                        unique().
-                                        sort { a, b -> a <=> b },
-               "sourceSpawnMethods": GraphTraversalSource.getMethods(). // 
SPAWN STEPS
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) }.
-                                        collect { toPython(it.name) }.
-                                        unique().
-                                        sort { a, b -> a <=> b },
-               "graphStepMethods": GraphTraversal.getMethods().
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) }.
-                                        findAll { !it.name.equals("clone") && 
!it.name.equals("iterate") }.
-                                        collect { toPython(it.name) }.
-                                        unique().
-                                        sort { a, b -> a <=> b },
-               "anonStepMethods": __.class.getMethods().
-                                        findAll { 
GraphTraversal.class.equals(it.returnType) }.
-                                        findAll { 
Modifier.isStatic(it.getModifiers()) }.
-                                        findAll { !it.name.equals("__") && 
!it.name.equals("start") }.
-                                        collect { toPython(it.name) }.
-                                        unique().
-                                        sort { a, b -> a <=> b },
-               "toPython": toPython,
-               "toJava": toJava]
-
-def engine = new groovy.text.GStringTemplateEngine()
-def traversalTemplate = engine.createTemplate(new 
File('${project.basedir}/src/main/resources/TraversalSource.template')).make(binding)
-def traversalFile = new 
File('${project.basedir}/src/main/jython/gremlin_python/process/traversal.py')
-traversalFile.newWriter().withWriter{ it << traversalTemplate }
-
-def graphTraversalTemplate = engine.createTemplate(new 
File('${project.basedir}/src/main/resources/GraphTraversalSource.template')).make(binding)
-def graphTraversalFile = new 
File('${project.basedir}/src/main/jython/gremlin_python/process/graph_traversal.py')
-graphTraversalFile.newWriter().withWriter{ it << graphTraversalTemplate }
-]]>                                     </script>
+                                        
<script>${project.basedir}/glv/generate.groovy</script>
                                     </scripts>
                                 </configuration>
                             </execution>
@@ -573,41 +504,22 @@ graphTraversalFile.newWriter().withWriter{ it << 
graphTraversalTemplate }
                                     <goal>execute</goal>
                                 </goals>
                                 <configuration>
+                                    <properties>
+                                        <property>
+                                            <name>skipTests</name>
+                                            <value>${skipTests}</value>
+                                        </property>
+                                        <property>
+                                            <name>gremlinServerDir</name>
+                                            
<value>${gremlin.server.dir}</value>
+                                        </property>
+                                        <property>
+                                            <name>executionName</name>
+                                            <value>${project.name}</value>
+                                        </property>
+                                    </properties>
                                     <scripts>
-                                        <script>
-                                            <![CDATA[
-import org.apache.tinkerpop.gremlin.server.GremlinServer
-import org.apache.tinkerpop.gremlin.server.Settings
-import org.apache.tinkerpop.gremlin.server.Settings.ScriptEngineSettings
-
-if (${skipTests}) return
-
-log.info("Starting Gremlin Server instances for native testing of 
gremlin-python")
-def settings = 
Settings.read("${gremlin.server.dir}/conf/gremlin-server-modern-py.yaml")
-settings.graphs.graph = 
"${gremlin.server.dir}/conf/tinkergraph-empty.properties"
-settings.scriptEngines["gremlin-groovy"].scripts = 
["${gremlin.server.dir}/scripts/generate-modern.groovy"]
-settings.port = 45940
-
-def server = new GremlinServer(settings)
-server.start().join()
-
-project.setContextValue("gremlin.py.server", server)
-log.info("Gremlin Server with no authentication started on port 45940")
-
-def settingsSecure = 
Settings.read("${gremlin.server.dir}/conf/gremlin-server-modern-py.yaml")
-settingsSecure.graphs.graph = 
"${gremlin.server.dir}/conf/tinkergraph-empty.properties"
-settingsSecure.scriptEngines["gremlin-groovy"].scripts = 
["${gremlin.server.dir}/scripts/generate-modern.groovy"]
-settingsSecure.port = 45941
-settingsSecure.authentication.className = 
"org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator"
-settingsSecure.authentication.config = [credentialsDb: 
"${gremlin.server.dir}/conf/tinkergraph-credentials.properties"]
-
-def serverSecure = new GremlinServer(settingsSecure)
-serverSecure.start().join()
-
-project.setContextValue("gremlin.py.server.secure", serverSecure)
-log.info("Gremlin Server with authentication started on port 45941")
-]]>
-                                        </script>
+                                        
<script>${gremlin.server.dir}/src/test/scripts/test-server-start.groovy</script>
                                     </scripts>
                                 </configuration>
                             </execution>
@@ -618,26 +530,18 @@ log.info("Gremlin Server with authentication started on 
port 45941")
                                     <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>
-                                            <![CDATA[
-import org.apache.tinkerpop.gremlin.server.GremlinServer
-
-if (${skipTests}) return
-
-log.info("Tests for native gremlin-python complete")
-
-def server = project.getContextValue("gremlin.py.server")
-log.info("Shutting down $server")
-server.stop().join()
-
-def serverSecure = project.getContextValue("gremlin.py.server.secure")
-log.info("Shutting down $serverSecure")
-serverSecure.stop().join()
-
-log.info("All Gremlin Server instances are shutdown for gremlin-python")
-]]>
-                                        </script>
+                                        
<script>${gremlin.server.dir}/src/test/scripts/test-server-stop.groovy</script>
                                     </scripts>
                                 </configuration>
                             </execution>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/main/resources/GraphTraversalSource.template
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/resources/GraphTraversalSource.template 
b/gremlin-python/src/main/resources/GraphTraversalSource.template
deleted file mode 100644
index 54b339e..0000000
--- a/gremlin-python/src/main/resources/GraphTraversalSource.template
+++ /dev/null
@@ -1,102 +0,0 @@
-'''
-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.
-'''
-
-import sys
-from .traversal import Traversal
-from .traversal import TraversalStrategies
-from .strategies import VertexProgramStrategy
-from .traversal import Bytecode
-from ..driver.remote_connection import RemoteStrategy
-from .. import statics
-from ..statics import long
-
-class GraphTraversalSource(object):
-    def __init__(self, graph, traversal_strategies, bytecode=None):
-        self.graph = graph
-        self.traversal_strategies = traversal_strategies
-        if bytecode is None:
-          bytecode = Bytecode()
-        self.bytecode = bytecode
-        self.graph_traversal = GraphTraversal
-    def __repr__(self):
-        return "graphtraversalsource[" + str(self.graph) + "]"
-    def get_graph_traversal_source(self):
-        return self.__class__(self.graph, 
TraversalStrategies(self.traversal_strategies), Bytecode(self.bytecode))
-    def get_graph_traversal(self):
-        return self.graph_traversal(self.graph, self.traversal_strategies, 
Bytecode(self.bytecode))
-
-<% sourceStepMethods.each{ method -> %>
-    def <%= method %>(self, *args):
-        source = self.get_graph_traversal_source()
-        source.bytecode.add_source("<%= toJava.call(method) %>", *args)
-        return source
-<% } %>
-
-    def withRemote(self, remote_connection):
-        source = self.get_graph_traversal_source()
-        
source.traversal_strategies.add_strategies([RemoteStrategy(remote_connection)])
-        return source
-    def withComputer(self,graph_computer=None, workers=None, result=None, 
persist=None, vertices=None, edges=None, configuration=None):
-        return 
self.withStrategies(VertexProgramStrategy(graph_computer,workers,result,persist,vertices,edges,configuration))
-
-<% sourceSpawnMethods.each { method -> %>
-    def <%= method %>(self, *args):
-        traversal = self.get_graph_traversal()
-        traversal.bytecode.add_step("<%= toJava.call(method) %>", *args)
-        return traversal
-<% } %>
-
-class GraphTraversal(Traversal):
-    def __init__(self, graph, traversal_strategies, bytecode):
-        super(GraphTraversal, self).__init__(graph, traversal_strategies, 
bytecode)
-    def __getitem__(self, index):
-        if isinstance(index, int):
-            return self.range(long(index), long(index + 1))
-        elif isinstance(index, slice):
-            return self.range(long(0) if index.start is None else 
long(index.start), long(sys.maxsize) if index.stop is None else 
long(index.stop))
-        else:
-            raise TypeError("Index must be int or slice")
-    def __getattr__(self, key):
-        return self.values(key)
-<% graphStepMethods.each { method -> %>
-    def <%= method %>(self, *args):
-        self.bytecode.add_step("<%= toJava.call(method) %>", *args)
-        return self
-<% } %>
-
-class __(object):
-    graph_traversal = GraphTraversal
-    @classmethod
-    def start(cls):
-        return GraphTraversal(None, None, Bytecode())
-    @classmethod
-    def __(cls, *args):
-        return __.inject(*args)
-
-<% anonStepMethods.each{ method -> %>
-    @classmethod
-    def <%= method %>(cls, *args):
-        return cls.graph_traversal(None, None, Bytecode()).<%= method %>(*args)
-<% } %>
-
-<% anonStepMethods.each{ method -> %>
-def <%= method %>(*args):
-    return __.<%= method %>(*args)
-statics.add_static('<%= method %>', <%= method %>)
-<% } %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/main/resources/TraversalSource.template
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/resources/TraversalSource.template 
b/gremlin-python/src/main/resources/TraversalSource.template
deleted file mode 100644
index 66ea940..0000000
--- a/gremlin-python/src/main/resources/TraversalSource.template
+++ /dev/null
@@ -1,282 +0,0 @@
-'''
-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.
-'''
-
-from aenum import Enum
-from .. import statics
-from ..statics import long
-
-class Traversal(object):
-    def __init__(self, graph, traversal_strategies, bytecode):
-        self.graph = graph
-        self.traversal_strategies = traversal_strategies
-        self.bytecode = bytecode
-        self.side_effects = TraversalSideEffects()
-        self.traversers = None
-        self.last_traverser = None
-    def __repr__(self):
-        return str(self.bytecode)
-    def __eq__(self, other):
-        if isinstance(other, self.__class__):
-            return self.bytecode == other.bytecode
-        else:
-            return False
-    def __iter__(self):
-        return self
-    def __next__(self):
-        if self.traversers is None:
-            self.traversal_strategies.apply_strategies(self)
-        if self.last_traverser is None:
-            self.last_traverser = next(self.traversers)
-        object = self.last_traverser.object
-        self.last_traverser.bulk = self.last_traverser.bulk - 1
-        if self.last_traverser.bulk <= 0:
-            self.last_traverser = None
-        return object
-    def toList(self):
-        return list(iter(self))
-    def toSet(self):
-        return set(iter(self))
-    def iterate(self):
-        while True:
-            try: self.nextTraverser()
-            except StopIteration: return self
-    def nextTraverser(self):
-        if self.traversers is None:
-            self.traversal_strategies.apply_strategies(self)
-        if self.last_traverser is None:
-            return next(self.traversers)
-        else:
-            temp = self.last_traverser
-            self.last_traverser = None
-            return temp
-    def next(self, amount=None):
-        if amount is None:
-            return self.__next__()
-        else:
-            count = 0
-            tempList = []
-            while count < amount:
-                count = count + 1
-                try: temp = self.__next__()
-                except StopIteration: return tempList
-                tempList.append(temp)
-            return tempList
-    def promise(self, cb=None):
-        self.traversal_strategies.apply_async_strategies(self)
-        future_traversal = self.remote_results
-        future = type(future_traversal)()
-        def process(f):
-            try:
-                traversal = f.result()
-            except Exception as e:
-                future.set_exception(e)
-            else:
-                self.traversers = iter(traversal.traversers)
-                self.side_effects = traversal.side_effects
-                if cb:
-                    try:
-                        result = cb(self)
-                    except Exception as e:
-                        future.set_exception(e)
-                    else:
-                        future.set_result(result)
-                else:
-                    future.set_result(self)
-        future_traversal.add_done_callback(process)
-        return future
-
-<% enums.each { e -> %>
-<%= e.getSimpleName() %> = Enum('<%= e.getSimpleName() %>', ' <%= 
e.getEnumConstants().sort{a, b -> a.name() <=> b.name()}.collect{v -> 
toPython.call(v.name())}.join(" ") %>')
-<% e.getEnumConstants().each {v -> %>
-statics.add_static('<%= toPython.call(v.name()) %>', <%= 
v.getDeclaringClass().getSimpleName() %>.<%= toPython.call(v.name()) %>)<% } %>
-<% } %>
-
-class P(object):
-    def __init__(self, operator, value, other=None):
-        self.operator = operator
-        self.value = value
-        self.other = other
-
-<% pmethods.each { method -> %>
-    @staticmethod
-    def <%= method %>(*args):
-        return P("<%= toPython.call(method) %>", *args)
-<% } %>
-    def and_(self, arg):
-        return P("and", self, arg)
-    def or_(self, arg):
-        return P("or", self, arg)
-    def __eq__(self, other):
-        return isinstance(other, self.__class__) and self.operator == 
other.operator and self.value == other.value and self.other == other.other
-    def __repr__(self):
-        return self.operator + "(" + str(self.value) + ")" if self.other is 
None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
-    def and_(self, arg):
-        return P("and", self, arg)
-    def or_(self, arg):
-        return P("or", self, arg)
-    def __eq__(self, other):
-        return isinstance(other, self.__class__) and self.operator == 
other.operator and self.value == other.value and self.other == other.other
-    def __repr__(self):
-        return self.operator + "(" + str(self.value) + ")" if self.other is 
None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
-<% pmethods.findAll{!it.equals("clone")}.each { method -> %>
-def <%= method %>(*args):
-    return P.<%= method %>(*args)
-statics.add_static('<%= method %>',<%= method %>)
-<% } %>
-
-'''
-TRAVERSER
-'''
-
-class Traverser(object):
-    def __init__(self, object, bulk=None):
-        if bulk is None:
-            bulk = long(1)
-        self.object = object
-        self.bulk = bulk
-    def __repr__(self):
-        return str(self.object)
-    def __eq__(self, other):
-        return isinstance(other, self.__class__) and self.object == 
other.object
-
-'''
-TRAVERSAL SIDE-EFFECTS
-'''
-
-class TraversalSideEffects(object):
-    def keys(self):
-        return set()
-    def get(self, key):
-        raise KeyError(key)
-    def __getitem__(self, key):
-        return self.get(key)
-    def __repr__(self):
-        return "sideEffects[size:" + str(len(self.keys())) + "]"
-
-'''
-TRAVERSAL STRATEGIES
-'''
-
-class TraversalStrategies(object):
-    global_cache = {}
-    def __init__(self, traversal_strategies=None):
-        self.traversal_strategies = traversal_strategies.traversal_strategies 
if traversal_strategies is not None else []
-    def add_strategies(self, traversal_strategies):
-        self.traversal_strategies = self.traversal_strategies + 
traversal_strategies
-    def apply_strategies(self, traversal):
-        for traversal_strategy in self.traversal_strategies:
-            traversal_strategy.apply(traversal)
-    def apply_async_strategies(self, traversal):
-        for traversal_strategy in self.traversal_strategies:
-            traversal_strategy.apply_async(traversal)
-    def __repr__(self):
-        return str(self.traversal_strategies)
-
-
-class TraversalStrategy(object):
-    def __init__(self, strategy_name=None, configuration=None):
-        self.strategy_name = type(self).__name__ if strategy_name is None else 
strategy_name
-        self.configuration = {} if configuration is None else configuration
-    def apply(self, traversal):
-        return
-    def apply_async(self, traversal):
-        return
-    def __eq__(self, other):
-        return isinstance(other, self.__class__)
-    def __hash__(self):
-        return hash(self.strategy_name)
-    def __repr__(self):
-        return self.strategy_name
-
-'''
-BYTECODE
-'''
-
-class Bytecode(object):
-    def __init__(self, bytecode=None):
-        self.source_instructions = []
-        self.step_instructions = []
-        self.bindings = {}
-        if bytecode is not None:
-            self.source_instructions = list(bytecode.source_instructions)
-            self.step_instructions = list(bytecode.step_instructions)
-    def add_source(self, source_name, *args):
-        instruction = [source_name]
-        for arg in args:
-            instruction.append(self.__convertArgument(arg))
-        self.source_instructions.append(instruction)
-    def add_step(self, step_name, *args):
-        instruction = [step_name]
-        for arg in args:
-            instruction.append(self.__convertArgument(arg))
-        self.step_instructions.append(instruction)
-    def __eq__(self, other):
-        if isinstance(other, self.__class__):
-            return self.source_instructions == other.source_instructions and 
self.step_instructions == other.step_instructions
-        else:
-            return False
-    def __convertArgument(self,arg):
-        if isinstance(arg, Traversal):
-            self.bindings.update(arg.bytecode.bindings)
-            return arg.bytecode
-        elif isinstance(arg, dict):
-            newDict = {}
-            for key in arg:
-                newDict[self.__convertArgument(key)] = 
self.__convertArgument(arg[key])
-            return newDict
-        elif isinstance(arg, list):
-            newList = []
-            for item in arg:
-                newList.append(self.__convertArgument(item))
-            return newList
-        elif isinstance(arg, set):
-            newSet = set()
-            for item in arg:
-                newSet.add(self.__convertArgument(item))
-            return newSet
-        elif isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], 
str):
-            self.bindings[arg[0]] = arg[1]
-            return Binding(arg[0],self.__convertArgument(arg[1]))
-        else:
-            return arg
-    def __repr__(self):
-        return (str(self.source_instructions) if len(self.source_instructions) 
> 0 else "") + \\
-               (str(self.step_instructions) if len(self.step_instructions) > 0 
else "")
-
-
-'''
-BINDINGS
-'''
-
-class Bindings(object):
-    def of(self,key,value):
-        if not isinstance(key, str):
-            raise TypeError("Key must be str")
-        return (key,value)
-
-class Binding(object):
-    def __init__(self,key,value):
-        self.key = key
-        self.value = value
-    def __eq__(self, other):
-        return isinstance(other, self.__class__) and self.key == other.key and 
self.value == other.value
-    def __hash__(self):
-        return hash(self.key) + hash(self.value)
-    def __repr__(self):
-        return "binding[" + self.key + "=" + str(self.value) + "]"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
 
b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
deleted file mode 100644
index 163d2ef..0000000
Binary files 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
 and /dev/null differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
 
b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
deleted file mode 100644
index 23b4a61..0000000
--- 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-
-// an init script that returns a Map allows explicit setting of global 
bindings.
-def globals = [:]
-
-// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
-// Note that the name of the key in the "global" map is unimportant.
-globals << [hook : [
-  onStartUp: { ctx ->
-    ctx.logger.info("Loading 'modern' graph data.")
-    TinkerFactory.generateModern(graph)
-  }
-] as LifeCycleHook]
-
-// define the default TraversalSource to bind queries to - this one will be 
named "g".
-globals << [g : graph.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
 
b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
deleted file mode 100644
index a1b595f..0000000
--- 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-# 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.
-
-# Note that TinkerPop does not include gremlin-python dependencies in
-# its distributions. This file cannot be used as a configuration file
-# to Gremlin Server unless those dependencies are installed on the
-# Gremlin Server path with:
-#
-# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python x.y.z
-#
-# The primary change in this file to enable the GremlinJythonScriptEngine
-# is the addition of "gremlin-jython" to the "scriptEngines" field.
-
-host: localhost
-port: 45940
-scriptEvaluationTimeout: 30000
-graphs: {
-  graph: 
src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties}
-plugins:
-  - tinkerpop.tinkergraph
-scriptEngines: {
-  gremlin-groovy: {
-    imports: [java.lang.Math],
-    staticImports: [java.lang.Math.PI],
-    scripts: 
[src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy]},
-  gremlin-jython: {},
-  gremlin-python: {}
-}
-serializers:
-  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}    
        # application/vnd.gremlin-v1.0+gryo
-  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { 
serializeResultToString: true }}        # 
application/vnd.gremlin-v1.0+gryo-stringd
-  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, 
config: { ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }} # 
application/vnd.gremlin-v1.0+json
-  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, 
config: { ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} # 
application/vnd.gremlin-v2.0+json
-  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: 
{ ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}    
    # application/json
-metrics: {
-  slf4jReporter: {enabled: true, interval: 180000}}
-strictTransactionManagement: false
-threadPoolBoss: 1
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 65536
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-authentication: {
-  authenticator: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
-  config: {
-    credentialsDb: 
src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties}}
-

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
 
b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
deleted file mode 100644
index 909b92b..0000000
--- 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-#  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.
-#
-gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
-gremlin.tinkergraph.vertexIdManager=LONG
-gremlin.tinkergraph.graphLocation=src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
-gremlin.tinkergraph.graphFormat=gryo
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
 
b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
deleted file mode 100644
index e09a13d..0000000
--- 
a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
-gremlin.tinkergraph.vertexIdManager=LONG
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
----------------------------------------------------------------------
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
index 8690206..d0bd8fd 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
@@ -28,6 +28,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.server.auth.AllowAllAuthenticator;
 import org.apache.tinkerpop.gremlin.server.auth.Authenticator;
 import org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer;
+import 
org.apache.tinkerpop.gremlin.server.handler.AbstractAuthenticationHandler;
 import org.apache.tinkerpop.gremlin.server.util.DefaultGraphManager;
 import info.ganglia.gmetric4j.gmetric.GMetric;
 import org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor;
@@ -409,7 +410,7 @@ public class Settings {
          * The fully qualified class name of the {@link Authenticator} 
implementation. This class name will be
          * used to load the implementation from the classpath. Defaults to 
{@link AllowAllAuthenticator} when
          * not specified.
-         * @deprecated As of release 3.2.5, replaced by {@link authenticator}.
+         * @deprecated As of release 3.2.5, replaced by {@link #authenticator}.
          */
         @Deprecated
         public String className = AllowAllAuthenticator.class.getName();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
----------------------------------------------------------------------
diff --git 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
index 70957c9..12d78fc 100644
--- 
a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
+++ 
b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java
@@ -431,7 +431,10 @@ public enum MetricManager {
      * {@link GremlinScriptEngine} implementations achieve greater parity 
these metrics will get expanded.
      */
     public void registerGremlinScriptEngineMetrics(final GremlinScriptEngine 
engine, final String... prefix) {
-        if (engine instanceof GremlinGroovyScriptEngine) {
+        // only register if metrics aren't already registered. typically only 
happens in testing where two gremlin
+        // server instances are running in the same jvm. they will share the 
same metrics if that is the case since
+        // the MetricsManager is static
+        if (engine instanceof GremlinGroovyScriptEngine && 
getRegistry().getNames().stream().noneMatch(n -> 
n.endsWith("long-run-compilation-count"))) {
             final GremlinGroovyScriptEngine gremlinGroovyScriptEngine = 
(GremlinGroovyScriptEngine) engine;
             getRegistry().register(
                     MetricRegistry.name(GremlinServer.class, 
ArrayUtils.add(prefix, "long-run-compilation-count")),

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/hadoop-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/pom.xml b/hadoop-gremlin/pom.xml
index f002e3f..3ed26d4 100644
--- a/hadoop-gremlin/pom.xml
+++ b/hadoop-gremlin/pom.xml
@@ -221,6 +221,20 @@ limitations under the License.
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 57d1262..867aaf4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -462,21 +462,7 @@ limitations under the License.
                 <plugin>
                     <groupId>org.codehaus.gmavenplus</groupId>
                     <artifactId>gmavenplus-plugin</artifactId>
-                    <version>1.5</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>addSources</goal>
-                                <goal>addTestSources</goal>
-                                <goal>generateStubs</goal>
-                                <goal>compile</goal>
-                                <goal>testGenerateStubs</goal>
-                                <goal>testCompile</goal>
-                                <goal>removeStubs</goal>
-                                <goal>removeTestStubs</goal>
-                            </goals>
-                        </execution>
-                    </executions>
+                    <version>1.6</version>
                     <configuration>
                         <targetBytecode>1.8</targetBytecode>
                         <invokeDynamic>true</invokeDynamic>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb159e8b/spark-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/spark-gremlin/pom.xml b/spark-gremlin/pom.xml
index dc3c0ea..560e236 100644
--- a/spark-gremlin/pom.xml
+++ b/spark-gremlin/pom.xml
@@ -361,6 +361,20 @@
             <plugin>
                 <groupId>org.codehaus.gmavenplus</groupId>
                 <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>addSources</goal>
+                            <goal>addTestSources</goal>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>compileTests</goal>
+                            <goal>removeStubs</goal>
+                            <goal>removeTestStubs</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>

Reply via email to