main.py 2.2 KB

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