docs: def _node_to_model(tree_or_item, package, parent=None,
                     lucent_id=TRANSLUCENT_BINDER_ID):
      """Given a tree, parse to a set of models"""
      if 'contents' in tree_or_item:
          # It is a binder.
          tree = tree_or_item
          # Grab the package metadata, so we have required license info
          metadata = package.metadata.copy()
          if tree['id'] == lucent_id:
              metadata['title'] = tree['title']
              binder = TranslucentBinder(metadata=metadata)
          else:
              try:
                  package_item = package.grab_by_name(tree['id'])
                  binder = BinderItem(package_item, package)
              except KeyError:  # Translucent w/ id
                  metadata.update({
                     'title': tree['title'],
                     'cnx-archive-uri': tree['id'],
                     'cnx-archive-shortid': tree['shortId']})
                  binder = Binder(tree['id'], metadata=metadata)
          for item in tree['contents']:
              node = _node_to_model(item, package, parent=binder,
                                    lucent_id=lucent_id)
              if node.metadata['title'] != item['title']:
                  binder.set_title_for_node(node, item['title'])
          result = binder
      else:
          # It is a document.
          item = tree_or_item
          package_item = package.grab_by_name(item['id'])
          result = adapt_item(package_item, package)
      if parent is not None:
          parent.append(result)
      return result