def clear_old_indexes(site: SiteConfiguration, config: Optional[AppConfiguration] = None): if config is None: config = AppConfiguration() keys = Keys(config.key_prefix) index_alias = keys.index_alias(site.url) redis_client = get_search_connection(index_alias) try: current_index = redis_client.info()['index_name'] except ResponseError: log.error("Index alias does not exist: %s", index_alias) current_index = None old_indexes = [ i for i in redis_client.redis.execute_command('FT._LIST') if i.startswith(index_alias) and i != current_index ] for idx in old_indexes: redis_client.redis.execute_command('FT.DROPINDEX', idx) return True
import logging import click from sitesearch import tasks from sitesearch.config import AppConfiguration config = AppConfiguration() log = logging.getLogger(__name__) @click.argument('site') @click.command() def index(site): """Index the app's configured sites in RediSearch.""" site = config.sites.get(site) if site is None: valid_sites = ", ".join(config.sites.keys()) raise click.BadArgumentUsage( f"The site you gave does not exist. Valid sites: {valid_sites}") tasks.index(site, force=True)
def app_config(): yield AppConfiguration(key_prefix="sitesearch:test", env="test")