mirror of
https://github.com/altlinux/gpupdate.git
synced 2025-03-21 18:50:38 +03:00
Merge pull request #78 from altlinux/packages_nir
Another package install implementation
This commit is contained in:
commit
bfd383659f
@ -24,7 +24,10 @@ from .systemd_applier import systemd_applier
|
||||
from .firefox_applier import firefox_applier
|
||||
from .chromium_applier import chromium_applier
|
||||
from .cups_applier import cups_applier
|
||||
from .package_applier import package_applier
|
||||
from .package_applier import (
|
||||
package_applier
|
||||
, package_applier_user
|
||||
)
|
||||
from .shortcut_applier import (
|
||||
shortcut_applier,
|
||||
shortcut_applier_user
|
||||
@ -93,16 +96,17 @@ class frontend_manager:
|
||||
, 'gsettings': gsettings_applier(self.storage)
|
||||
, 'cups': cups_applier(self.storage)
|
||||
, 'folders': folder_applier(self.storage, self.sid)
|
||||
#, 'package': package_applier(self.storage)
|
||||
, 'package': package_applier(self.storage)
|
||||
})
|
||||
|
||||
# User appliers are expected to work with user-writable
|
||||
# files and settings, mostly in $HOME.
|
||||
self.user_appliers = dict({
|
||||
'shortcuts': shortcut_applier_user(self.storage, self.sid, self.username),
|
||||
'folders': folder_applier_user(self.storage, self.sid, self.username),
|
||||
'gsettings': gsettings_applier_user(self.storage, self.sid, self.username),
|
||||
'cifs': cifs_applier_user(self.storage, self.sid, self.username)
|
||||
'shortcuts': shortcut_applier_user(self.storage, self.sid, self.username)
|
||||
, 'folders': folder_applier_user(self.storage, self.sid, self.username)
|
||||
, 'gsettings': gsettings_applier_user(self.storage, self.sid, self.username)
|
||||
, 'cifs': cifs_applier_user(self.storage, self.sid, self.username)
|
||||
, 'package': package_applier_user(self.storage, self.sid, self.username)
|
||||
})
|
||||
|
||||
def machine_apply(self):
|
||||
@ -127,6 +131,7 @@ class frontend_manager:
|
||||
self.user_appliers['folders'].admin_context_apply()
|
||||
self.user_appliers['gsettings'].admin_context_apply()
|
||||
self.user_appliers['cifs'].admin_context_apply()
|
||||
self.user_appliers['package'].admin_context_apply()
|
||||
|
||||
logging.debug(slogm('Running user appliers for user context'))
|
||||
with_privileges(self.username, self.user_appliers['shortcuts'].user_context_apply)
|
||||
|
@ -17,20 +17,59 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import logging
|
||||
from util.logging import slogm
|
||||
from util.rpm import (
|
||||
update
|
||||
, install_rpm
|
||||
, remove_rpm
|
||||
)
|
||||
|
||||
from .applier_frontend import applier_frontend
|
||||
from .appliers.rpm import rpm
|
||||
|
||||
class package_applier(applier_frontend):
|
||||
__install_key_name = 'Install'
|
||||
__remove_key_name = 'Remove'
|
||||
__hklm_branch = 'Software\\BaseALT\\Policies\\Packages'
|
||||
|
||||
def __init__(self, storage):
|
||||
self.storage = storage
|
||||
|
||||
install_branch = '{}\\{}%'.format(self.__hklm_branch, self.__install_key_name)
|
||||
remove_branch = '{}\\{}%'.format(self.__hklm_branch, self.__remove_key_name)
|
||||
|
||||
self.install_packages_setting = self.storage.filter_hklm_entries(install_branch)
|
||||
self.remove_packages_setting = self.storage.filter_hklm_entries(remove_branch)
|
||||
|
||||
def apply(self):
|
||||
pass
|
||||
update()
|
||||
for package in self.install_packages_setting:
|
||||
try:
|
||||
install_rpm(package.data)
|
||||
except Exception as exc:
|
||||
logging.error(exc)
|
||||
|
||||
for package in self.remove_packages_setting:
|
||||
try:
|
||||
remove_rpm(package.data)
|
||||
except Exception as exc:
|
||||
logging.error(exc)
|
||||
|
||||
|
||||
class package_applier_user(applier_frontend):
|
||||
def __init__(self):
|
||||
pass
|
||||
__install_key_name = 'Install'
|
||||
__remove_key_name = 'Remove'
|
||||
__hkcu_branch = 'Software\\BaseALT\\Policies\\Packages'
|
||||
|
||||
def __init__(self, storage, sid, username):
|
||||
self.storage = storage
|
||||
self.sid = sid
|
||||
self.username = username
|
||||
|
||||
install_branch = '{}\\{}%'.format(self.__hkcu_branch, self.__install_key_name)
|
||||
remove_branch = '{}\\{}%'.format(self.__hkcu_branch, self.__remove_key_name)
|
||||
|
||||
self.install_packages_setting = self.storage.filter_hkcu_entries(self.sid, install_branch)
|
||||
self.remove_packages_setting = self.storage.filter_hkcu_entries(self.sid, remove_branch)
|
||||
|
||||
def user_context_apply(self):
|
||||
'''
|
||||
@ -43,5 +82,16 @@ class package_applier_user(applier_frontend):
|
||||
Install software assigned to specified username regardless
|
||||
which computer he uses to log into system.
|
||||
'''
|
||||
pass
|
||||
update()
|
||||
for package in self.install_packages_setting:
|
||||
try:
|
||||
install_rpm(package.data)
|
||||
except Exception as exc:
|
||||
logging.debug(exc)
|
||||
|
||||
for package in self.remove_packages_setting:
|
||||
try:
|
||||
remove_rpm(package.data)
|
||||
except Exception as exc:
|
||||
logging.debug(exc)
|
||||
|
||||
|
@ -158,7 +158,7 @@ class gpt:
|
||||
'shortcuts'
|
||||
, 'drives'
|
||||
, 'environmentvariables'
|
||||
, 'printers'
|
||||
#, 'printers'
|
||||
, 'folders'
|
||||
, 'files'
|
||||
, 'inifiles'
|
||||
|
@ -16,16 +16,24 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from util.rpm import (
|
||||
install_rpm,
|
||||
remove_rpm
|
||||
)
|
||||
import unittest
|
||||
|
||||
class rpm:
|
||||
def __init__(self, name, action):
|
||||
self.name = name
|
||||
self.action = action
|
||||
from frontend.appliers.rpm import rpm
|
||||
|
||||
def apply(self):
|
||||
pass
|
||||
class PackageTestCase(unittest.TestCase):
|
||||
'''
|
||||
Semi-integrational tests for packages installation/removing
|
||||
'''
|
||||
def test_package_not_exist(self):
|
||||
packages_for_install = 'dummy1 dummy2'
|
||||
packages_for_remove = 'dummy3'
|
||||
|
||||
test_rpm = rpm(packages_for_install, packages_for_remove)
|
||||
test_rpm.apply()
|
||||
|
||||
def test_install_remove_same_package(self):
|
||||
packages_for_install = 'gotop'
|
||||
packages_for_remove = 'gotop'
|
||||
|
||||
test_rpm = rpm(packages_for_install, packages_for_remove)
|
||||
test_rpm.apply()
|
@ -34,11 +34,11 @@ def is_rpm_installed(rpm_name):
|
||||
return False
|
||||
|
||||
class Package:
|
||||
__install_command = ['/usr/bin/apt-get', '-y', 'install']
|
||||
__remove_command = ['/usr/bin/apt-get', '-y', 'remove']
|
||||
__reinstall_command = ['/usr/bin/apt-get', '-y', 'reinstall']
|
||||
|
||||
def __init__(self, package_name):
|
||||
self.__install_command = ['/usr/bin/apt-get', '-y', 'install']
|
||||
self.__remove_command = ['/usr/bin/apt-get', '-y', 'remove']
|
||||
self.__reinstall_command = ['/usr/bin/apt-get', '-y', 'reinstall']
|
||||
self.package_name = package_name
|
||||
self.for_install = True
|
||||
|
||||
@ -102,7 +102,6 @@ def install_rpm(rpm_name):
|
||||
'''
|
||||
Install single RPM
|
||||
'''
|
||||
update()
|
||||
rpm = Package(rpm_name)
|
||||
return rpm.install()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user