io.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import shutil
  2. from .. import constants, logger
  3. from . import _json
  4. def copy_registered_textures(dest, registration):
  5. logger.debug('io.copy_registered_textures(%s, %s)', dest, registration)
  6. for value in registration.values():
  7. copy(value['file_path'], dest)
  8. def copy(src, dst):
  9. logger.debug('io.copy(%s, %s)' % (src, dst))
  10. shutil.copy(src, dst)
  11. def dump(filepath, data, options=None):
  12. options = options or {}
  13. logger.debug('io.dump(%s, data, options=%s)', filepath, options)
  14. compress = options.get(constants.COMPRESSION, constants.NONE)
  15. if compress == constants.MSGPACK:
  16. try:
  17. import msgpack
  18. except ImportError:
  19. logger.error('msgpack module not found')
  20. raise
  21. logger.info('Dumping to msgpack')
  22. func = lambda x,y: msgpack.dump(x, y)
  23. mode = 'wb'
  24. else:
  25. round_off = options.get(constants.ENABLE_PRECISION)
  26. if round_off:
  27. _json.ROUND = options[constants.PRECISION]
  28. else:
  29. _json.ROUND = None
  30. logger.info('Dumping to JSON')
  31. func = lambda x,y: _json.json.dump(x, y, indent=4)
  32. mode = 'w'
  33. logger.info('Writing to %s', filepath)
  34. with open(filepath, mode=mode) as stream:
  35. func(data, stream)
  36. def load(filepath, options):
  37. logger.debug('io.load(%s, %s)', filepath, options)
  38. compress = options.get(constants.COMPRESSION, constants.NONE)
  39. if compress == constants.MSGPACK:
  40. try:
  41. import msgpack
  42. except ImportError:
  43. logger.error('msgpack module not found')
  44. raise
  45. module = msgpack
  46. mode = 'rb'
  47. else:
  48. logger.info('Loading JSON')
  49. module = _json.json
  50. mode = 'r'
  51. with open(filepath, mode=mode) as stream:
  52. data = module.load(stream)
  53. return data