docs: def _load_resource(self, source_r, abs_path=False):
          """The CSV package has no resources, so we just need to resolve the URLs to them. Usually, the
              CSV package is built from a file system ackage on a publically acessible server. """
  
          from itertools import islice
          from metapack.exc import MetapackError
          from os.path import splitext
  
          # Refetch the resource ... IIRC b/c the source_r resource may actually be from
          # a different package. So r is the resource we want to possibly modify in this package,
          # while source_r is from a different souce package, whose data is being loaded into this
          # one.
  
          r = self.datafile(source_r.name)
  
          if self.reuse_resources:
              self.prt("Re-using data for '{}' ".format(r.name))
          else:
              self.prt("Loading data for '{}' ".format(r.name))
  
          if not r.name:
              raise MetapackError(f"Resource/reference term has no name: {str(r)}")
  
          # Special handing for SQL should not be done here; it should be done in Rowgenerators, probably.
          if r.term_is('root.sql'):
              new_r = self.doc['Resources'].new_term('Root.Datafile', '')
              new_r.name = r.name
  
              self.doc.remove_term(r)
  
              r = new_r
  
          r.url = 'data/' + r.name + '.csv' # Re-writing the URL for the resource.
  
          path = join(self.package_path.path, r.url)
  
          makedirs(dirname(path), exist_ok=True)
  
          if not self.reuse_resources or not exists(path):
  
              if self.reuse_resources:
                  self.prt("Resource {} doesn't exist, rebuilding".format(path))
  
              if exists(path):
                  remove(path)
  
              gen = islice(source_r, 1, None)
              headers = source_r.headers
              self.write_csv(path, headers, gen)
  
          for k, v in source_r.post_iter_meta.items():
              r[k] = v
  
          try:
              if source_r.errors:
                  for col_name, errors in source_r.errors.items():
                      self.warn("ERRORS for column '{}' ".format(col_name))
                      for e in islice(errors,5):
                          self.warn('   {}'.format(e))
                      if len(errors) > 5:
                          self.warn("... and {} more ".format(len(errors)-5))
          except AttributeError:
              pass # Maybe generator does not track errors
  
          if source_r.errors:
              self.err("Resource processing generated conversion errors")
  
          # Writing between resources so row-generating programs and notebooks can
          # access previously created resources. We have to clean the doc before writing it
  
          ref = self._write_doc()
  
          # What a wreck ... we also have to get rid of the 'Transform' values, since the CSV files
          # that are written don't need them, and a lot of intermediate processsing ( specifically,
          # jupyter Notebooks, ) does not load them.
          p = FileSystemPackageBuilder(ref, self.package_root)
          p._clean_doc()
  
          ref = p._write_doc()