actions = [[type = ACTION_OUTPUT action = [port = 1 maxLen = 0]];],作为灯泡中get_or_create的关键字

时间:2014-07-02 09:52:46

标签: cassandra titan bulbs

我正在使用TitanGraphDB + Cassandra。我正在按照以下方式启动Titan

cd titan-cassandra-0.3.1
bin/titan.sh config/titan-server-rexster.xml config/titan-server-cassandra.properties

我有一个Rexster shell,我可以使用它与上面的Titan + Cassandra进行交流。

cd rexster-console-2.3.0
bin/rexster-console.sh

我想从我的python程序中编写Titan Graph DB。我正在使用灯泡包。

我使用灯泡从python创建一个顶点,如下所示。

 fe1 = self.g.vertices.get_or_create('switch_dpid',switch_dpid,
          {'actionOutputPort':actionOutputPort,
           'switch_state':'FE_SWITCH_UPDATED',
           'matchInPort': MatchInPort,
           'type': 'flow_entry',
           'user_state':'FE_USER_ADD',
'actions': ['type':'ACTION_OUTPUT', 'action':[port=actionOutputPort maxLen=0];]})

这给了我一个错误

  'actions': ['type':'ACTION_OUTPUT', 'action':[port=actionOutputPort maxLen=0];]}) 
  SyntaxError: invalid syntax

我期望从Rexster控制台获得的输出如下。

switch_dpid=00:00:00:00:00:00:02:05,
actionOutputPort=1,
switch_state=FE_SWITCH_UPDATED,
matchInPort=2,
flow_entry_id=0x4ee30a9400000012,
type=flow_entry,
actions=[[type=ACTION_OUTPUT action=[port=1 maxLen=0]];],
user_state=FE_USER_ADD

如何对actions进行编程,使其如上所述。?

1 个答案:

答案 0 :(得分:2)

您正在将Groovy语法与Python混合使用。

actions是一个字典,action是一个字典,所以在Python中它应该是:

'actions': {'type': 'ACTION_OUTPUT', 
            'action': {port: actionOutputPort,
                       maxLen: 0}}

注意使用dict函数创建Python字典通常更方便(更少引号):

'actions' = dict(type = 'ACTION_OUTPUT',
                 action = dict(port = actionOutputPort, 
                               maxLen = 0))