social_graph_snippets.py 1.7 KB

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