code: def run_check(self):
      # Check for C++ assets
      for file in ("CMakeLists.txt", "cmake", "src"):
          path = os.path.abspath(os.path.join(here, "dist", file))
          if not os.path.exists(path):
              raise Exception(
                  "Path is missing! {}\nMust run `yarn build_python` before building sdist so cmake files are installed".format(
                      path
                  )
              )
      # Check for JS assets
      if not SKIP_JS_FILES:
          for file in (
              "labextension/package.json",
              "nbextension/static/index.js",
          ):
              path = os.path.abspath(
                  os.path.join(here, "perspective", file)
              )
              if not os.path.exists(path):
                  raise Exception(
                      "Path is missing! {}\nMust run `yarn build` before building sdist so JS files are installed".format(
                          path
                      )
                  )
  
imports: from __future__ import print_function
  import os
  import os.path
  import platform
  import re
  import subprocess
  import sys
  import sysconfig
  from codecs import open
  from distutils.version import LooseVersion
  from jupyter_packaging import get_data_files, wrap_installers, get_version
  from setuptools import Extension, find_packages, setup
  from setuptools.command.build_ext import build_ext
  from setuptools.command.sdist import sdist
label_desc: Use image node_id 2 for calling the PSPCheckSDist obj's underlying member method code with example usage: obj.run_check() without return types