code: def source(self):
      # START
      # This block should be removed when we update upstream:
      # https://github.com/conan-io/conan-center-index/tree/master/recipes/arrow/
      if not self.version in self.conan_data.get("sources", {}):
          import shutil
  
          top_level = os.environ.get("ARROW_HOME")
          shutil.copytree(
              os.path.join(top_level, "cpp"),
              os.path.join(self.source_folder, "cpp"),
          )
          shutil.copytree(
              os.path.join(top_level, "format"),
              os.path.join(self.source_folder, "format"),
          )
          top_level_files = [
              ".env",
              "LICENSE.txt",
              "NOTICE.txt",
          ]
          for top_level_file in top_level_files:
              shutil.copy(
                  os.path.join(top_level, top_level_file),
                  self.source_folder,
              )
          return
      # END
      get(
          self,
          **self.conan_data["sources"][self.version],
          filename=f"apache-arrow-{self.version}.tar.gz",
          destination=self.source_folder,
          strip_root=True,
      )
  
imports: from conan import ConanFile
  from conan.errors import ConanInvalidConfiguration
  from conan.tools.microsoft import is_msvc_static_runtime, is_msvc, check_min_vs
  from conan.tools.files import export_conandata_patches, apply_conandata_patches, get, copy, rmdir
  from conan.tools.build import check_min_cppstd, cross_building
  from conan.tools.scm import Version
  from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
  import os
  import glob
label_desc: Use image node_id 27 for calling the ArrowConan obj's underlying member method code with example usage: obj.source() without return types