serialize.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. import six
  4. import yaml
  5. from compose.config import types
  6. from compose.config.config import V1
  7. from compose.config.config import V2_0
  8. def serialize_config_type(dumper, data):
  9. representer = dumper.represent_str if six.PY3 else dumper.represent_unicode
  10. return representer(data.repr())
  11. yaml.SafeDumper.add_representer(types.VolumeFromSpec, serialize_config_type)
  12. yaml.SafeDumper.add_representer(types.VolumeSpec, serialize_config_type)
  13. def serialize_config(config):
  14. services = {service.pop('name'): service for service in config.services}
  15. if config.version == V1:
  16. for service_dict in services.values():
  17. if 'network_mode' not in service_dict:
  18. service_dict['network_mode'] = 'bridge'
  19. output = {
  20. 'version': V2_0,
  21. 'services': services,
  22. 'networks': config.networks,
  23. 'volumes': config.volumes,
  24. }
  25. return yaml.safe_dump(
  26. output,
  27. default_flow_style=False,
  28. indent=2,
  29. width=80)