keryx team mailing list archive
-
keryx team
-
Mailing list archive
-
Message #00144
[Merge] lp:~mac9416/keryx/devel into lp:keryx/devel
mac9416 has proposed merging lp:~mac9416/keryx/devel into lp:keryx/devel.
Requested reviews:
Keryx Admins (keryx-admins)
--
https://code.launchpad.net/~mac9416/keryx/devel/+merge/12499
Your team Keryx Development Team is subscribed to branch lp:keryx/devel.
=== modified file 'libkeryx/definitions/dpkg/minideblib/AptRepoClient.py' (properties changed: -x to +x)
--- libkeryx/definitions/dpkg/minideblib/AptRepoClient.py 2009-09-08 05:22:12 +0000
+++ libkeryx/definitions/dpkg/minideblib/AptRepoClient.py 2009-09-27 22:20:21 +0000
@@ -29,10 +29,10 @@
__revision__ = "r"+"$Revision$"[11:-2]
__all__ = [ 'AptRepoClient', 'AptRepoException' ]
-from DpkgControl import DpkgParagraph
-from DpkgDatalist import DpkgOrderedDatalist
-from DpkgVersion import DpkgVersion, VersionError
-from LoggableObject import LoggableObject
+from minideblib.DpkgControl import DpkgParagraph
+from minideblib.DpkgDatalist import DpkgOrderedDatalist
+from minideblib.DpkgVersion import DpkgVersion, VersionError
+from minideblib.LoggableObject import LoggableObject
import re, urllib2, os, types, time
try:
@@ -40,6 +40,7 @@
except NameError:
from sets import Set as set
+
def _universal_urlopen(url):
"""More robust urlopen. It understands gzip transfer encoding"""
headers = { 'User-Agent': 'Mozilla/4.0 (compatible; Python/AptRepoClient)',
@@ -47,15 +48,7 @@
'Cache-Control': 'no-cache',
'Accept-encoding': 'gzip' }
request = urllib2.Request(url, None, headers)
- try:
- import urlgrabber
- from urlgrabber.progress import TextMeter
-
- #BUG: TextMeter prints over itself
- usock = urlgrabber.urlopen(url, http_headers=headers.items(),
- progress_obj=TextMeter())
- except:
- usock = urllib2.urlopen(request)
+ usock = urllib2.urlopen(request)
if usock.headers.get('content-encoding', None) == 'gzip' or url.endswith(".gz"):
data = usock.read()
import cStringIO, gzip
@@ -331,7 +324,7 @@
"""Loads repositories into internal data structures from a local cache. Replaces previous content if clear = True (default)"""
self.load_repos(repoline, ignore_errors, clear, folder)
- # Alias for load_local()
+ # Alias for load_local()d
update_local = load_local
def make_source_to_binaries_map(self):
@@ -419,6 +412,151 @@
def get_available_binaries(self, base_url = None):
return _get_available_pkgs(base_url, self.binaries)
+ def to_strings(self, binaries=True, sources=True):
+ """Exports loaded metadata to _Packages/_Sources file formatted strings
+ Outputs both source and binary data by default. Use binaries=False
+ to output only source data and sources=False for only binary data
+ """
+ def convert_to_url(base_url, distro, section, architecture, datatype):
+ """ Converts repository info into index file URL """
+ if datatype == 'Packages':
+ url = '%s_dists_%s_%s_binary-%s_%s' % (base_url, distro, section, architecture, datatype)
+ elif datatype == 'Sources':
+ url = '%s_dists_%s_%s_source_%s' % (base_url, distro, section, datatype)
+ return url
+
+ values = ('Package',
+ 'Essential',
+ 'Binary',
+ 'Priority',
+ 'Section',
+ 'Installed-Size',
+ 'Maintainer',
+ 'Original-Maintainer',
+ 'Build-Depends',
+ 'Build-Depends-Indep',
+ 'Architecture',
+ 'Source',
+ 'Version',
+ 'Replaces',
+ 'Provides',
+ 'Depends',
+ 'Pre-Depends',
+ 'Recommends',
+ 'Suggests',
+ 'Conflicts',
+ 'Breaks',
+ 'Filename',
+ 'Size',
+ 'MD5sum',
+ 'SHA1',
+ 'SHA256',
+ 'Description',
+ 'Enhances',
+ 'Origin',
+ 'Bugs',
+ 'Homepage',
+ 'Python-Version',
+ 'Tag',
+ 'Gstreamer-Decoders',
+ 'Gstreamer-Elements',
+ 'Gstreamer-Encoders',
+ 'Gstreamer-Uri-Sinks',
+ 'Gstreamer-Uri-Sources',
+ 'Gstreamer-Version',
+ 'Npp-Applications',
+ 'Npp-Description',
+ 'Npp-Filename',
+ 'Npp-Mimetype',
+ 'Npp-Name',
+ 'Original-Uploaders',
+ 'Python-Runtime',
+ 'Build-Essential',
+ 'Task',
+ 'Standards-Version',
+ 'Format',
+ 'Directory',
+ 'Files',
+ 'Uploaders',
+ 'Dm-Upload-Allowed',
+ 'Vcs-Bzr',
+ 'Vcs-Browser',
+ 'Vcs-Svn',
+ 'Vcs-Git',
+ 'Vcs-Hg',
+ 'Vcs-Cvs',
+ 'Vcs-Darcs',
+ 'Vcs-Arch',
+ 'Checksums-Sha1',
+ 'Checksums-Sha256',
+ 'Orig-Vcs-Browser',
+ 'Orig-Vcs-Svn',
+ 'Debian-Vcs-Browser',
+ 'Debian-Vcs-Svn',
+ 'Build-Conflicts',
+ 'Original-Vcs-Browser',
+ 'Original-Vcs-Svn',
+ 'Build-Conflicts-Indep',
+ 'Python-Standards-Version',
+ 'Debian-Vcs-Git',
+ 'X-Vcs-Svn',
+ 'X-Collab-Maint',
+ 'Original-Vcs-Bzr',
+ 'Vcs-Browse',
+ 'Original-Vcs-Git',)
+
+ # Special values that take multiple lines. All lower-case.
+ multiline_values = ('description',
+ 'files',
+ 'checksums-sha1',
+ 'checksums-sha256')
+
+ data = {}
+ output = {}
+
+ if binaries:
+ data.update({'Packages': self.binaries})
+ if sources:
+ data.update({'Sources': self.sources})
+ if not binaries and not sources:
+ return {}
+
+ for datatype in data.keys(): # 'Packages' or 'Sources'
+ for section in data[datatype].keys():
+ # Populate output with filename keys and empty values.
+ for arch in self._arch:
+ filename = convert_to_url(section[0][7:].replace('/', '_'), section[1], section[2], arch, datatype)
+ output.update({filename: ''})
+ for pkgname in data[datatype][section].keys():
+ for pkg in data[datatype][section][pkgname]:
+ string = ''
+ for value in values:
+ key = value.lower()
+
+ if key in multiline_values:
+ try:
+ if pkg[key] == '':
+ string += '%s:\n' % (value)
+ if type(pkg[key]) == type([]):
+ string += '%s: %s\n' % (value, '\n '.join(pkg[key]))
+ if type(pkg[key]) == type(''):
+ string += '%s: %s\n' % (value, pkg[key])
+ except KeyError:
+ pass
+ else:
+ try: string += '%s: %s\n' % (value, pkg[key])
+ except KeyError: pass
+ string += '\n' # Put a spacer between this and the next entry.
+
+ if pkg['architecture'] == 'all':
+ for arch in self._arch:
+ filename = convert_to_url(section[0][7:].replace('/', '_'), section[1], section[2], arch, datatype)
+ output[filename] += string
+ else:
+ filename = convert_to_url(section[0][7:].replace('/', '_'), section[1], section[2], pkg['architecture'], datatype)
+ output[filename] += string
+ return output
+
def __get_best_version(self, package, base_url, pkgcache):
"""
Should return touple (base_url,package_version) with the best version found in cache.
Follow ups