docs: def plugins(self, plugin_type='all', sort='id', direction='asc',
                  size=1000, offset=0, all=True, loops=0, since=None, **filterset):
          """plugins
          Returns a list of of the plugins and their associated families.  For
          simplicity purposes, the plugin family names will be injected into the
          plugin data so that only 1 list is returned back with all of the
          information.
          """
          plugins = []
  
          # First we need to generate the basic payload that we will be augmenting
          # to build the
          payload = {
              'size': size,
              'offset': offset,
              'type': plugin_type,
              'sortField': sort,
              'sortDirection': direction.upper(),
          }
  
          # If there was a filter given, we will need to populate that.
          if len(filterset) > 0:
              fname = list(filterset.keys())[0]
              if fname in self._xrefs:
                  fname = 'xrefs:%s' % fname.replace('_', '-')
              payload['filterField'] = fname
              payload['filterString'] = filterset[list(filterset.keys())[0]]
  
          # We also need to check if there was a datetime object sent to us and
          # parse that down if given.
          if since is not None and isinstance(since, date):
              payload['since'] = calendar.timegm(since.utctimetuple())
  
          # And now we run through the loop needed to pull all of the data.  This
          # may take some time even though we are pulling large data sets.  At the
          # time of development of this module, there were over 55k active plugins
          # and over 7k passive ones.
          while all or loops > 0:
              # First things first, we need to query the data.
              data = self.raw_query('plugin', 'init', data=payload)
              if not data:
                  return []
  
              # This no longer works in 4.4 as the family name is already
              # referenced.  Will re-activate this code when I can get a SC4.2
              # Instance up and running to test...
              # ---
              # Next we convert the family dictionary list into a flat dictionary.
              #fams = {}
              #for famitem in data['families']:
              #    fams[famitem['id']] = famitem['name']
  
              # Then we parse thtrough the data set, adding in the family name
              # into the plugin definition before adding it into the plugins list.
              for plugin in data['plugins']:
              #    plugin['familyName'] = fams[plugin['familyID']]
                  plugins.append(plugin)
              # ---
  
              # Next its time to increment the offset so that we get a new data
              # set.  We will also check here to see if the length really is the
              # same as whats specified in the size variable.  If it isnt, then
              # we have reached the end of the dataset and might as well set
              # the continue variable to False.
              if len(data['plugins']) < size:
                  all = False
                  loops = 0
              else:
                  loops -= 1
                  payload['offset'] += len(data['plugins'])
          return plugins