Source code for univention.appcenter.actions.remove

#!/usr/bin/python3
#
# Univention App Center
#  univention-app module for uninstalling an app
#
# SPDX-FileCopyrightText: 2015-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
#

import os.path

from univention.admindiary.client import write_event
from univention.admindiary.events import APP_REMOVE_FAILURE, APP_REMOVE_START, APP_REMOVE_SUCCESS
from univention.appcenter.actions.install_base import InstallRemoveUpgrade
from univention.appcenter.exceptions import RemoveFailed
from univention.appcenter.packages import remove_packages, remove_packages_dry_run, update_packages
from univention.appcenter.ucr import ucr_save


[docs] class Remove(InstallRemoveUpgrade): """Removes an application from the Univention App Center.""" help = 'Uninstall an app' prescript_ext = 'prerm' pre_readme = 'readme_uninstall' post_readme = 'readme_post_uninstall'
[docs] def main(self, args): return self.do_it(args)
def _show_license(self, app, args): pass def _do_it(self, app, args): self._unregister_listener(app) self.percentage = 5 if not self._remove_app(app, args): raise RemoveFailed() self.percentage = 45 self._unregister_app(app, args) self.percentage = 55 self._unregister_attributes(app, args) self.percentage = 60 if self._unregister_component(app): update_packages() self.percentage = 70 self._unregister_files(app) self.percentage = 80 self._call_unjoin_script(app, args) if not app.docker: ucr_save({'appcenter/prudence/docker/%s' % app.id: 'yes'}) def _write_start_event(self, app, args): return write_event(APP_REMOVE_START, {'name': app.name, 'version': app.version}, username=self._get_username(args)) def _write_success_event(self, app, context_id, args): return write_event(APP_REMOVE_SUCCESS, {'name': app.name, 'version': app.version}, username=self._get_username(args), context_id=context_id) def _write_fail_event(self, app, context_id, status, args): return write_event(APP_REMOVE_FAILURE, {'name': app.name, 'version': app.version, 'error_code': str(status)}, username=self._get_username(args), context_id=context_id) def _call_action_hooks(self, directory): super()._run_parts(directory)
[docs] def needs_credentials(self, app): return bool(os.path.exists(app.get_cache_file(self.prescript_ext)))
def _remove_app(self, app, args): self._configure(app, args) return remove_packages(app.get_packages(additional=False)) def _dry_run(self, app, args): return remove_packages_dry_run(app.get_packages(additional=False))