[Checkins] SVN: vanguardistas.pydebdep/ Initial import of
vanguardistas.pydebdep
Brian Sutherland
jinty at web.de
Sun Mar 30 16:18:00 EDT 2008
Log message for revision 85016:
Initial import of vanguardistas.pydebdep
Tool for making setuptools dependency information available for debian packaging.
Changed:
A vanguardistas.pydebdep/
A vanguardistas.pydebdep/trunk/
A vanguardistas.pydebdep/trunk/CHANGES.txt
A vanguardistas.pydebdep/trunk/README.txt
A vanguardistas.pydebdep/trunk/pydebdep
A vanguardistas.pydebdep/trunk/rules/
A vanguardistas.pydebdep/trunk/rules/rules.1
A vanguardistas.pydebdep/trunk/setup.py
A vanguardistas.pydebdep/trunk/src/
A vanguardistas.pydebdep/trunk/src/vanguardistas/
A vanguardistas.pydebdep/trunk/src/vanguardistas/__init__.py
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/__init__.py
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_all.conf
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_bin.conf
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_src.conf
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/pydebdep.py
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/__init__.py
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/PKG-INFO
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/SOURCES.txt
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/dependency_links.txt
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/namespace_packages.txt
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/requires.txt
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/top_level.txt
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/test_doctest.py
A vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/translator.py
A vanguardistas.pydebdep/trunk/test.py
-=-
Added: vanguardistas.pydebdep/trunk/CHANGES.txt
===================================================================
--- vanguardistas.pydebdep/trunk/CHANGES.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/CHANGES.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,5 @@
+0.0.3 (unreleased)
+------------------
+
+* Add README.txt and CHANGES.txt
+* Imported into svn.zope.org.
Property changes on: vanguardistas.pydebdep/trunk/CHANGES.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/README.txt
===================================================================
--- vanguardistas.pydebdep/trunk/README.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/README.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,39 @@
+PyDebDep
+--------
+
+Tools for introspecting egg dependency information and providing the resulting
+data to Debian packaging tools.
+
+This package provides a script 'pydebdep' which introspects an installed
+.egg-info to extract egg dependency information. The package names are
+converted to their debian equivilant and the dependency information is printed
+in the format of a dpkg "Depends:" line.
+
+To extract the dependency info of this package, one can:
+
+ $ python2.4 setup.py build
+ $ PYTHONPATH=./src python2.4 pydebdep --depends --egg_info src/vanguardistas.pydebdep.egg-info
+ python-setuptools, python-vanguardistas
+
+This information is then used in a debian/rules file. Included in this package
+(in the rules directory) are debian/rules files for simple situations. They are
+generic, and work for a lot of packages. But if they don't work for yours, make
+your own.
+
+They can be used in a debian/rules file as follows:
+
+ #!/usr/bin/make -f
+
+ EGG_NAME=vanguardistas.pydebdep
+ PACKAGE=python-vanguardistas.pydebdep
+ DEB_SETUPTOOLS=pydebdep
+
+ include /usr/lib/python-vanguardistas.pydebdep/rules/rules.1
+
+Future Development
+------------------
+
+Er, there shouldn't be any, unless someone finds something big.
+
+Mostly what should change is the mapping of setuptools names to debian package
+names as more are added.
Property changes on: vanguardistas.pydebdep/trunk/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/pydebdep
===================================================================
--- vanguardistas.pydebdep/trunk/pydebdep (rev 0)
+++ vanguardistas.pydebdep/trunk/pydebdep 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+"""Exctract information from a setuptools setup.py useful for debian packaging.
+
+see --help for options.
+"""
+
+import sys
+from vanguardistas.pydebdep.pydebdep import deps
+
+sys.exit(deps())
+
Property changes on: vanguardistas.pydebdep/trunk/pydebdep
___________________________________________________________________
Name: svn:executable
+
Added: vanguardistas.pydebdep/trunk/rules/rules.1
===================================================================
--- vanguardistas.pydebdep/trunk/rules/rules.1 (rev 0)
+++ vanguardistas.pydebdep/trunk/rules/rules.1 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,74 @@
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# Values lifted from setup.py and control file
+PYVERS=$(shell pyversions -vr debian/control)
+
+build: $(PYVERS:%=build-python%)
+ touch $@
+build-python%:
+ dh_testdir
+ python$* setup.py build
+ touch $@
+
+.PHONY: clean
+clean:
+ dh_testdir
+ dh_testroot
+ $(MAKE) -f debian/rules $(PYVERS:%=clean-python%)
+ rm -f build-python?.?
+ rm -rf build
+ rm -rf dist
+ dh_clean
+
+clean-python%:
+ python$* setup.py clean
+
+.PHONY: install
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ $(MAKE) -f debian/rules $(PYVERS:%=install-python%)
+
+install-python%:
+ python$* setup.py install --no-compile --single-version-externally-managed --root=debian/$(PACKAGE) --install-data=usr/lib/$(PACKAGE)
+ mv debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME)-*-py$*.egg-info \
+ debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME).egg-info
+ mv debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME)-*-py$*-nspkg.pth \
+ debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME)-nspkg.pth
+
+ i="$$($(DEB_SETUPTOOLS) --depends --egg_info debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME).egg-info)" && echo "setuptools:Depends=$$i" >> debian/$(PACKAGE).substvars
+ i="$$($(DEB_SETUPTOOLS) --conflicts --egg_info debian/$(PACKAGE)/usr/lib/python$*/site-packages/$(EGG_NAME).egg-info)" && echo "setuptools:Conflicts=$$i" >> debian/$(PACKAGE).substvars
+
+.PHONY: binary-common
+binary-common:
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installexamples
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_pycentral
+ dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+.PHONY: binary-indep
+binary-indep: install
+ $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
+
+.PHONY: binary-arch
+binary-arch: install
+ $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
+
+.PHONY: binary
+binary: binary-indep binary-arch
Property changes on: vanguardistas.pydebdep/trunk/rules/rules.1
___________________________________________________________________
Name: svn:executable
+
Added: vanguardistas.pydebdep/trunk/setup.py
===================================================================
--- vanguardistas.pydebdep/trunk/setup.py (rev 0)
+++ vanguardistas.pydebdep/trunk/setup.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,18 @@
+import os
+from setuptools import setup, find_packages
+
+rules = [os.path.join('rules', f) for f in os.listdir('rules') if not f.startswith('.')]
+
+setup(name="vanguardistas.pydebdep",
+ version='0.0.3dev',
+ packages=find_packages('src'),
+ scripts=['pydebdep'],
+ data_files=[('rules', rules)],
+ namespace_packages=["vanguardistas"],
+ package_dir = {'': 'src'},
+ install_requires = [
+ 'setuptools',
+ ],
+ include_package_data = True,
+ zip_safe = False,
+ )
Property changes on: vanguardistas.pydebdep/trunk/setup.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/__init__.py
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/__init__.py (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/__init__.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,3 @@
+# this is a namespace package
+import pkg_resources
+pkg_resources.declare_namespace(__name__)
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/__init__.py
===================================================================
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_all.conf
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_all.conf (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_all.conf 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,13 @@
+# Egg to all mapping
+# This is a default mapping list for the simple cases.
+# Usable in the case where debian binary and source packages have the same name
+# For more complex cases, there are overrides of this file
+#
+# Try keep it ordered alphabetically.
+#
+# The format is "setuptools_name<whitespace>debian_package"
+PIL python-imaging
+
+vanguardistas.publicview publicview
+vanguardistas.cc contentcenter
+vanguardistas.vanguardistas vanguardistas
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_bin.conf
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_bin.conf (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_bin.conf 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,6 @@
+# Map eggs to debian binary packages
+
+vanguardistas.builder vanguardistas.builder
+BeautifulSoup python-beautifulsoup
+M2Crypto python-m2crypto
+SQLAlchemy python-sqlalchemy
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_src.conf
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_src.conf (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/mapping/egg_to_src.conf 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,4 @@
+# Map eggs to debian source packages
+BeautifulSoup beautifulsoup
+M2Crypto m2crypto
+SQLAlchemy sqlalchemy
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/pydebdep.py
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/pydebdep.py (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/pydebdep.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,85 @@
+import sys
+import os.path
+import optparse
+
+from pkg_resources import PathMetadata, Distribution
+
+from vanguardistas.pydebdep import translator
+
+setuptools_debian_operators = {'>=': '>=',
+ '>': '>>',
+ '<': '<<',
+ '==': '=',
+ '!=': None, # != not supported by debian, use conflicts in future for this
+ '<=': '<='}
+
+def parse_args(argv):
+ """Parse the command line arguments"""
+ parser = optparse.OptionParser(usage="usage: %prog [options]")
+ parser.add_option("--egg_info", dest="egginfo",
+ help="The egg-info directory to use.")
+ parser.add_option("--depends", dest="depends", action="store_true",
+ help="Print a Depends: line to stout", default=False)
+ parser.add_option("--conflicts", dest="conflicts", action="store_true",
+ help="Print a Conflicts: line to stout", default=False)
+ options, args = parser.parse_args(argv)
+ assert len(args) == 1, args
+ assert options.depends ^ options.conflicts
+ assert os.path.exists(options.egginfo), options.egginfo
+ return options
+
+def get_debian_dependencies(file):
+ """Returns a list of the format of the dpkg dependency info."""
+ pydeps = []
+ base_dir = os.path.dirname(file)
+ metadata = PathMetadata(base_dir, file)
+ dist = Distribution.from_filename(file, metadata=metadata)
+ tr = translator.PackageNameTranslator()
+ dist.requires()
+ for req in dist.requires():
+ bin_pkg = tr.egg_to_binary(req.project_name)
+ if req.specs:
+ for spec in req.specs:
+ op, version = spec
+ op = setuptools_debian_operators[op]
+ if op is None:
+ continue
+ pydeps.append('%s (%s %s)' % (bin_pkg, op, version))
+ else:
+ pydeps.append(bin_pkg)
+ # Let's depend on the namespace pacakges as well.
+ # this is a pretty ugly way to get __init__.py into the namespace packages
+ # which seems to be necessary.
+ # though testing it out on ubuntu gutsy said it wasnt, it was on Debian etch
+ #
+ # Perhaps we could remove this a bit later
+ namespace_pkgs = dist._get_metadata('namespace_packages.txt')
+ for pkg in namespace_pkgs:
+ bin_pkg = tr.egg_to_binary(pkg)
+ pydeps.append(bin_pkg)
+ return pydeps
+
+def deps(argv=sys.argv):
+ """Run the dependency calculation program.
+
+ >>> import os
+ >>> here = os.path.dirname(__file__)
+ >>> ex1 = os.path.join(here, 'tests', 'dummy.foo.egg-info')
+ >>> exitcode = deps(['bin', '--egg_info', ex1, '--depends'])
+ python-foo (>> 0.1), python-foobar, python-bar (<< 0.3), python-dummy
+ >>> exitcode
+ 0
+
+ >>> exitcode = deps(['bin', '--egg_info', ex1, '--conflicts'])
+ <BLANKLINE>
+ >>> exitcode
+ 0
+ """
+ options = parse_args(argv)
+ if options.conflicts:
+ print ''
+ return 0
+ if options.depends:
+ print ', '.join(get_debian_dependencies(options.egginfo))
+ return 0
+ return 1
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/pydebdep.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/__init__.py
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/__init__.py (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/__init__.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1 @@
+# import
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/PKG-INFO
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/PKG-INFO (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/PKG-INFO 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,10 @@
+Metadata-Version: 1.0
+Name: dummy.foo
+Version: 1.0
+Summary: UNKNOWN
+Home-page: UNKNOWN
+Author: UNKNOWN
+Author-email: UNKNOWN
+License: UNKNOWN
+Description: UNKNOWN
+Platform: UNKNOWN
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/SOURCES.txt
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/SOURCES.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/SOURCES.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,16 @@
+__init__.py
+apt.py
+egg_metadata.txt
+setup.ex1.py
+setup.ex2.py
+simple.dsc
+test_doctest.py
+dummy/__init__.py
+dummy.foo.egg-info/PKG-INFO
+dummy.foo.egg-info/SOURCES.txt
+dummy.foo.egg-info/dependency_links.txt
+dummy.foo.egg-info/namespace_packages.txt
+dummy.foo.egg-info/requires.txt
+dummy.foo.egg-info/top_level.txt
+dummy/foo/__init__.py
+test_eggs/z3c.breadcrumb-1.0.2.tar.gz
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/SOURCES.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/dependency_links.txt
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/dependency_links.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/dependency_links.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1 @@
+
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/dependency_links.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/namespace_packages.txt
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/namespace_packages.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/namespace_packages.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1 @@
+dummy
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/namespace_packages.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/requires.txt
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/requires.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/requires.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,4 @@
+foo > 0.1
+foobar
+bar != 0.2
+bar < 0.3
\ No newline at end of file
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/requires.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/top_level.txt
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/top_level.txt (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/top_level.txt 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1 @@
+dummy
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/dummy.foo.egg-info/top_level.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/test_doctest.py
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/test_doctest.py (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/test_doctest.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,8 @@
+import unittest
+import doctest
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(doctest.DocTestSuite('vanguardistas.pydebdep.translator'))
+ suite.addTest(doctest.DocTestSuite('vanguardistas.pydebdep.pydebdep'))
+ return suite
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/tests/test_doctest.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/translator.py
===================================================================
--- vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/translator.py (rev 0)
+++ vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/translator.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,134 @@
+import os
+import logging
+from subprocess import call
+
+_marker = object()
+_here = os.path.dirname(__file__)
+
+class PackageNameTranslator:
+ """
+ >>> trans = PackageNameTranslator(source_egg_map={'somesource': 'someegg'})
+
+ Try a default translation:
+
+ >>> trans.egg_to_source('egg')
+ 'python-egg'
+
+ A globally set translation:
+
+ >>> trans.egg_to_source('PIL')
+ 'python-imaging'
+ >>> trans.source_to_egg('python-imaging')
+ 'PIL'
+
+ A global translation where the binary and source translations are different:
+
+ >>> trans.egg_to_source('vanguardistas.builder')
+ 'python-vanguardistas.builder'
+ >>> trans.egg_to_binary('vanguardistas.builder')
+ 'vanguardistas.builder'
+
+ A locally overridden translation:
+
+ >>> trans.source_to_egg('somesource')
+ 'someegg'
+ """
+
+ def __init__(self, egg_binary_map=None, binary_egg_map=None,
+ egg_source_map=None, source_egg_map=None):
+ self._egg_binary = egg_binary_map
+ if self._egg_binary is None:
+ self._egg_binary = {}
+ self._egg_source = egg_source_map
+ if self._egg_source is None:
+ self._egg_source = {}
+ self._source_egg = source_egg_map
+ if self._source_egg is None:
+ self._source_egg = {}
+ self._binary_egg = binary_egg_map
+ if self._binary_egg is None:
+ self._binary_egg = {}
+
+ def _get(self, name, marker, *mappings):
+ for m in mappings:
+ r = m.get(name, marker)
+ if r is not marker:
+ return r
+ return marker
+
+ def egg_to_binary(self, egg_name):
+ """Convert a setuptools name to a debian binary package name."""
+ r = self._get(egg_name, _marker, self._egg_binary, _EGG_BINARY_MAP)
+ if r is not _marker:
+ return r
+ return 'python-%s' % egg_name
+
+ def binary_to_egg(self, binary_name):
+ """Convert a debian binary package name to a setuptools name."""
+ r = self._get(binary_name, _marker, self._binary_egg, _BINARY_EGG_MAP)
+ if r is not _marker:
+ return r
+ return binary_name[7:] # just get rid of python-
+
+ def source_to_egg(self, source_name):
+ """Convert a debian source package name to a setuptools name."""
+ r = self._get(source_name, _marker, self._source_egg, _SOURCE_EGG_MAP)
+ if r is not _marker:
+ return r
+ return source_name[7:] # just get rid of python-
+
+ def egg_to_source(self, egg_name):
+ """Convert a setuptools name to a debian source package name."""
+ r = self._get(egg_name, _marker, self._egg_source, _EGG_SOURCE_MAP)
+ if r is not _marker:
+ return r
+ return 'python-%s' % egg_name
+
+
+def version_compare(egg, source):
+ if _dpkg_is_gt(egg.version, source.version):
+ logging.debug("%s is greater than %s" % (egg.version, source.version))
+ return '>'
+ logging.debug("%s is NOT greater than %s" % (egg.version, source.version))
+ return None # Dunno!!!
+
+def _dpkg_is_gt(v1, v2):
+ """
+ >>> _dpkg_is_gt('1', '2')
+ False
+ >>> _dpkg_is_gt('2', '1')
+ True
+ >>> _dpkg_is_gt('1', '1')
+ False
+ """
+ retcode = call(['dpkg', '--compare-versions', v1, '>>', v2])
+ if retcode == 0:
+ return True
+ return False
+
+# An attempt at a cannonical list of translations
+def _read_map(file, map):
+ try:
+ f = open(file, 'r')
+ for line in f.readlines():
+ line = line.strip()
+ if not line or line.startswith('#'):
+ continue
+ k, v = line.split()
+ assert k not in map, "Duplicate key %s already in map. File %s" % (k, file)
+ map[k] = v
+ finally:
+ f.close()
+
+_EGG_ALL_MAP = {}
+_read_map(os.path.join(_here, 'mapping', 'egg_to_all.conf'), _EGG_ALL_MAP)
+
+_EGG_BINARY_MAP = _EGG_ALL_MAP.copy()
+_read_map(os.path.join(_here, 'mapping', 'egg_to_bin.conf'), _EGG_BINARY_MAP)
+
+_BINARY_EGG_MAP = dict([(v,k) for (k,v) in _EGG_BINARY_MAP.iteritems()])
+
+_EGG_SOURCE_MAP = _EGG_ALL_MAP.copy()
+_read_map(os.path.join(_here, 'mapping', 'egg_to_src.conf'), _EGG_SOURCE_MAP)
+
+_SOURCE_EGG_MAP = dict([(v,k) for (k,v) in _EGG_SOURCE_MAP.iteritems()])
Property changes on: vanguardistas.pydebdep/trunk/src/vanguardistas/pydebdep/translator.py
___________________________________________________________________
Name: svn:eol-style
+ native
Added: vanguardistas.pydebdep/trunk/test.py
===================================================================
--- vanguardistas.pydebdep/trunk/test.py (rev 0)
+++ vanguardistas.pydebdep/trunk/test.py 2008-03-30 20:17:59 UTC (rev 85016)
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+"""
+Run all unit tests.
+"""
+
+import unittest
+import sys
+
+def main():
+ sys.path.insert(0, 'src')
+ suite = unittest.TestSuite()
+ from vanguardistas.pydebdep.tests.test_doctest import test_suite
+ suite.addTest(test_suite())
+ runner = unittest.TextTestRunner(verbosity=1)
+ runner.run(suite)
+
+if __name__ == '__main__':
+ main()
Property changes on: vanguardistas.pydebdep/trunk/test.py
___________________________________________________________________
Name: svn:executable
+
Name: svn:eol-style
+ native
More information about the Checkins
mailing list