main.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import sys
  2. sys.path.append("wrappers")
  3. from modelverse import *
  4. import os
  5. import json
  6. import time
  7. time.sleep(1)
  8. init(sys.argv[1])
  9. login("JSON", "JSON")
  10. def json_service(port):
  11. def print_out_json(data):
  12. if isinstance(data, dict):
  13. # Serialize dictionary
  14. service_set(port, "D")
  15. service_set(port, len(data))
  16. for key, value in data.items():
  17. service_set(port, key)
  18. print_out_json(value)
  19. elif isinstance(data, list):
  20. # Serialize list
  21. service_set(port, "L")
  22. service_set(port, len(data))
  23. for value in data:
  24. print_out_json(value)
  25. elif data is None:
  26. service_set(port, "N")
  27. else:
  28. # Is a primitive value (normally), so send as-is
  29. service_set(port, "P")
  30. service_set(port, data)
  31. def fetch_data():
  32. data = service_get(port)
  33. if data == "D":
  34. rval = {}
  35. length = service_get(port)
  36. for _ in range(length):
  37. key = service_get(port)
  38. rval[key] = fetch_data()
  39. elif data == "L":
  40. rval = []
  41. length = service_get(port)
  42. for _ in range(length):
  43. rval.append(fetch_data())
  44. elif data == "P":
  45. rval = service_get(port)
  46. elif data == "N":
  47. rval = None
  48. else:
  49. raise Exception("Unknown data type: " + data)
  50. return rval
  51. start = time.time()
  52. mode = service_get(port)
  53. try:
  54. if mode == "decode":
  55. service_set(port, "OK")
  56. json_str = service_get(port)
  57. json_data = json.loads(json_str)
  58. print_out_json(json_data)
  59. elif mode == "encode":
  60. service_set(port, "OK")
  61. json_data = fetch_data()
  62. json_str = json.dumps(json_data)
  63. service_set(port, json_str)
  64. else:
  65. raise Exception("No such mode: " + mode)
  66. except Exception as e:
  67. service_set(port, str(e))
  68. raise
  69. service_register("JSON", json_service)
  70. try:
  71. while raw_input() != "STOP":
  72. pass
  73. except EOFError:
  74. import time
  75. while 1:
  76. time.sleep(1.0)
  77. finally:
  78. service_stop()