Neeraj P Yetheendran 2024-05-02 09:36:02 +00:00 zatwierdzone przez GitHub
commit 83bb566e88
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 51 dodań i 18 usunięć

Wyświetl plik

@ -212,12 +212,16 @@ class Index:
).exclude(object_id__in=existing_pks)
stale_entries.delete()
def delete_stale_entries(self):
for model in get_indexed_models():
# We dont need to delete stale entries for non-root models,
# since we already delete them by deleting roots.
if not model._meta.parents:
def delete_stale_entries(self, models=None):
if models:
for model in models:
self.delete_stale_model_entries(model)
else:
for model in get_indexed_models():
# We dont need to delete stale entries for non-root models,
# since we already delete them by deleting roots.
if not model._meta.parents:
self.delete_stale_model_entries(model)
def add_item(self, obj):
self.add_items(obj._meta.model, [obj])
@ -599,8 +603,8 @@ class MySQLSearchRebuilder:
def __init__(self, index):
self.index = index
def start(self):
self.index.delete_stale_entries()
def start(self, models=None):
self.index.delete_stale_entries(models)
return self.index
def finish(self):

Wyświetl plik

@ -227,12 +227,16 @@ class Index:
).exclude(object_id__in=existing_pks)
stale_entries.delete()
def delete_stale_entries(self):
for model in get_indexed_models():
# We dont need to delete stale entries for non-root models,
# since we already delete them by deleting roots.
if not model._meta.parents:
def delete_stale_entries(self, models=None):
if models:
for model in models:
self.delete_stale_model_entries(model)
else:
for model in get_indexed_models():
# We dont need to delete stale entries for non-root models,
# since we already delete them by deleting roots.
if not model._meta.parents:
self.delete_stale_model_entries(model)
def add_item(self, obj):
self.add_items(obj._meta.model, [obj])
@ -698,8 +702,8 @@ class PostgresSearchRebuilder:
def __init__(self, index):
self.index = index
def start(self):
self.index.delete_stale_entries()
def start(self, models=None):
self.index.delete_stale_entries(models)
return self.index
def finish(self):

Wyświetl plik

@ -70,9 +70,9 @@ class Command(BaseCommand):
self.write("Backend '%s' doesn't require rebuilding" % backend_name)
return
models_grouped_by_index = group_models_by_index(
backend, get_indexed_models()
).items()
indexed_models = getattr(self, "only_models", get_indexed_models())
models_grouped_by_index = group_models_by_index(backend, indexed_models).items()
if not models_grouped_by_index:
self.write(backend_name + ": No indices to rebuild")
@ -81,7 +81,11 @@ class Command(BaseCommand):
# Start rebuild
rebuilder = backend.rebuilder_class(index)
index = rebuilder.start()
if getattr(self, "only_models", None):
index = rebuilder.start(models)
else:
index = rebuilder.start()
# Add models
for model in models:
@ -138,6 +142,14 @@ class Command(BaseCommand):
type=int,
help="Set number of records to be fetched at once for inserting into the index",
)
parser.add_argument(
"--only",
action="store",
dest="only_models",
default=None,
type=str,
help="Only update indexes on certain models. (comma separated, '?' to get list of options)",
)
def handle(self, **options):
self.verbosity = options["verbosity"]
@ -153,6 +165,19 @@ class Command(BaseCommand):
# index the 'default' backend only
backend_names = ["default"]
if options["only_models"]:
all_models = {model._meta.label: model for model in get_indexed_models()}
if options["only_models"] == "?":
self.stdout.write(",".join(all_models.keys()))
return
self.only_models = []
for model_label in options["only_models"].split(","):
model = all_models.get(model_label, None)
if model:
self.only_models.append(model)
else:
self.stderr.write(f"{model_label} is not a valid model name")
return
# Update backends
for backend_name in backend_names:
self.update_backend(