main.py 2.4 KB

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