-
Notifications
You must be signed in to change notification settings - Fork 575
Expand file tree
/
Copy pathto_python.rb
More file actions
42 lines (38 loc) · 1.17 KB
/
to_python.rb
File metadata and controls
42 lines (38 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frozen_string_literal: true
# @summary
# Convert an object into a String containing its Python representation
#
# @example how to output Python
# # output Python to a file
# $listen = '0.0.0.0'
# $port = 8000
# file { '/opt/acme/etc/settings.py':
# content => inline_epp(@("SETTINGS")),
# LISTEN = <%= $listen.to_python %>
# PORT = <%= $mailserver.to_python %>
# | SETTINGS
# }
Puppet::Functions.create_function(:to_python) do
# @param object
# The object to be converted
#
# @return [String]
# The String representation of the object
dispatch :to_python do
param 'Any', :object
end
def to_python(object)
serialized = Puppet::Pops::Serialization::ToDataConverter.convert(object, rich_data: true)
serialized_to_python(serialized)
end
def serialized_to_python(serialized)
case serialized
when true then 'True'
when false then 'False'
when nil then 'None'
when Array then "[#{serialized.map { |x| serialized_to_python(x) }.join(', ')}]"
when Hash then "{#{serialized.map { |k, v| "#{serialized_to_python(k)}: #{serialized_to_python(v)}" }.join(', ')}}"
else serialized.inspect
end
end
end