You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/10/04 18:16:20 UTC
[jira] [Commented] (TINKERPOP-1455) Provide String-based
withStrategy()/withoutStrategy() for language variant usage
[ https://issues.apache.org/jira/browse/TINKERPOP-1455?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15546200#comment-15546200 ]
ASF GitHub Bot commented on TINKERPOP-1455:
-------------------------------------------
GitHub user okram opened a pull request:
https://github.com/apache/tinkerpop/pull/447
TINKERPOP-1455: Provide String-based withStrategy()/withoutStrategy() for language variant usage
https://issues.apache.org/jira/browse/TINKERPOP-1455
Added TraversalSource.withStrategy(String, Object...) and TraversalSource.withoutStrategy(String). This allows Gremlin language variants (e.g. Gremlin-Python) to add and remove strategies from a traversal source. Prior to this moment, strategy addition/removal was via strategy instances (Java objects) and classes (Class objects). That is not language variants friendly.
This branch is backwards compatible. If a `TraversalStrategy` does not have a builder and exposes a static `instance()`-method, then `g.withStrategy('com.blah.MyStrategy')` will work as expected. If a `TraversalStrategy` does have a builder (that is, can be configured), then it should expose a static `create(Configuration)`-method. Note Gremlin language variants could not use `withStrategies()` prior to this and thus, this addition is backwards compatible. Finally, `TraversalSource.withComputer(Object...)` was added as well for the same reasons.
```
>>> g = g.withStrategy('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy','vertices',hasLabel('person'),'edges',has('weight',gt(0.5)))
>>> g.V().name.toList()
[u'marko', u'vadas', u'josh', u'peter']
```
The CHANGELOG, gremlin-variants.asciidoc, and upgrade doc have all been updated accordingly.
VOTE +1
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/tinkerpop TINKERPOP-1455
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/tinkerpop/pull/447.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #447
----
commit e6e59e417f119c1b71a43141fce04cb212bc0a58
Author: Marko A. Rodriguez <ok...@gmail.com>
Date: 2016-10-04T14:37:07Z
first push. We now have TraversalSource.withStrategy(String, Object...) and TraversalSource.withoutStrategy(String). Added a test case to Gremlin-Python that uses SubgraphStrategy and it works :).
commit 95557bf3aac279282e3f3779d68ce195bd4ca058
Author: Marko A. Rodriguez <ok...@gmail.com>
Date: 2016-10-04T16:26:12Z
added static create(Configuration) methods to all Builder-based strategies except EventStrategy as that requires Java objects :(. Deprecated PartitionStrategy.Builder.addReadParition() in favor of readParitions(String...). Computer now has a Configuration-based constructor and corresponding withComputer(Object...) arguments.
commit 20dec2076b79441c7dcf06827014ace72fcaea6c
Author: Marko A. Rodriguez <ok...@gmail.com>
Date: 2016-10-04T18:15:31Z
updated gremlin-variants.asciidoc with new withStrategy()/withoutStrategy() method discussion. Built docs. Success.
----
> Provide String-based withStrategy()/withoutStrategy() for language variant usage
> --------------------------------------------------------------------------------
>
> Key: TINKERPOP-1455
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1455
> Project: TinkerPop
> Issue Type: Improvement
> Components: language-variant, process
> Affects Versions: 3.2.2
> Reporter: Marko A. Rodriguez
> Assignee: Marko A. Rodriguez
>
> Right now {{withStrategies()}} is not supported by Gremlin-Python. Why? Because strategies are created via Java and thus you can't do stuff like:
> {code}
> g.withStrategies(SubgraphStrategy.build()...create())
> {code}
> Now, we have strategies that we have made "native" to {{GraphTraversalSource}} by way of {{withXXX}}. For example: {{withSideEffect()}}, {{withSack()}}, {{withRemote()}}, {{withPath()}}, etc.
> In order to generally support any strategy created by a user for use from a language variant, we should support lambda based strategies. E.g.:
> {code}
> g.withStrategies(lambda : "SubgraphStrategy.build()...create()")
> {code}
> Like any other lambda, it is executed server side using the respective {{ScriptEngine}}.
> Next, {{withoutStrategies()}} should support {{String...}} so you can do:
> {code}
> g.withoutStrategies("com.stuff.MyStrategy", "com.stuff.MyOtherStrategy")
> {code}
> ..instead of having to pass in the {{Class}} object.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)