docs: def add_single_resource(self, ref, **properties):
          """ Add a single resource, without trying to enumerate it's contents
          :param ref:
          :return:
          """
  
          t = self.doc.find_first('Root.Datafile', value=ref)
  
          if t:
              self.prt("Datafile exists for '{}', deleting".format(ref))
              self.doc.remove_term(t)
  
          term_name = self.classify_url(ref)
  
          ref, path, name = self.extract_path_name(ref)
  
          self.prt("Adding resource for '{}'".format(ref))
  
          try:
              encoding, ri = self.run_row_intuit(path, self._cache)
          except Exception as e:
              self.warn("Failed to intuit '{}'; {}".format(path, e))
              return None
  
          if not name:
  
              name = sha1(slugify(path).encode('ascii')).hexdigest()[:12]
  
              # xlrd gets grouchy if the name doesn't start with a char
              try:
                  int(name[0])
                  name = 'a' + name[1:]
              except:
                  pass
  
          if 'name' in properties:
              name = properties['name']
              del properties['name']
  
          return self.sections.resources.new_term(term_name, ref, name=name,
                                                  startline=ri.start_line,
                                                  headerlines=','.join(str(e) for e in ri.header_lines),
                                                  encoding=encoding,
                                                  **properties)