[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