text: #!/usr/bin/python
  
  from ansible.parsing.yaml.objects import AnsibleUnicode
  
  
  class FilterModule(object):
      def filters(self):
          return {
              'range_list': self.range_list
          }
  
      # converts number list into range list.
      # here input parameter and return value as list
      # example: [12, 13, 14, 17] into ["12-14", "17"]
      def _convert_number_to_range_list(self, num_list):
          num_list.sort()
          range_list = []
          range_min = num_list[0]
          for num in num_list:
              next_val = num + 1
              if next_val not in num_list:
                  if range_min != num:
                      range_list.append(str(range_min) + '-' + str(num))
                  else:
                      range_list.append(str(range_min))
                  next_index = num_list.index(num) + 1
                  if next_index < len(num_list):
                      range_min = num_list[next_index]
  
          # here, range_list is a list of strings
          return range_list
  
      def range_list(self, num_list):
          if not num_list:
              msg = "Input param 'num_list' is blank."
              raise Exception(msg)
          try:
              # splitting a string (comma delimited list) into
              # list of numbers
              # example: "12,13,14,17" string into [12,13,14,17]
              num_list = [int(num.strip(' '))
                          for num in num_list.split(",")]
          except ValueError as exc:
              msg = ("Invalid number in input param "
                     "'num_list': %s" % exc)
              raise Exception(msg)
  
          range_list = self._convert_number_to_range_list(num_list)
  
          # converts into comma delimited range list as string
          return ','.join(range_list)
  