Skip to content

Commit

Permalink
Moved some functions from initialize_world to UINode
Browse files Browse the repository at this point in the history
  • Loading branch information
Egil Moeller committed Sep 9, 2009
1 parent 1ec4cdf commit ca8dd7d
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 77 deletions.
126 changes: 69 additions & 57 deletions LocalNode.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,62 +262,6 @@ def _get_subscriptions(self, **kw):
def _get_message_links(self, **kw):
return Tables.MessageLink.select_objs(self._conn, node_id = self.get_local_node()['node_id'], **kw)


class UINode(Node.Node):
def set_annotation(self, name, value, message = None, peer = None):
Tables.Annotation.create_or_update(
self._conn,
{'node_id': self.node_id,
'name': name,
'message_id': message and message['message_id'] or None,
'peer_id': peer and peer['peer_id'] or None,
'value': value})

def get_annotation(self, name, message = None, peer = None):
return Tables.Annotation.select_obj(
self._conn, self.node_id,
name,
message and message['message_id'] or None,
peer and peer['peer_id'] or None)['value']

def post_message(self, message):
message['message_id'] = self.calculate_message_id(message)
message['message_challenge_id'] = self.calculate_message_challenge_id(message)
self._register_message(message)
self.update_local_subscription(message)
return message

def update_local_subscription(self, message, subscribed = 1):
subscription = Tables.Subscription.select_obj(self._conn, node_id = self.get_local_node()['node_id'], peer_id = self.get_local_node()['node_id'], message_id = message['message_id'])
if subscription is None:
subscription = {'peer_id': self.get_local_node()['node_id'],
'message_id': message['message_id'],
'local_is_subscribed': 1,
'local_center_node_is_subscribed': 1,
'local_center_node_id': self.get_local_node()['node_id'],
'local_center_distance': 1,
'remote_is_subscribed': 1,
'remote_center_node_is_subscribed': 1,
'remote_center_node_id': self.get_local_node()['node_id'],
'remote_center_distance': 0}
subscription['remote_is_subscribed'] = subscribed
subscription['remote_center_node_is_subscribed'] = subscribed
self.update_subscription(subscription)

def delete_local_subscription(self, message):
subscription = Tables.Subscription.select_obj(self._conn, node_id = self.get_local_node()['node_id'], peer_id = self.get_local_node()['node_id'], message_id = message['message_id'])
if subscription is not None:
self.delete_subscription(subscription)

def post_text_message(self, content):
return self.post_message({'content': content})

def post_link_message(self, link_description, src_message, dst_message):
return self.post_message({'content': link_description,
'src_message_id': src_message['message_id'],
'dst_message_id': dst_message['message_id']})


class ExprNode(Node.Node):
def get_message_by_expr(self, expr):
with self.get_messages_by_expr(expr) as msgs:
Expand Down Expand Up @@ -487,7 +431,75 @@ def _message_expr_to_sql_isbasetype(self, expr, prev, info, data):
["inv", "basetypeis", expr[1]],
prev, info)

class UINode(ExprNode):
def set_annotation(self, name, value, message = None, peer = None):
Tables.Annotation.create_or_update(
self._conn,
{'node_id': self.node_id,
'name': name,
'message_id': message and message['message_id'] or None,
'peer_id': peer and peer['peer_id'] or None,
'value': value})

def get_annotation(self, name, message = None, peer = None):
return Tables.Annotation.select_obj(
self._conn, self.node_id,
name,
message and message['message_id'] or None,
peer and peer['peer_id'] or None)['value']

def post_message(self, message):
message['message_id'] = self.calculate_message_id(message)
message['message_challenge_id'] = self.calculate_message_challenge_id(message)
self._register_message(message)
self.update_local_subscription(message)
return message

def update_local_subscription(self, message, subscribed = 1):
subscription = Tables.Subscription.select_obj(self._conn, node_id = self.get_local_node()['node_id'], peer_id = self.get_local_node()['node_id'], message_id = message['message_id'])
if subscription is None:
subscription = {'peer_id': self.get_local_node()['node_id'],
'message_id': message['message_id'],
'local_is_subscribed': 1,
'local_center_node_is_subscribed': 1,
'local_center_node_id': self.get_local_node()['node_id'],
'local_center_distance': 1,
'remote_is_subscribed': 1,
'remote_center_node_is_subscribed': 1,
'remote_center_node_id': self.get_local_node()['node_id'],
'remote_center_distance': 0}
subscription['remote_is_subscribed'] = subscribed
subscription['remote_center_node_is_subscribed'] = subscribed
self.update_subscription(subscription)

def delete_local_subscription(self, message):
subscription = Tables.Subscription.select_obj(self._conn, node_id = self.get_local_node()['node_id'], peer_id = self.get_local_node()['node_id'], message_id = message['message_id'])
if subscription is not None:
self.delete_subscription(subscription)

def post_text_message(self, content):
return self.post_message({'content': content})

def post_link_message(self, link_description, src_message, dst_message):
return self.post_message({'content': link_description,
'src_message_id': src_message['message_id'],
'dst_message_id': dst_message['message_id']})

def post_usage_message(self, message, usage):
return self.post_link_message(
'linkisusage',
self.post_link_message('usagelink', message, usage),
self.get_message_by_expr(["system", "usage"]))

def post_typelink_message(self, message, type):
return self.post_usage_message(
self.post_link_message('typelink', message, type),
self.get_message_by_expr(["system", "type"]))

def post_subtypelink_message(self, type, parent_type):
self.post_usage_message(
self.post_link_message('subtypelink', type, parent_type),
self.get_message_by_expr(["system", "subtype"]))

class LocalNode(ThreadSyncNode, IntrospectionNode, UINode, ExprNode):
class LocalNode(ThreadSyncNode, IntrospectionNode, UINode):
pass
23 changes: 3 additions & 20 deletions Test/initialize_world.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,16 @@ def create(n, name):
n.set_annotation("global_attribute_cache", "/system/%s" % name, res)
return res

def setusage(n, m, u):
return n.post_link_message(
'linkisusage', n.post_link_message('usagelink', m, u),
n.get_message_by_expr(["system", "usage"]))

def settype(n, m, t):
setusage(
n,
n.post_link_message('typelink', m, t),
n.get_message_by_expr(["system", "type"]))

def setsubtype(n, t, p):
setusage(
n,
n.post_link_message('subtypelink', t, p),
n.get_message_by_expr(["system", "subtype"]))

def createtype(n, name, parent):
res = create(n, name)
settype(n, res, n.get_message_by_expr(["system", "type"]))
setsubtype(n, res, parent)
n.post_typelink_message(res, n.get_message_by_expr(["system", "type"]))
n.post_subtypelink_message(res, n.get_message_by_expr(["system", "type"]))
return res


create(n0, 'usage')
create(n0, 'type')
settype(n0, n0.get_message_by_expr(["system", "type"]), n0.get_message_by_expr(["system", "type"]))
n0.post_typelink_message(n0.get_message_by_expr(["system", "type"]), n0.get_message_by_expr(["system", "type"]))
create(n0, 'subtype')
createtype(n0, 'text', n0.get_message_by_expr(["system", "type"]))
createtype(n0, 'xml', n0.get_message_by_expr(["system", "text"]))
Expand Down

0 comments on commit ca8dd7d

Please sign in to comment.