I am trying to find a workaround to the following problem. I have seen it quasi-described in this SO question, yet not really answered.
The following code fails, starting with a fresh graph:
from py2neo import neo4j
def add_test_nodes():
    # Add a test node manually
    alice = g.get_or_create_indexed_node("Users", "user_id", 12345, {"user_id":12345})
def do_batch(graph):
    # Begin batch write transaction
    batch = neo4j.WriteBatch(graph)
    # get some updated node properties to add
    new_node_data = {"user_id":12345, "name": "Alice"}
    # batch requests
    a = batch.get_or_create_in_index(neo4j.Node, "Users", "user_id", 12345, {})
    batch.set_properties(a, new_node_data)  #<-- I'm the problem
    # execute batch requests and clear
    batch.run()
    batch.clear()
if __name__ == '__main__':
    # Initialize Graph DB service and create a Users node index
    g = neo4j.GraphDatabaseService()
    users_idx = g.get_or_create_index(neo4j.Node, "Users")
    # run the test functions
    add_test_nodes()
    alice = g.get_or_create_indexed_node("Users", "user_id", 12345)
    print alice
    do_batch(g)
    # get alice back and assert additional properties were added
    alice = g.get_or_create_indexed_node("Users", "user_id", 12345)
    assert "name" in alice
In short, I wish, in one batch transaction, to update existing indexed node properties.  The failure is occurring at the batch.set_properties line, and it is because the BatchRequest object returned by the previous line is not being interpreted as a valid node.  Though not entirely indentical, it feels like I am attempting something like the answer posted here
Some specifics
>>> import py2neo
>>> py2neo.__version__
'1.6.0'
>>> g = py2neo.neo4j.GraphDatabaseService()
>>> g.neo4j_version
(2, 0, 0, u'M06') 
Update
If I split the problem into separate batches, then it can run without error:
def do_batch(graph):
    # Begin batch write transaction
    batch = neo4j.WriteBatch(graph)
    # get some updated node properties to add
    new_node_data = {"user_id":12345, "name": "Alice"}
    # batch request 1
    batch.get_or_create_in_index(neo4j.Node, "Users", "user_id", 12345, {})
    # execute batch request and clear
    alice = batch.submit()
    batch.clear()
    # batch request 2
    batch.set_properties(a, new_node_data)
    # execute batch request and clear
    batch.run()
    batch.clear()
This works for many nodes as well. Though I do not love the idea of splitting the batch up, this might be the only way at the moment. Anyone have some comments on this?