code: def delete(self):
      tables = self.get_tables()
      tables = [
          key for key, val in tables.items() if val["type"] != "table"
      ]
      if len(tables) > 0:
          raise Exception(
              f"Project '{self.name}' can not be deleted, because it contains tables: {', '.join(tables)}"
          )
  
      is_cloud = Config().get("cloud", False)
      if is_cloud is True:
          self.record.deleted_at = datetime.datetime.now()
      else:
          db.session.delete(self.record)
          self.record = None
          self.name = None
          self.company_id = None
          self.id = None
      db.session.commit()
  
imports: import datetime
  from typing import List
  from collections import OrderedDict
  import sqlalchemy
  import numpy
  from mindsdb_sql.parser.ast.base import ASTNode
  from mindsdb_sql import parse_sql
  from mindsdb.interfaces.storage import db
  from mindsdb.utilities.config import Config
  from mindsdb.interfaces.model.model_controller import ModelController
  from mindsdb.interfaces.database.views import ViewController
  from mindsdb.utilities.context import context
  from mindsdb.utilities.exception import EntityExistsError
  import mindsdb.utilities.profiler
label_desc: Use image node_id 4 for calling the Project obj's underlying member method code with example usage: obj.delete() without return types