backend/satellite_exporter/handlers/non_auth_dumper.py | 13
backend/satellite_tools/disk_dumper/dumper.py | 9
backend/satellite_tools/progress_bar.py | 10
backend/server/handlers/app/packages.py | 13
backend/server/handlers/xmlrpc/registration.py | 6
backend/server/importlib/packageImport.py | 26 -
backend/server/rhnActivationKey.py | 331 -----------------
backend/server/rhnServer/server_class.py | 32 -
backend/server/rhnServerGroup.py | 111 -----
backend/server/rhnVirtualization.py | 20 -
backend/server/test/attic/rhnActivationKey.py | 331 +++++++++++++++++
backend/server/test/attic/rhnServerGroup.py | 111 +++++
backend/spacewalk/common/rhn_rpm.py | 8
13 files changed, 442 insertions(+), 579 deletions(-)
New commits:
commit e52a5f48ffefbee0f1b53f98da49e682173187dc
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 12:50:56 2010 +0200
Moved server.rhnServerGroup to test/attic.
diff --git a/backend/server/rhnServerGroup.py b/backend/server/rhnServerGroup.py
deleted file mode 100644
index 55dcaaa..0000000
--- a/backend/server/rhnServerGroup.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2008 Red Hat, Inc.
-#
-# This software is licensed to you under the GNU General Public License,
-# version 2 (GPLv2). There is NO WARRANTY for this software, express or
-# implied, including the implied warranties of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
-# along with this software; if not, see
-#
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
-#
-# Red Hat trademarks are not licensed under GPLv2. No permission is
-# granted to use or replicate Red Hat trademarks that are incorporated
-# in this software or its documentation.
-#
-
-
-import types
-
-from spacewalk.server import rhnSQL, rhnUser
-
-class InvalidUserError(Exception):
- pass
-
-class InvalidOrgError(Exception):
- pass
-
-class InvalidServerGroupError(Exception):
- pass
-
-class ServerGroup:
- def __init__(self):
- self._row_server_group = None
-
- _query_lookup = rhnSQL.Statement("""
- select id
- from rhnServerGroup
- where org_id = :org_id
- and name = :name
- """)
- def load(self, org_id, name):
- org_id = self._lookup_org_id(org_id)
- h = rhnSQL.prepare(self._query_lookup)
- h.execute(org_id=org_id, name=name)
- row = h.fetchone_dict()
- if not row:
- raise InvalidServerGroupError(org_id, name)
- server_group_id = row['id']
- self._row_server_group = rhnSQL.Row("rhnServerGroup", 'id')
- self._row_server_group.load(server_group_id)
-
- # Setters
-
- def set_org_id(self, org_id):
- self._set('org_id', self._lookup_org_id(org_id))
-
- def _set(self, name, val):
- if self._row_server_group is None:
- self._row_server_group = rhnSQL.Row('rhnServerGroup', 'id')
- server_group_id = rhnSQL.Sequence('rhn_server_group_id_seq').next()
- self._row_server_group.create(server_group_id)
-
- self._row_server_group[name] = val
-
- # Getters
-
- def _get(self, name):
- return self._row_server_group[name]
-
- def _lookup_org_id(self, org_id):
- if isinstance(org_id, types.StringType):
- # Is it a user?
- u = rhnUser.search(org_id)
-
- if not u:
- raise InvalidUserError(org_id)
-
- return u.contact['org_id']
-
- t = rhnSQL.Table('web_customer', 'id')
- row = t[org_id]
- if not row:
- raise InvalidOrgError(org_id)
- return row['id']
-
- def save(self):
- if not self._row_server_group:
- return
- self._row_server_group.save()
-
- def __getattr__(self, name):
- if name.startswith('get_'):
- return CallableObj(name[4:], self._get)
- if name.startswith('set_'):
- return CallableObj(name[4:], self._set)
- raise AttributeError(name)
-
-class CallableObj:
- def __init__(self, name, func):
- self.func = func
- self.name = name
-
- def __call__(self, *args, **kwargs):
- return apply(self.func, (self.name, ) + args, kwargs)
-
-def create_new_org(username, password):
- f = rhnSQL.Procedure('create_new_org')
- ncl = rhnSQL.types.NUMBER
- ret = f(username, password, None, None, 'P', ncl(), ncl(), ncl())
- org_id = ret[-3]
- return int(org_id)
diff --git a/backend/server/test/attic/rhnServerGroup.py
b/backend/server/test/attic/rhnServerGroup.py
new file mode 100644
index 0000000..55dcaaa
--- /dev/null
+++ b/backend/server/test/attic/rhnServerGroup.py
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2008 Red Hat, Inc.
+#
+# This software is licensed to you under the GNU General Public License,
+# version 2 (GPLv2). There is NO WARRANTY for this software, express or
+# implied, including the implied warranties of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+# along with this software; if not, see
+#
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+#
+# Red Hat trademarks are not licensed under GPLv2. No permission is
+# granted to use or replicate Red Hat trademarks that are incorporated
+# in this software or its documentation.
+#
+
+
+import types
+
+from spacewalk.server import rhnSQL, rhnUser
+
+class InvalidUserError(Exception):
+ pass
+
+class InvalidOrgError(Exception):
+ pass
+
+class InvalidServerGroupError(Exception):
+ pass
+
+class ServerGroup:
+ def __init__(self):
+ self._row_server_group = None
+
+ _query_lookup = rhnSQL.Statement("""
+ select id
+ from rhnServerGroup
+ where org_id = :org_id
+ and name = :name
+ """)
+ def load(self, org_id, name):
+ org_id = self._lookup_org_id(org_id)
+ h = rhnSQL.prepare(self._query_lookup)
+ h.execute(org_id=org_id, name=name)
+ row = h.fetchone_dict()
+ if not row:
+ raise InvalidServerGroupError(org_id, name)
+ server_group_id = row['id']
+ self._row_server_group = rhnSQL.Row("rhnServerGroup", 'id')
+ self._row_server_group.load(server_group_id)
+
+ # Setters
+
+ def set_org_id(self, org_id):
+ self._set('org_id', self._lookup_org_id(org_id))
+
+ def _set(self, name, val):
+ if self._row_server_group is None:
+ self._row_server_group = rhnSQL.Row('rhnServerGroup', 'id')
+ server_group_id = rhnSQL.Sequence('rhn_server_group_id_seq').next()
+ self._row_server_group.create(server_group_id)
+
+ self._row_server_group[name] = val
+
+ # Getters
+
+ def _get(self, name):
+ return self._row_server_group[name]
+
+ def _lookup_org_id(self, org_id):
+ if isinstance(org_id, types.StringType):
+ # Is it a user?
+ u = rhnUser.search(org_id)
+
+ if not u:
+ raise InvalidUserError(org_id)
+
+ return u.contact['org_id']
+
+ t = rhnSQL.Table('web_customer', 'id')
+ row = t[org_id]
+ if not row:
+ raise InvalidOrgError(org_id)
+ return row['id']
+
+ def save(self):
+ if not self._row_server_group:
+ return
+ self._row_server_group.save()
+
+ def __getattr__(self, name):
+ if name.startswith('get_'):
+ return CallableObj(name[4:], self._get)
+ if name.startswith('set_'):
+ return CallableObj(name[4:], self._set)
+ raise AttributeError(name)
+
+class CallableObj:
+ def __init__(self, name, func):
+ self.func = func
+ self.name = name
+
+ def __call__(self, *args, **kwargs):
+ return apply(self.func, (self.name, ) + args, kwargs)
+
+def create_new_org(username, password):
+ f = rhnSQL.Procedure('create_new_org')
+ ncl = rhnSQL.types.NUMBER
+ ret = f(username, password, None, None, 'P', ncl(), ncl(), ncl())
+ org_id = ret[-3]
+ return int(org_id)
commit e371f7dd0c7b01cd8b305f7394ec2e358c96d681
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:44:59 2010 +0200
Moved server.rhnActivationKey to test/attic, not shipped.
We never even shipped the file rhnActivationKey.py in rpm, so it
was a dead code, on the other hand, someone might want to revisit
the tests one day, so I did not want to just drop it.
diff --git a/backend/server/rhnActivationKey.py b/backend/server/rhnActivationKey.py
deleted file mode 100644
index fd7a53d..0000000
--- a/backend/server/rhnActivationKey.py
+++ /dev/null
@@ -1,331 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2008--2010 Red Hat, Inc.
-#
-# This software is licensed to you under the GNU General Public License,
-# version 2 (GPLv2). There is NO WARRANTY for this software, express or
-# implied, including the implied warranties of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
-# along with this software; if not, see
-#
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
-#
-# Red Hat trademarks are not licensed under GPLv2. No permission is
-# granted to use or replicate Red Hat trademarks that are incorporated
-# in this software or its documentation.
-#
-#
-# $Id$
-
-import os
-import hashlib
-import time
-import types
-
-from spacewalk.server import rhnSQL
-
-class InvalidTokenError(Exception):
- pass
-
-class InvalidChannelError(Exception):
- pass
-
-class InvalidEntitlementError(Exception):
- pass
-
-class ActivationKey:
- def __init__(self):
- self._row_reg_token = None
- self._row_activ_key = None
-
- self._server_groups = {}
- self._channels = {}
- self._token = None
-
- def load(self, token):
- t = rhnSQL.Table('rhnActivationKey', 'token')
- row = t[token]
- if not row:
- raise InvalidTokenError(token)
- self._row_activ_key = row
- reg_token_id = row['reg_token_id']
- t = rhnSQL.Table('rhnRegToken', 'id')
- row = t[reg_token_id]
- if not row:
- raise Exception("Invalid data in DB: missing foreign key")
- self._row_reg_token = row
- self._server_groups = self._load_server_groups()
- self._channels = self._load_channels()
-
- _query_fetch_server_groups = rhnSQL.Statement("""
- select rtsg.server_group_id
- from rhnRegTokenGroups rtsg
- where rtsg.token_id = :token_id
- """)
- def _load_server_groups(self):
- # Get groups
- h = rhnSQL.prepare(self._query_fetch_server_groups)
- reg_token_id = self._row_reg_token['id']
- h.execute(token_id=reg_token_id)
- ret = {}
- while 1:
- row = h.fetchone_dict()
- if not row:
- break
- server_group_id = row['server_group_id']
- ret[server_group_id] = None
- return ret
-
- _query_fetch_channels = rhnSQL.Statement("""
- select rtc.channel_id, c.label
- from rhnRegTokenChannels rtc, rhnChannel c
- where rtc.token_id = :token_id
- and rtc.channel_id = c.id
- """)
- def _load_channels(self):
- # Get groups
- h = rhnSQL.prepare(self._query_fetch_channels)
- reg_token_id = self._row_reg_token['id']
- h.execute(token_id=reg_token_id)
- ret = {}
- while 1:
- row = h.fetchone_dict()
- if not row:
- break
- channel_id = row['channel_id']
- ret[channel_id] = row['label']
- return ret
-
- # Setters
-
- def set_entitlement_level(self, val):
- entitlements = {}
- for k, v in val.items():
- entitlement_level_id = self._lookup_entitlement_level(k)
- entitlements[entitlement_level_id] = k
-
- self._set('entitlement_level', entitlements)
-
- def set_server_groups(self, groups):
- assert(isinstance(groups, types.ListType))
-
- ret = {}
- for g in groups:
- ret[g] = None
-
- self._server_groups.clear()
- self._server_groups.update(ret)
-
- def set_channels(self, channels):
- assert(isinstance(channels, types.ListType))
-
- t = rhnSQL.Table('rhnChannel', 'label')
-
- ret = {}
- for ch in channels:
- row = t[ch]
- if not row:
- raise InvalidChannelError(ch)
- ret[row['id']] = None
-
- self._channels.clear()
- self._channels.update(ret)
-
- def _set(self, name, val):
- if self._row_reg_token is None:
- self._row_reg_token = rhnSQL.Row('rhnRegToken', 'id')
- token_id = rhnSQL.Sequence('rhn_reg_token_seq').next()
- self._row_reg_token.create(token_id)
- self._row_reg_token['usage_limit'] = None
-
- self._row_reg_token[name] = val
-
- # Getters
-
- _query_get_reg_token_entitlements = rhnSQL.Statement("""
- select sgt.label
- from rhnServerGroupType sgt,
- rhnRegTokenEntitlement rte
- where rte.reg_token_id = :reg_token_id
- and rte.server_group_type_id = sgt.id
- """)
- def get_entitlement_level(self):
- reg_token_id = self._row_reg_token['id']
- h = rhnSQL.prepare(self._query_get_reg_token_entitlements)
- h.execute(reg_token_id=reg_token_id)
-
- ret = {}
- while 1:
- row = h.fetchone_dict()
- if not row:
- break
- ret[row['label']] = None
- return ret
-
- def get_server_groups(self):
- return self._server_groups.keys()
-
- def get_channels(self):
- return self._channels.values()
-
- def get_token(self):
- return self._token
-
- def _get(self, name):
- return self._row_reg_token[name]
-
- # Fix various things
-
- def _lookup_entitlement_level(self, entitlement_level):
- t = rhnSQL.Table('rhnServerGroupType', 'label')
- row = t[entitlement_level]
- if not row:
- raise InvalidEntitlementError(entitlement_level)
- return row['id']
-
-
- def generate_token(self):
- s = hashlib.new('sha1')
- s.update(str(os.getpid()))
- for field in ['org_id', 'user_id', 'server_id']:
- if self._row_reg_token.has_key(field):
- val = self._row_reg_token[field]
- s.update(str(val))
- s.update("%.8f" % time.time())
- self._token = s.hexdigest()
- return self._token
-
- def save(self):
- if self._token is None:
- self.generate_token()
-
- try:
- return self._save()
- except:
- rhnSQL.rollback()
- raise
-
- def _save(self):
- h = self._row_reg_token
- k = 'entitlement_level'
- if h.has_key(k):
- entitlements = h[k]
- del h.data[k]
- else:
- entitlements = {}
-
- self._row_reg_token.save()
-
- if not self._row_activ_key:
- self._row_activ_key = rhnSQL.Row('rhnActivationKey',
'token')
- self._row_activ_key.create(self._token)
- self._row_activ_key['reg_token_id'] =
self._row_reg_token['id']
- self._row_activ_key.save()
-
- self._store_server_groups()
- self._store_channels()
-
- self._store_entitlements(entitlements)
-
- _query_delete_reg_token_entitlements = rhnSQL.Statement("""
- delete from rhnRegTokenEntitlement
- where reg_token_id = :reg_token_id
- """)
- _query_insert_reg_token_entitlements = rhnSQL.Statement("""
- insert into rhnRegTokenEntitlement
- (reg_token_id, server_group_type_id)
- values (:reg_token_id, :server_group_type_id)
- """)
- def _store_entitlements(self, entitlements):
- # entitlements: hash keyed on the entitlement id
- if not entitlements:
- return
- entitlements = entitlements.keys()
-
- reg_token_id = self._row_reg_token['id']
- reg_token_ids = [ reg_token_id ] * len(entitlements)
-
- h = rhnSQL.prepare(self._query_delete_reg_token_entitlements)
- h.execute(reg_token_id=reg_token_id)
-
- h = rhnSQL.prepare(self._query_insert_reg_token_entitlements)
- h.executemany(reg_token_id=reg_token_ids,
- server_group_type_id=entitlements)
-
- _query_delete_groups = rhnSQL.Statement("""
- delete from rhnRegTokenGroups
- where token_id = :token_id
- and server_group_id = :server_group_id
- """)
- _query_insert_groups = rhnSQL.Statement("""
- insert into rhnRegTokenGroups (token_id, server_group_id)
- values (:token_id, :server_group_id)
- """)
-
- def _store_server_groups(self):
- db_server_groups = self._load_server_groups()
- token_id = self._row_reg_token['id']
-
- inserts, deletes = self._diff_hashes(db_server_groups,
- self._server_groups)
-
- if deletes:
- token_ids = [ token_id ] * len(deletes)
- h = rhnSQL.prepare(self._query_delete_groups)
- h.executemany(token_id=token_ids, server_group_id=deletes)
- if inserts:
- token_ids = [ token_id ] * len(inserts)
- h = rhnSQL.prepare(self._query_insert_groups)
- h.executemany(token_id=token_ids, server_group_id=inserts)
-
- _query_delete_channels = rhnSQL.Statement("""
- delete from rhnRegTokenChannels
- where token_id = :token_id
- and channel_id = :channel_id
- """)
- _query_insert_channels = rhnSQL.Statement("""
- insert into rhnRegTokenChannels(token_id, channel_id)
- values (:token_id, :channel_id)
- """)
- def _store_channels(self):
- db_channels = self._load_channels()
- token_id = self._row_reg_token['id']
-
- inserts, deletes = self._diff_hashes(db_channels,
- self._channels)
-
- if deletes:
- token_ids = [ token_id ] * len(deletes)
- h = rhnSQL.prepare(self._query_delete_channels)
- h.executemany(token_id=token_ids, channel_id=deletes)
- if inserts:
- token_ids = [ token_id ] * len(inserts)
- h = rhnSQL.prepare(self._query_insert_channels)
- h.executemany(token_id=token_ids, channel_id=inserts)
-
- def _diff_hashes(self, h1, h2):
- "diffs src and dst; returns a list of (inserts, deletes)"
- inserts = []
- h1 = h1.copy()
- for k in h2.keys():
- if not h1.has_key(k):
- inserts.append(k)
- continue
- del h1[k]
- deletes = h1.keys()
- return inserts, deletes
-
- def __getattr__(self, name):
- if name.startswith('get_'):
- return CallableObj(name[4:], self._get)
- if name.startswith('set_'):
- return CallableObj(name[4:], self._set)
- raise AttributeError(name)
-
-
-class CallableObj:
- def __init__(self, name, func):
- self.func = func
- self.name = name
-
- def __call__(self, *args, **kwargs):
- return apply(self.func, (self.name, ) + args, kwargs)
diff --git a/backend/server/test/attic/rhnActivationKey.py
b/backend/server/test/attic/rhnActivationKey.py
new file mode 100644
index 0000000..fd7a53d
--- /dev/null
+++ b/backend/server/test/attic/rhnActivationKey.py
@@ -0,0 +1,331 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2008--2010 Red Hat, Inc.
+#
+# This software is licensed to you under the GNU General Public License,
+# version 2 (GPLv2). There is NO WARRANTY for this software, express or
+# implied, including the implied warranties of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+# along with this software; if not, see
+#
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+#
+# Red Hat trademarks are not licensed under GPLv2. No permission is
+# granted to use or replicate Red Hat trademarks that are incorporated
+# in this software or its documentation.
+#
+#
+# $Id$
+
+import os
+import hashlib
+import time
+import types
+
+from spacewalk.server import rhnSQL
+
+class InvalidTokenError(Exception):
+ pass
+
+class InvalidChannelError(Exception):
+ pass
+
+class InvalidEntitlementError(Exception):
+ pass
+
+class ActivationKey:
+ def __init__(self):
+ self._row_reg_token = None
+ self._row_activ_key = None
+
+ self._server_groups = {}
+ self._channels = {}
+ self._token = None
+
+ def load(self, token):
+ t = rhnSQL.Table('rhnActivationKey', 'token')
+ row = t[token]
+ if not row:
+ raise InvalidTokenError(token)
+ self._row_activ_key = row
+ reg_token_id = row['reg_token_id']
+ t = rhnSQL.Table('rhnRegToken', 'id')
+ row = t[reg_token_id]
+ if not row:
+ raise Exception("Invalid data in DB: missing foreign key")
+ self._row_reg_token = row
+ self._server_groups = self._load_server_groups()
+ self._channels = self._load_channels()
+
+ _query_fetch_server_groups = rhnSQL.Statement("""
+ select rtsg.server_group_id
+ from rhnRegTokenGroups rtsg
+ where rtsg.token_id = :token_id
+ """)
+ def _load_server_groups(self):
+ # Get groups
+ h = rhnSQL.prepare(self._query_fetch_server_groups)
+ reg_token_id = self._row_reg_token['id']
+ h.execute(token_id=reg_token_id)
+ ret = {}
+ while 1:
+ row = h.fetchone_dict()
+ if not row:
+ break
+ server_group_id = row['server_group_id']
+ ret[server_group_id] = None
+ return ret
+
+ _query_fetch_channels = rhnSQL.Statement("""
+ select rtc.channel_id, c.label
+ from rhnRegTokenChannels rtc, rhnChannel c
+ where rtc.token_id = :token_id
+ and rtc.channel_id = c.id
+ """)
+ def _load_channels(self):
+ # Get groups
+ h = rhnSQL.prepare(self._query_fetch_channels)
+ reg_token_id = self._row_reg_token['id']
+ h.execute(token_id=reg_token_id)
+ ret = {}
+ while 1:
+ row = h.fetchone_dict()
+ if not row:
+ break
+ channel_id = row['channel_id']
+ ret[channel_id] = row['label']
+ return ret
+
+ # Setters
+
+ def set_entitlement_level(self, val):
+ entitlements = {}
+ for k, v in val.items():
+ entitlement_level_id = self._lookup_entitlement_level(k)
+ entitlements[entitlement_level_id] = k
+
+ self._set('entitlement_level', entitlements)
+
+ def set_server_groups(self, groups):
+ assert(isinstance(groups, types.ListType))
+
+ ret = {}
+ for g in groups:
+ ret[g] = None
+
+ self._server_groups.clear()
+ self._server_groups.update(ret)
+
+ def set_channels(self, channels):
+ assert(isinstance(channels, types.ListType))
+
+ t = rhnSQL.Table('rhnChannel', 'label')
+
+ ret = {}
+ for ch in channels:
+ row = t[ch]
+ if not row:
+ raise InvalidChannelError(ch)
+ ret[row['id']] = None
+
+ self._channels.clear()
+ self._channels.update(ret)
+
+ def _set(self, name, val):
+ if self._row_reg_token is None:
+ self._row_reg_token = rhnSQL.Row('rhnRegToken', 'id')
+ token_id = rhnSQL.Sequence('rhn_reg_token_seq').next()
+ self._row_reg_token.create(token_id)
+ self._row_reg_token['usage_limit'] = None
+
+ self._row_reg_token[name] = val
+
+ # Getters
+
+ _query_get_reg_token_entitlements = rhnSQL.Statement("""
+ select sgt.label
+ from rhnServerGroupType sgt,
+ rhnRegTokenEntitlement rte
+ where rte.reg_token_id = :reg_token_id
+ and rte.server_group_type_id = sgt.id
+ """)
+ def get_entitlement_level(self):
+ reg_token_id = self._row_reg_token['id']
+ h = rhnSQL.prepare(self._query_get_reg_token_entitlements)
+ h.execute(reg_token_id=reg_token_id)
+
+ ret = {}
+ while 1:
+ row = h.fetchone_dict()
+ if not row:
+ break
+ ret[row['label']] = None
+ return ret
+
+ def get_server_groups(self):
+ return self._server_groups.keys()
+
+ def get_channels(self):
+ return self._channels.values()
+
+ def get_token(self):
+ return self._token
+
+ def _get(self, name):
+ return self._row_reg_token[name]
+
+ # Fix various things
+
+ def _lookup_entitlement_level(self, entitlement_level):
+ t = rhnSQL.Table('rhnServerGroupType', 'label')
+ row = t[entitlement_level]
+ if not row:
+ raise InvalidEntitlementError(entitlement_level)
+ return row['id']
+
+
+ def generate_token(self):
+ s = hashlib.new('sha1')
+ s.update(str(os.getpid()))
+ for field in ['org_id', 'user_id', 'server_id']:
+ if self._row_reg_token.has_key(field):
+ val = self._row_reg_token[field]
+ s.update(str(val))
+ s.update("%.8f" % time.time())
+ self._token = s.hexdigest()
+ return self._token
+
+ def save(self):
+ if self._token is None:
+ self.generate_token()
+
+ try:
+ return self._save()
+ except:
+ rhnSQL.rollback()
+ raise
+
+ def _save(self):
+ h = self._row_reg_token
+ k = 'entitlement_level'
+ if h.has_key(k):
+ entitlements = h[k]
+ del h.data[k]
+ else:
+ entitlements = {}
+
+ self._row_reg_token.save()
+
+ if not self._row_activ_key:
+ self._row_activ_key = rhnSQL.Row('rhnActivationKey',
'token')
+ self._row_activ_key.create(self._token)
+ self._row_activ_key['reg_token_id'] =
self._row_reg_token['id']
+ self._row_activ_key.save()
+
+ self._store_server_groups()
+ self._store_channels()
+
+ self._store_entitlements(entitlements)
+
+ _query_delete_reg_token_entitlements = rhnSQL.Statement("""
+ delete from rhnRegTokenEntitlement
+ where reg_token_id = :reg_token_id
+ """)
+ _query_insert_reg_token_entitlements = rhnSQL.Statement("""
+ insert into rhnRegTokenEntitlement
+ (reg_token_id, server_group_type_id)
+ values (:reg_token_id, :server_group_type_id)
+ """)
+ def _store_entitlements(self, entitlements):
+ # entitlements: hash keyed on the entitlement id
+ if not entitlements:
+ return
+ entitlements = entitlements.keys()
+
+ reg_token_id = self._row_reg_token['id']
+ reg_token_ids = [ reg_token_id ] * len(entitlements)
+
+ h = rhnSQL.prepare(self._query_delete_reg_token_entitlements)
+ h.execute(reg_token_id=reg_token_id)
+
+ h = rhnSQL.prepare(self._query_insert_reg_token_entitlements)
+ h.executemany(reg_token_id=reg_token_ids,
+ server_group_type_id=entitlements)
+
+ _query_delete_groups = rhnSQL.Statement("""
+ delete from rhnRegTokenGroups
+ where token_id = :token_id
+ and server_group_id = :server_group_id
+ """)
+ _query_insert_groups = rhnSQL.Statement("""
+ insert into rhnRegTokenGroups (token_id, server_group_id)
+ values (:token_id, :server_group_id)
+ """)
+
+ def _store_server_groups(self):
+ db_server_groups = self._load_server_groups()
+ token_id = self._row_reg_token['id']
+
+ inserts, deletes = self._diff_hashes(db_server_groups,
+ self._server_groups)
+
+ if deletes:
+ token_ids = [ token_id ] * len(deletes)
+ h = rhnSQL.prepare(self._query_delete_groups)
+ h.executemany(token_id=token_ids, server_group_id=deletes)
+ if inserts:
+ token_ids = [ token_id ] * len(inserts)
+ h = rhnSQL.prepare(self._query_insert_groups)
+ h.executemany(token_id=token_ids, server_group_id=inserts)
+
+ _query_delete_channels = rhnSQL.Statement("""
+ delete from rhnRegTokenChannels
+ where token_id = :token_id
+ and channel_id = :channel_id
+ """)
+ _query_insert_channels = rhnSQL.Statement("""
+ insert into rhnRegTokenChannels(token_id, channel_id)
+ values (:token_id, :channel_id)
+ """)
+ def _store_channels(self):
+ db_channels = self._load_channels()
+ token_id = self._row_reg_token['id']
+
+ inserts, deletes = self._diff_hashes(db_channels,
+ self._channels)
+
+ if deletes:
+ token_ids = [ token_id ] * len(deletes)
+ h = rhnSQL.prepare(self._query_delete_channels)
+ h.executemany(token_id=token_ids, channel_id=deletes)
+ if inserts:
+ token_ids = [ token_id ] * len(inserts)
+ h = rhnSQL.prepare(self._query_insert_channels)
+ h.executemany(token_id=token_ids, channel_id=inserts)
+
+ def _diff_hashes(self, h1, h2):
+ "diffs src and dst; returns a list of (inserts, deletes)"
+ inserts = []
+ h1 = h1.copy()
+ for k in h2.keys():
+ if not h1.has_key(k):
+ inserts.append(k)
+ continue
+ del h1[k]
+ deletes = h1.keys()
+ return inserts, deletes
+
+ def __getattr__(self, name):
+ if name.startswith('get_'):
+ return CallableObj(name[4:], self._get)
+ if name.startswith('set_'):
+ return CallableObj(name[4:], self._set)
+ raise AttributeError(name)
+
+
+class CallableObj:
+ def __init__(self, name, func):
+ self.func = func
+ self.name = name
+
+ def __call__(self, *args, **kwargs):
+ return apply(self.func, (self.name, ) + args, kwargs)
commit 1f9511f4249f3a8169ebd3738e556d1327581e0c
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:27:50 2010 +0200
Method _execute_next does not seem to be used, removing.
diff --git a/backend/satellite_tools/disk_dumper/dumper.py
b/backend/satellite_tools/disk_dumper/dumper.py
index a866616..2b50d4f 100644
--- a/backend/satellite_tools/disk_dumper/dumper.py
+++ b/backend/satellite_tools/disk_dumper/dumper.py
@@ -583,15 +583,6 @@ class QueryIterator:
self._result_set_exhausted = 1
- def _execute_next(self):
- log_debug(4)
- self._params_pos = self._params_pos + 1
- if self._params_pos == len(self._params):
- log_debug(5, "Done")
- self._statement = None
- return None
- apply(self._statement.execute, (), self._params[self._params_pos])
-
class CachedQueryIterator:
""" This class will attempt to retrieve information, either from the
database or
from a local cache.
commit 5b2342cdf5e4b0d1bee2be620b72526d13d7423a
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:23:29 2010 +0200
Method _do_snapshot does not seem to be used in Satellite, removing.
diff --git a/backend/satellite_exporter/handlers/non_auth_dumper.py
b/backend/satellite_exporter/handlers/non_auth_dumper.py
index e5792ff..115630c 100644
--- a/backend/satellite_exporter/handlers/non_auth_dumper.py
+++ b/backend/satellite_exporter/handlers/non_auth_dumper.py
@@ -264,19 +264,6 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
_generate_executemany_data = staticmethod(_generate_executemany_data)
- def _do_snapshot(self, label, channels, channel_data, query,
- with_channels=0):
- snapshot_channel_ids, channel_ids, obj_ids, last_modifieds = \
- self._generate_executemany_data(label, channels, channel_data)
- h = rhnSQL.prepare(query)
- if with_channels:
- h.executemany(snapshot_channel_id=snapshot_channel_ids,
- obj_id=obj_ids, channel_id=channel_ids,
- last_modified=last_modifieds)
- else:
- h.executemany(snapshot_channel_id=snapshot_channel_ids,
- obj_id=obj_ids, last_modified=last_modifieds)
-
# Dumper functions here
def dump_channel_families(self, virt_filter=0):
log_debug(2)
commit 2d1583ea6d8f8c6c8cb37818cf8807515ab3c9a5
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:21:03 2010 +0200
Method _count_channel_servers not used in _channelPackageSubscription in Satellite,
removing.
diff --git a/backend/server/handlers/app/packages.py
b/backend/server/handlers/app/packages.py
index 352697d..cdcfa9e 100644
--- a/backend/server/handlers/app/packages.py
+++ b/backend/server/handlers/app/packages.py
@@ -406,19 +406,6 @@ class Packages(RPC_Base):
return 0
- _query_count_channel_servers = rhnSQL.Statement("""
- select count(*) server_count
- from rhnServerChannel sc,
- rhnChannel c
- where c.label = :channel
- and c.id = sc.channel_id
- """)
- def _count_channel_servers(self, channel):
- h = rhnSQL.prepare(self._query_count_channel_servers)
- h.execute(channel=channel)
- row = h.fetchone_dict()
- return row['server_count']
-
def getPackageChecksum(self, username, password, info):
""" returns checksum info of available packages
also does an existance check on the filesystem.
commit 0dbe1a4100f37f790631c7f25717e0f63f49add5
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:17:09 2010 +0200
Method checkSatEntitlement not used in Satellite code, hosted only, removing.
diff --git a/backend/server/rhnServer/server_class.py
b/backend/server/rhnServer/server_class.py
index 6cc9470..20934fc 100644
--- a/backend/server/rhnServer/server_class.py
+++ b/backend/server/rhnServer/server_class.py
@@ -710,38 +710,6 @@ class Server(ServerWrapper):
return 0
return 1
- def checkSatEntitlement(self):
- """Check serverId against DB to see if it maps to an entitled
- RHN Satellite Server.
- """
- h = rhnSQL.prepare("""
- select cert
- from rhnsatelliteinfo si
- where si.server_id = :serverId
- """)
- h.execute(serverId=self.server["id"])
- row = h.fetchone_dict()
- if not row:
- return 0
-
- cert = row['cert']
- if not cert:
- return 0
-
- # Bugzilla #219625
- # Cert is now a blob, so convert it to a string
- cert = cert.read()
-
- self.satellite_cert = SatelliteCert()
- self.satellite_cert.load(cert)
- # Some sanity checking
- #if self.satellite_cert.expires:
- # if time.time() > self.satellite_cert.expires:
- # # Expired satellite
- # return 0
-
- return 1
-
def checkin(self, commit = 1, check_for_abuse = 1):
""" convenient wrapper for these thing until we clean the code up
"""
if not self.server.has_key("id"):
commit 293a855b81ca8c3d5049ef0f89e6313f46e11f88
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:15:29 2010 +0200
Method updateAndPrint not used, removing.
diff --git a/backend/satellite_tools/progress_bar.py
b/backend/satellite_tools/progress_bar.py
index cc732d3..870b087 100644
--- a/backend/satellite_tools/progress_bar.py
+++ b/backend/satellite_tools/progress_bar.py
@@ -101,11 +101,6 @@ class ProgressBar:
"Update the object's status to an additional bar size."
self.update(self.size + additionalSize)
- def updateAndPrint(self, newSize):
- "shorthand for update() and printIncrement()"
- self.update(newSize)
- self.printIncrement()
-
def complete(self):
self.update(self.finalSize)
commit 30a2b80b202c7521fd9339fecbccea9ec310349b
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:14:36 2010 +0200
Method addToAndPrint not used, removing.
diff --git a/backend/satellite_tools/progress_bar.py
b/backend/satellite_tools/progress_bar.py
index c7b50f4..cc732d3 100644
--- a/backend/satellite_tools/progress_bar.py
+++ b/backend/satellite_tools/progress_bar.py
@@ -101,11 +101,6 @@ class ProgressBar:
"Update the object's status to an additional bar size."
self.update(self.size + additionalSize)
- def addToAndPrint(self, additionalSize):
- "shorthand for addTo() and printIncrement()"
- self.addTo(additionalSize)
- self.printIncrement()
-
def updateAndPrint(self, newSize):
"shorthand for update() and printIncrement()"
self.update(newSize)
commit 7bc10f0cf3b726abc1edc73aa83cc3b35f26305c
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:13:12 2010 +0200
Method addFromPackageBatch not used, removing.
diff --git a/backend/server/importlib/packageImport.py
b/backend/server/importlib/packageImport.py
index 7b03295..4812ff3 100644
--- a/backend/server/importlib/packageImport.py
+++ b/backend/server/importlib/packageImport.py
@@ -143,32 +143,6 @@ class ChannelPackageSubscription(GenericPackageImport):
affected_channels[channel_id] = channel_label
self.affected_channels = affected_channels.values()
- def addFromPackageBatch(self, batch):
- # Initialize the batch with information from the other batch
- for package in batch:
- if not isinstance(package, Package):
- raise TypeError("Expected a Package instance")
- if package.ignored:
- # Skip it
- continue
- # Build an IncompletePackage
- dict = {
- 'name' : package.name,
- 'epoch' : package.evr[0],
- 'version' : package.evr[1],
- 'release' : package.evr[2],
- 'arch' : package.arch,
- 'org_id' : package.org_id,
- }
- channels = package.channels or []
- l = []
- for channel in channels:
- l.append({'label' : channel})
- dict['channels'] = l
- p = IncompletePackage()
- p.populate(dict)
- self.batch.append(p)
-
def _processPackage(self, package):
GenericPackageImport._processPackage(self, package)
commit 69031eb76c80f21c0f6e96ad0c8808caec276ea6
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:06:48 2010 +0200
The comment says we do not want to use rpmLabelCompare, let us just remove it.
diff --git a/backend/spacewalk/common/rhn_rpm.py b/backend/spacewalk/common/rhn_rpm.py
index 8302bc4..7b74659 100644
--- a/backend/spacewalk/common/rhn_rpm.py
+++ b/backend/spacewalk/common/rhn_rpm.py
@@ -349,19 +349,11 @@ def hdrLabelCompare(hdr1, hdr2):
return 1
-def rpmLabelCompare(rpmFilename1, rpmFilename2):
- """ take two RPMs and compare them for order """
- return hdrLabelCompare(get_package_header(rpmFilename1),
- get_package_header(rpmFilename2))
-
-
def sortRPMs(rpms):
""" Sorts a list of RPM files. They *must* exist. """
assert isinstance(rpms, type([]))
- # We don't want to use rpmLabelCompare as a sorting mechanism, it would
- # extract the rpm header for each comparison.
# Build a list of (header, rpm)
helper = map(lambda x: (get_package_header(x), x), rpms)
commit 33ea73ac01e24f0acff5a495d40d7e367c8a79cd
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 29 11:05:15 2010 +0200
The method _handle_virt_guest_params was commented out for ages; the virt_type
processing is done in create_system anyway.
diff --git a/backend/server/handlers/xmlrpc/registration.py
b/backend/server/handlers/xmlrpc/registration.py
index 23a15be..f75fb26 100644
--- a/backend/server/handlers/xmlrpc/registration.py
+++ b/backend/server/handlers/xmlrpc/registration.py
@@ -554,9 +554,6 @@ class Registration(rhnHandler):
system_certificate = newserv.system_id()
- # Check guest parameters and perform updates if necessary.
- # self._handle_virt_guest_params(system_certificate, data)
-
# Return the server certificate file down to the client.
return system_certificate
@@ -630,9 +627,6 @@ class Registration(rhnHandler):
# Get the server certificate file
system_certificate = newserv.system_id()
- # Check guest parameters and perform updates if necessary.
- # self._handle_virt_guest_params(system_certificate, other)
-
log_debug(4, 'Server id created as %s' % server_id)
failures = []
diff --git a/backend/server/rhnVirtualization.py b/backend/server/rhnVirtualization.py
index 5a4f743..bedb89a 100644
--- a/backend/server/rhnVirtualization.py
+++ b/backend/server/rhnVirtualization.py
@@ -773,26 +773,6 @@ class VirtualizationEventHandler:
###############################################################################
# Module level functions
###############################################################################
-def _handle_virt_guest_params(system_certificate, params):
- # Get the uuid, if there is one.
- if params.has_key('virt_uuid'):
- virt_uuid = params['virt_uuid']
- if virt_uuid is not None and not is_host_uuid(virt_uuid):
- # If we don't have a virt_type key, we'll assume PARA.
- virt_type = None
- if params.has_key('virt_type'):
- virt_type = params['virt_type']
- if virt_type == 'para':
- virt_type = VirtualizationType.PARA
- elif virt_type == 'fully':
- virt_type = VirtualizationType.FULLY
- else:
- raise Exception(
- "Unknown virtualization type: %s" % virt_type)
- else:
- raise Exception("Virtualization type not provided")
-
- _notify_guest(system_certificate, virt_uuid, virt_type)
# Notifies the virtualization backend that there is a guest with a
# specific