docs: def _count_objs(self, obj, path=None, **kwargs):
          """
          cycles through the object and adds in count values
  
          Args:
          -----
              obj: the object to parse
              path: the current path
  
          kwargs:
          -------
              current: a dictionary of counts for current call
              sub_val: the value to use for subtotal aggregation
  
          """
          sub_val = None
          # pdb.set_trace()
          if isinstance(obj, dict):
              for key, value in obj.items():
                  if isinstance(value, (list, dict)):
                      kwargs = self._count_objs(value,
                                                self.make_path(key, path),
                                                **kwargs)
                  else:
                      if self.make_path(key, path) == self.sub_total:
                          # pdb.set_trace()
                          sub_val = value
                      kwargs['current'] = self._increment_prop(key,
                                                               path,
                                                               **kwargs)
          elif isinstance(obj, list):
              for item in obj:
                  if isinstance(item, (list, dict)):
                      kwargs = self._count_objs(item, path, **kwargs)
                  else:
                      if path == self.sub_total:
                          pdb.set_trace()
                          sub_val = item
                      kwargs['current'] = self._increment_prop(path, **kwargs)
          else:
              kwargs['current'] = self._increment_prop(path, **kwargs)
              if path == self.sub_total:
                  pdb.set_trace()
                  sub_val = item
          if kwargs.get('sub_val') is None:
              kwargs['sub_val'] = sub_val
          return kwargs