code: def getSubscription(self, name, remove=True, root=None):
          
          if root is not None:
              root = os.path.normpath(os.path.normcase(root))
              if root not in self.sub_by_root:
                  return None
              if name not in self.sub_by_root[root]:
                  return None
              sub = self.sub_by_root[root][name]
              if remove:
                  del self.sub_by_root[root][name]
                  # don't let this grow unbounded
                  if name in self.subs:
                      del self.subs[name]
              return sub
  
          if name not in self.subs:
              return None
          sub = self.subs[name]
          if remove:
              del self.subs[name]
          return sub
docs: Retrieve the data associated with a named subscription
  
          If remove is True (the default), the subscription data is removed
          from the buffer.  Otherwise the data is returned but left in
          the buffer.
  
          Returns None if there is no data associated with `name`
  
          If root is not None, then only return the subscription
          data that matches both root and name.  When used in this way,
          remove processing impacts both the unscoped and scoped stores
          for the subscription data.