code: def get_services_by_explosion(self, servicegroups):
          # pylint: disable=access-member-before-definition
          
          # First we tag the hg so it will not be explode
          # if a son of it already call it
          self.already_exploded = True
  
          # Now the recursive part
          # rec_tag is set to False every HG we explode
          # so if True here, it must be a loop in HG
          # calls... not GOOD!
          if self.rec_tag:
              logger.error("[servicegroup::%s] got a loop in servicegroup definition",
                           self.get_name())
              if hasattr(self, 'members'):
                  return self.members
  
              return ''
          # Ok, not a loop, we tag it and continue
          self.rec_tag = True
  
          sg_mbrs = self.get_servicegroup_members()
          for sg_mbr in sg_mbrs:
              servicegroup = servicegroups.find_by_name(sg_mbr.strip())
              if servicegroup is not None:
                  value = servicegroup.get_services_by_explosion(servicegroups)
                  if value is not None:
                      self.add_members(value)
  
          if hasattr(self, 'members'):
              return self.members
  
          return ''
docs: Get all services of this servicegroup and add it in members container
  
          :param servicegroups: servicegroups object
          :type servicegroups: alignak.objects.servicegroup.Servicegroups
          :return: return empty string or list of members
          :rtype: str or list