social_graph_snippets.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding: utf-8 -*-
  2. from collections import deque
  3. class Graph(object):
  4. def bfs(self, source, dest):
  5. if source is None:
  6. return False
  7. queue = deque()
  8. queue.append(source)
  9. source.visit_state = State.visited
  10. while queue:
  11. node = queue.popleft()
  12. print(node)
  13. if dest is node:
  14. return True
  15. for adjacent_node in node.adj_nodes.values():
  16. if adjacent_node.visit_state == State.unvisited:
  17. queue.append(adjacent_node)
  18. adjacent_node.visit_state = State.visited
  19. return False
  20. class Person(object):
  21. def __init__(self, id, name):
  22. self.id = id
  23. self.name = name
  24. self.friend_ids = []
  25. class LookupService(object):
  26. def __init__(self):
  27. self.lookup = {} # key: person_id, value: person_server
  28. def get_person(self, person_id):
  29. person_server = self.lookup[person_id]
  30. return person_server.people[person_id]
  31. class PersonServer(object):
  32. def __init__(self):
  33. self.people = {} # key: person_id, value: person
  34. def get_people(self, ids):
  35. results = []
  36. for id in ids:
  37. if id in self.people:
  38. results.append(self.people[id])
  39. return results
  40. class UserGraphService(object):
  41. def __init__(self, person_ids, lookup):
  42. self.lookup = lookup
  43. self.person_ids = person_ids
  44. self.visited_ids = set()
  45. def bfs(self, source, dest):
  46. # Use self.visited_ids to track visited nodes
  47. # Use self.lookup to translate a person_id to a Person
  48. pass