def _normalizeDateType(value): try: value = int(value) except ValueError: # string return value # Timestamp return backendLib.localtime(value)
def _cleanse_channels(channels_dom): channels = {} for dummy, attributes, child_elements in channels_dom: channel_label = attributes['label'] channels[channel_label] = channel_entry = {} packages = attributes['packages'].split() del attributes['packages'] # Get dir of the prefix prefix = "rhn-package-" prefix_len = len(prefix) packages = [int(x[prefix_len:]) for x in packages] channel_entry['packages'] = packages ks_trees = attributes['kickstartable-trees'].split() channel_entry['ks_trees'] = ks_trees # Clean up to reduce memory footprint if possible attributes.clear() # tag name to object prefix maps = { 'source-packages': ('source_packages', 'rhn-source-package-'), 'rhn-channel-errata': ('errata', 'rhn-erratum-'), } # Now look for package sources for tag_name, dummy, celem in child_elements: if tag_name not in maps: continue field, prefix = maps[tag_name] prefix_len = len(prefix) # Hmm. x[1] is the attributes hash; we fetch the id and we get # rid of te prefix, then we run that through int() objects = [] for dummy, ceattr, dummy in celem: obj_id = ceattr['id'] obj_id = int(obj_id[prefix_len:]) last_modified = localtime(ceattr['last-modified']) objects.append((obj_id, last_modified)) channel_entry[field] = objects # Clean up to reduce memory footprint if possible del child_elements[:] return channels
def __init__(self, header, size, checksum_type, checksum, path=None, org_id=None, channels=[]): headerSource.rpmBinaryPackage.__init__(self) self.tagMap = headerSource.rpmBinaryPackage.tagMap.copy() # Remove already-mapped tags self._already_mapped = [ 'rpm_version', 'payload_size', 'payload_format', 'package_group', 'build_time', 'build_host' ] for tag in self._already_mapped: with suppress(KeyError): del self.tagMap[tag] # XXX is seems to me that this is the place that 'source_rpm' is getting # set for key in self.keys(): field = self.tagMap.get(key, key) if not field: # unsupported continue value = header[field] if key == "build_time" and isinstance(value, int): value = gmtime(value) # unix timestamp elif value == []: value = None elif value: value = str(value) self[key] = value self['package_size'] = size self['checksum_type'] = checksum_type self['checksum'] = checksum self['path'] = path self['org_id'] = org_id self['header_start'] = None self['header_end'] = None self['last_modified'] = localtime(time.time()) if self['sigmd5']: self['sigchecksum_type'] = 'md5' self['sigchecksum'] = self['sigmd5'] del (self['sigmd5']) # Fix some of the information up vendor = self['vendor'] if vendor is None: self['vendor'] = 'Debian' payloadFormat = self['payload_format'] if payloadFormat is None: self['payload_format'] = 'ar' if self['payload_size'] is None: self['payload_size'] = 0 # Populate file information self._populateFiles(header) # Populate dependency information self._populateDependencyInformation(header) # Populate changelogs self._populateChangeLog(header) # Channels self._populateChannels(channels) # populate extraTags from headers not in already mapped fields self._populateExtraTags(header) self['source_rpm'] = None group = self.get('package_group', '') if group == '' or group is None: self['package_group'] = 'NoGroup'