def METHOD_NAME(self, **options):
    if not self.check_memory():
        raise Exception(
            "This instance has less than the recommended memory. Try running the import from a larger instance."
        )
    url = options["url"]
    self.stdout.write("Downloading data from %s ..." % (url))
    tmp = tempfile.NamedTemporaryFile()
    urllib.request.urlretrieve(url, tmp.name)
    tempdir = unzip(tmp.name)
    data_path = os.path.join(tempdir, "Data")
    try:
        self.stdout.write("Creating temp table..")
        self.create_temp_table()
        # import ONSPD into the temp table
        cmd = LocalImporter()
        cmd.table_name = self.temp_table_name
        cmd.path = data_path
        cmd.header = HEADERS["aug2022"]
        cmd.import_onspd()
        # grab the index CREATE statements from the old table before
        # we drop it. This will ensure we create the indexes on the
        # new table with the exact names django expects them to have
        # (e.g: uk_geo_utils_onspd_pcds_9d376544_uniq )
        # so we can still run migrations and stuff on it
        indexes = self.get_index_statements()
        self.stdout.write("Building indexes..")
        for index in indexes:
            self.cursor.execute(index["temp_index_create_statement"])
        # drop the old table, swap in the new one and rename the indexes
        # do this bit in a transaction so if it fails
        # we don't leave ourselves in an inconsistent state
        with transaction.atomic():
            self.stdout.write("Swapping tables..")
            self.swap_tables()
            self.stdout.write("Renaming indexes..")
            for index in indexes:
                self.cursor.execute(index["index_rename_statement"])
    finally:
        self.cursor.execute(
            "DROP TABLE IF EXISTS %s;" % (self.temp_table_name)
        )
        self.stdout.write("Cleaning up temp files..")
        self.cleanup(tempdir)
    self.stdout.write("...done")