1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from spacewalk.common import rhn_rpm
20 from spacewalk.common.rhnLog import log_debug
21 from spacewalk.common.rhnException import rhnFault
22
23 from spacewalk.server import rhnChannel, taskomatic, rhnSQL
24 from spacewalk.server.importlib.backendOracle import SQLBackend
25 from spacewalk.server.importlib.headerSource import createPackage
26 from spacewalk.server.importlib.importLib import Collection
27 from spacewalk.server.importlib.packageImport import packageImporter
28 from spacewalk.server.importlib.errataCache import schedule_errata_cache_update
29
30
32 log_debug(4, source, force, caller)
33 batch = Collection()
34 packageList = info.get("packages") or []
35 if not packageList:
36 raise Exception("Nothing to do")
37
38 org_id = info.get('orgId')
39 if org_id == '':
40 org_id = None
41
42 if source:
43 channelList = []
44 else:
45 channelList = info.get("channels") or []
46
47 for package in packageList:
48 p = __processPackage(package, org_id, channelList, source)
49 batch.append(p)
50
51 backend = SQLBackend()
52 importer = packageImporter(batch, backend, source, caller=caller)
53
54 importer.setUploadForce(force)
55
56 importer.run()
57 if not source:
58 importer.subscribeToChannels()
59
60
61 newpkgs = []
62 uploaded = []
63 for pkg in importer.status():
64 if pkg.ignored or pkg.diff:
65 uploaded.append(pkg)
66 else:
67 newpkgs.append(pkg)
68
69
70 if not source:
71
72 schedule_errata_cache_update(importer.affected_channels)
73 taskomatic.add_to_repodata_queue_for_channel_package_subscription(
74 importer.affected_channels, batch, caller)
75 rhnSQL.commit()
76
77 return _formatStatus(uploaded), _formatStatus(newpkgs)
78
79
81 log_debug(4, org_id, channels, source)
82 if 'md5sum' in package:
83 package['checksum_type'] = 'md5'
84 package['checksum'] = package['md5sum']
85 del(package['md5sum'])
86
87 if 'checksum' not in package:
88 raise rhnFault(50, "The package's checksum digest has not been specified")
89 if 'packageSize' not in package:
90 raise rhnFault(50, "The package size has not been specified")
91
92 header = rhn_rpm.headerLoad(package['header'].data)
93 if not header:
94 raise rhnFault(50)
95 packageSize = package['packageSize']
96 relpath = package.get('relativePath')
97
98 if 'header_start' in package:
99 header_start = package['header_start']
100 else:
101 header_start = 0
102 if 'header_end' in package:
103 header_end = package['header_end']
104 else:
105
106 header_end = packageSize
107
108 checksum_type = package['checksum_type']
109 checksum = package['checksum']
110 p = createPackage(header, packageSize, checksum_type, checksum, relpath, org_id,
111 header_start, header_end, channels)
112 return p
113
114
135
136
138 if object is None:
139 return ''
140 from spacewalk.common.usix import IntType, StringType, FloatType
141 if type(object) in (IntType, StringType, FloatType):
142 return object
143 from spacewalk.common.usix import ListType
144 if isinstance(object, ListType):
145 return list(map(_dump, object))
146 from spacewalk.common.usix import TupleType
147 if isinstance(object, TupleType):
148 return tuple(map(_dump, object))
149 from spacewalk.common.usix import DictType
150 if isinstance(object, DictType):
151 dict = {}
152 for h, v in object.items():
153 dict[_dump(h)] = _dump(v)
154 return dict
155 return str(object)
156
157
160
161
164
165
168
169
171
172
173 channels = set(channelList)
174 rez = []
175 for channel in channels:
176 c_info = rhnChannel.channel_info(channel)
177 if not c_info:
178
179 continue
180
181 if is_source:
182 packageList = rhnChannel.list_packages_source(c_info['id'])
183 else:
184 if include_checksums:
185 packageList = rhnChannel.list_packages_checksum_sql(
186 c_info['id'])
187 else:
188 packageList = rhnChannel.list_packages_sql(c_info['id'])
189 for p in packageList:
190 if is_source:
191 for pkg in range(len(p)):
192 if p[pkg] is None:
193 p[pkg] = ""
194 print(p)
195 rez.append([p[0], p[1], p[2], p[3], channel])
196 else:
197 if include_checksums:
198 rez.append([p[0], p[1], p[2], p[3], p[4], p[6], p[7],
199 channel])
200 else:
201 rez.append([p[0], p[1], p[2], p[3], p[4], channel])
202 return rez
203