@@ -1621,8 +1621,9 @@ def _sync_imported_files(version, build, changed_files):
1621
1621
# Remove old HTMLFiles from ElasticSearch
1622
1622
remove_indexed_files (
1623
1623
model = HTMLFile ,
1624
- version = version ,
1625
- build = build ,
1624
+ project_slug = version .project .slug ,
1625
+ version_slug = version .slug ,
1626
+ build_id = build ,
1626
1627
)
1627
1628
1628
1629
# Delete SphinxDomain objects from previous versions
@@ -1844,6 +1845,47 @@ def remove_build_storage_paths(paths):
1844
1845
storage .delete_directory (storage_path )
1845
1846
1846
1847
1848
+ @app .task (queue = 'web' )
1849
+ def remove_search_indexes (project_slug , version_slug = None ):
1850
+ """Wrapper around ``remove_indexed_files`` to make it a task."""
1851
+ remove_indexed_files (
1852
+ model = HTMLFile ,
1853
+ project_slug = project_slug ,
1854
+ version_slug = version_slug ,
1855
+ )
1856
+
1857
+
1858
+ def clean_project_resources (project , version = None ):
1859
+ """
1860
+ Delete all extra resources used by `version` of `project`.
1861
+
1862
+ It removes:
1863
+
1864
+ - Artifacts from storage.
1865
+ - Search indexes from ES.
1866
+
1867
+ :param version: Version instance. If isn't given,
1868
+ all resources of `project` will be deleted.
1869
+
1870
+ .. note::
1871
+ This function is usually called just before deleting project.
1872
+ Make sure to not depend on the project object inside the tasks.
1873
+ """
1874
+ # Remove storage paths
1875
+ storage_paths = []
1876
+ if version :
1877
+ storage_paths = version .get_storage_paths ()
1878
+ else :
1879
+ storage_paths = project .get_storage_paths ()
1880
+ remove_build_storage_paths .delay (storage_paths )
1881
+
1882
+ # Remove indexes
1883
+ remove_search_indexes .delay (
1884
+ project_slug = project .slug ,
1885
+ version_slug = version .slug if version else None ,
1886
+ )
1887
+
1888
+
1847
1889
@app .task (queue = 'web' )
1848
1890
def sync_callback (_ , version_pk , commit , build , * args , ** kwargs ):
1849
1891
"""
0 commit comments