You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
2.3 KiB

  1. import sqlite3
  2. from concurrent.futures import ThreadPoolExecutor
  3. import grpc
  4. import schema_pb2 as stub
  5. import schema_pb2_grpc as service
  6. SERVER_ADDR = '0.0.0.0:1234'
  7. class Database(service.DatabaseServicer):
  8. def PutUser(self, request, context):
  9. try:
  10. con = sqlite3.connect('db.sqlite')
  11. cur = con.cursor()
  12. print(request.user_id, request.user_name)
  13. cur.execute("INSERT OR REPLACE INTO User (id, name) VALUES (?, ?)",
  14. (request.user_id, request.user_name))
  15. con.commit()
  16. con.close()
  17. return stub.Response(status=1)
  18. except Exception as inst:
  19. con.close()
  20. return stub.Response(status=0)
  21. def GetUsers(self, request, context):
  22. try:
  23. con = sqlite3.connect('db.sqlite')
  24. cur = con.cursor()
  25. res = cur.execute('SELECT id, name FROM User')
  26. users = []
  27. for user in res.fetchall():
  28. users.append({'user_id': user[0], 'user_name': user[1]})
  29. con.commit()
  30. con.close()
  31. return stub.UsersResponse(users=users)
  32. except Exception:
  33. con.close()
  34. return stub.UsersResponse(users=[])
  35. def DeleteUser(self, request, context):
  36. try:
  37. con = sqlite3.connect('db.sqlite')
  38. cur = con.cursor()
  39. cur.execute('DELETE FROM User WHERE id=?', (request.user_id, ))
  40. con.commit()
  41. con.close()
  42. return stub.Response(status=1)
  43. except Exception:
  44. con.close()
  45. return stub.Response(status=0)
  46. def create_table():
  47. try:
  48. con = sqlite3.connect('db.sqlite')
  49. cur = con.cursor()
  50. cur.execute('CREATE TABLE IF NOT EXISTS User(id INTEGER PRIMARY KEY, name TEXT)')
  51. con.commit()
  52. con.close()
  53. print('Created a table')
  54. except Exception:
  55. print('DOESNT WORK')
  56. if __name__ == '__main__':
  57. create_table()
  58. try:
  59. server = grpc.server(ThreadPoolExecutor(max_workers=30))
  60. service.add_DatabaseServicer_to_server(Database(), server)
  61. server.add_insecure_port(SERVER_ADDR)
  62. server.start()
  63. print(f'listening on {SERVER_ADDR}')
  64. server.wait_for_termination()
  65. except KeyboardInterrupt:
  66. print('Interrupted by user. Shutting down...')