docs: def _prepare_model_data(packages, linked, pip=None,
                              private_packages=None):
          """Prepare model data for the packages table model."""
          pip = pip if pip else []
          private_packages = private_packages if private_packages else {}
  
          data = []
  
          if private_packages is not None:
              for pkg in private_packages:
                  if pkg in packages:
                      p_data = packages.get(pkg)
                      versions = p_data.get('versions', '') if p_data else []
                      private_versions = private_packages[pkg]['versions']
                      all_versions = sort_versions(list(set(versions +
                                                            private_versions)))
                      packages[pkg]['versions'] = all_versions
                  else:
                      private_versions = sort_versions(
                          private_packages[pkg]['versions'])
                      private_packages[pkg]['versions'] = private_versions
                      packages[pkg] = private_packages[pkg]
          else:
              private_packages = {}
  
          linked_packages = {}
          for canonical_name in linked:
              name, version, b = tuple(canonical_name.rsplit('-', 2))
              linked_packages[name] = {'version': version}
  
          pip_packages = {}
          for canonical_name in pip:
              name, version, b = tuple(canonical_name.rsplit('-', 2))
              pip_packages[name] = {'version': version}
  
          packages_names = sorted(list(set(list(linked_packages.keys()) +
                                           list(pip_packages.keys()) +
                                           list(packages.keys()) +
                                           list(private_packages.keys())
                                           )
                                       )
                                  )
  
          for name in packages_names:
              p_data = packages.get(name)
  
              summary = p_data.get('summary', '') if p_data else ''
              url = p_data.get('home', '') if p_data else ''
              license_ = p_data.get('license', '') if p_data else ''
              versions = p_data.get('versions', '') if p_data else []
              version = p_data.get('latest_version', '') if p_data else ''
  
              if name in pip_packages:
                  type_ = C.PIP_PACKAGE
                  version = pip_packages[name].get('version', '')
                  status = C.INSTALLED
              elif name in linked_packages:
                  type_ = C.CONDA_PACKAGE
                  version = linked_packages[name].get('version', '')
                  status = C.INSTALLED
  
                  if version in versions:
                      vers = versions
                      upgradable = not version == vers[-1] and len(vers) != 1
                      downgradable = not version == vers[0] and len(vers) != 1
  
                      if upgradable and downgradable:
                          status = C.MIXGRADABLE
                      elif upgradable:
                          status = C.UPGRADABLE
                      elif downgradable:
                          status = C.DOWNGRADABLE
              else:
                  type_ = C.CONDA_PACKAGE
                  status = C.NOT_INSTALLED
  
                  if version == '' and len(versions) != 0:
                      version = versions[-1]
  
              row = {C.COL_ACTION: C.ACTION_NONE,
                     C.COL_PACKAGE_TYPE: type_,
                     C.COL_NAME: name,
                     C.COL_DESCRIPTION: summary.capitalize(),
                     C.COL_VERSION: version,
                     C.COL_STATUS: status,
                     C.COL_URL: url,
                     C.COL_LICENSE: license_,
                     C.COL_INSTALL: False,
                     C.COL_REMOVE: False,
                     C.COL_UPGRADE: False,
                     C.COL_DOWNGRADE: False,
                     C.COL_ACTION_VERSION: None
                     }
  
              data.append(row)
          return data