made age a required argument for the -clean-deleted command

This commit is contained in:
lujoh
2023-10-20 15:31:55 -04:00
parent 650fbc2563
commit 418f381b49
4 changed files with 9 additions and 16 deletions

View File

@@ -60,14 +60,13 @@ to finish the recomputation.
## Removing large deleted objects
Command: `nominatim admin --clean-deleted --age <PostgreSQL Time Interval>`
Command: `nominatim admin --clean-deleted <PostgreSQL Time Interval>`
Nominatim refuses to delete very large areas because often these deletions are
accidental and are reverted within hours. Instead the deletions are logged in
the `import_polygon_delete` table and left to the administrator to clean up.
To run this command you will need to pass a PostgreSQL time interval to the age
parameter. For example to delete any objects that have been deleted more than a
month ago you would run:
`nominatim admin --clean-deleted --age '1 month'`
To run this command you will need to pass a PostgreSQL time interval. For example to
delete any objects that have been deleted more than a month ago you would run:
`nominatim admin --clean-deleted '1 month'`

View File

@@ -42,7 +42,7 @@ class AdminFuncs:
help='Print performance analysis of the indexing process')
objs.add_argument('--collect-os-info', action="store_true",
help="Generate a report about the host system information")
objs.add_argument('--clean-deleted', action='store_true',
objs.add_argument('--clean-deleted', action='store', metavar='AGE',
help='Clean up deleted relations')
group = parser.add_argument_group('Arguments for cache warming')
group.add_argument('--search-only', action='store_const', dest='target',
@@ -58,8 +58,6 @@ class AdminFuncs:
mgroup.add_argument('--place-id', type=int,
help='Analyse indexing of the given Nominatim object')
group = parser.add_argument_group('Arguments for cleaning deleted')
group.add_argument('--age', type=str,
help='Delete relations older than the given PostgreSQL time interval')
def run(self, args: NominatimArgs) -> int:
@@ -90,11 +88,9 @@ class AdminFuncs:
return 0
if args.clean_deleted:
if not args.age:
self.parser.error('Age is required for --clean-deleted command')
LOG.warning('Cleaning up deleted relations')
from ..tools import admin
admin.clean_deleted_relations(args.config, age=args.age)
admin.clean_deleted_relations(args.config, age=args.clean_deleted)
return 0
return 1

View File

@@ -72,12 +72,11 @@ class NominatimArgs:
check_database: bool
migrate: bool
collect_os_info: bool
clean_deleted: bool
clean_deleted: str
analyse_indexing: bool
target: Optional[str]
osm_id: Optional[str]
place_id: Optional[int]
age: str
# Arguments to 'import'
osm_file: List[str]

View File

@@ -36,14 +36,13 @@ def test_admin_migrate(cli_call, mock_func_factory):
def test_admin_clean_deleted_relations(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations')
assert cli_call('admin', '--clean-deleted', '--age', '1 month') == 0
assert cli_call('admin', '--clean-deleted', '1 month') == 0
assert mock.called == 1
def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations')
with pytest.raises(SystemExit):
cli_call('admin', '--clean-deleted')
assert cli_call('admin', '--clean-deleted') == 1
class TestCliAdminWithDb: