Esempio n. 1
0
 def __init__(self, token):
    self.token = token
    self.API = Bnter(token)
Esempio n. 2
0
 def __init__(self, token):
     self.token = token
     self.API = Bnter(token)
Esempio n. 3
0
class EdgeManager():
   token = None
   api = None
   
   def __init__(self, token):
      self.token = token
      self.API = Bnter(token)
   
   # increase weight of edge from user1 to user2, 
   # if we haven't already accounted for this 
   # conversations
   def updateEdge(self, n1, n2, conversation_id):
      edge = db.GqlQuery("SELECT * FROM Edge " +
                          "WHERE node1 = :1 AND " +
                                "node2 = :2 AND " +
                                "edge_id = :3",
                          n1, n2, conversation_id).get()
      if not edge:
         edge = Edge(
           node1 = n1.lower(),
           node2 = n2.lower(),
           edge_id = conversation_id
         ).put()
      return edge

   def saveUserInfo(self, users):
      for u in users:
         user = db.GqlQuery("SELECT * FROM User " +
                             "WHERE username = :1",
                             u['username']).get()
         if not user:
            user = User(
               username = u['username'],
               image = u['url']
            ).put()
      
   def updateNodeSet(self, nodeSet):
      cid = nodeSet['id']
      users = nodeSet['users']
      user1 = users[0]['username']
      user2 = users[1]['username']
      
      self.saveUserInfo(users)
      self.updateEdge(user1, user2, cid)
      if len(users) == 3:
         user3 = users[2]['username']
         self.updateEdge(user2, user3, cid)
         self.updateEdge(user1, user3, cid)
      
   def fromCache(self, key):
      obj = memcache.get(key)
      return obj
      
   def setCache(self, key, obj):
      memcache.set(key, obj, 1800)
      
   def updateEdgesForUser(self, user_name, page):
      cacheKey = "edgesFor%s%s" % (user_name, page)
      data = self.fromCache(cacheKey)
      
      if not data:
         data = self.API.getAttributionSets(user_name, page)
         nodeSets = data['nodeSets']
         self.setCache(cacheKey, data)
      
      for nodeSet in data['nodeSets']:
         self.updateNodeSet(nodeSet)
      return data
      
   def getEdgesForUser(self, user_name):
      edges = db.GqlQuery("SELECT * FROM Edge " +
                           "WHERE node1 = :1 LIMIT 1",
                           user_name).fetch(100)
      edges2 = db.GqlQuery("SELECT * FROM Edge " +
                           "WHERE node2 = :1 LIMIT 1",
                           user_name).fetch(100)
      edgeSet = EdgeSet()
      edges.extend(edges2)
      for e in edges:
        edgeSet.addOrUpdate(e.node1, e.node2)
      return edgeSet.getEdges()
      
Esempio n. 4
0
class EdgeManager():
    token = None
    api = None

    def __init__(self, token):
        self.token = token
        self.API = Bnter(token)

    # increase weight of edge from user1 to user2,
    # if we haven't already accounted for this
    # conversations
    def updateEdge(self, n1, n2, conversation_id):
        edge = db.GqlQuery(
            "SELECT * FROM Edge " + "WHERE node1 = :1 AND " +
            "node2 = :2 AND " + "edge_id = :3", n1, n2, conversation_id).get()
        if not edge:
            edge = Edge(node1=n1.lower(),
                        node2=n2.lower(),
                        edge_id=conversation_id).put()
        return edge

    def saveUserInfo(self, users):
        for u in users:
            user = db.GqlQuery("SELECT * FROM User " + "WHERE username = :1",
                               u['username']).get()
            if not user:
                user = User(username=u['username'], image=u['url']).put()

    def updateNodeSet(self, nodeSet):
        cid = nodeSet['id']
        users = nodeSet['users']
        user1 = users[0]['username']
        user2 = users[1]['username']

        self.saveUserInfo(users)
        self.updateEdge(user1, user2, cid)
        if len(users) == 3:
            user3 = users[2]['username']
            self.updateEdge(user2, user3, cid)
            self.updateEdge(user1, user3, cid)

    def fromCache(self, key):
        obj = memcache.get(key)
        return obj

    def setCache(self, key, obj):
        memcache.set(key, obj, 1800)

    def updateEdgesForUser(self, user_name, page):
        cacheKey = "edgesFor%s%s" % (user_name, page)
        data = self.fromCache(cacheKey)

        if not data:
            data = self.API.getAttributionSets(user_name, page)
            nodeSets = data['nodeSets']
            self.setCache(cacheKey, data)

        for nodeSet in data['nodeSets']:
            self.updateNodeSet(nodeSet)
        return data

    def getEdgesForUser(self, user_name):
        edges = db.GqlQuery("SELECT * FROM Edge " + "WHERE node1 = :1 LIMIT 1",
                            user_name).fetch(100)
        edges2 = db.GqlQuery(
            "SELECT * FROM Edge " + "WHERE node2 = :1 LIMIT 1",
            user_name).fetch(100)
        edgeSet = EdgeSet()
        edges.extend(edges2)
        for e in edges:
            edgeSet.addOrUpdate(e.node1, e.node2)
        return edgeSet.getEdges()