changeset 29:59524b6d25c0

implementing making pypi directory strcuture from a package
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 30 Mar 2012 11:41:04 -0700
parents c44fb4b6918b
children fe5f282dca9b
files paint/package.py paint/pypi.py
diffstat 2 files changed, 46 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/paint/package.py	Fri Mar 30 11:07:15 2012 -0700
+++ b/paint/package.py	Fri Mar 30 11:41:04 2012 -0700
@@ -4,6 +4,7 @@
 
 import os
 import pip
+import pypi
 import shutil
 import subprocess
 import sys
@@ -182,8 +183,27 @@
         download packages for a pypi directory structure
         http://k0s.org/portfolio/pypi.html
         """
+        if not os.path.exists(directory):
+            os.makedirs(directory)
+        assert os.path.isdir(directory)
         tempdir = tempfile.mkdtemp()
         try:
-            pass
+            self.download(tempdir)
+            for package in os.listdir(tempdir):
+
+                # full path
+                src = os.path.join(tempdir, package)
+
+                # get destination dirname, filename
+                dirname, filename = pypi.pypi_path(src)
+
+                # make the directory if it doesn't exist
+                subdir = os.path.join(directory, dirname)
+                if not os.path.exists(subdir):
+                    os.path.makedirs(subdir)
+                assert os.path.isdir(subdir)
+
+                # move the file
+                shutil.move(src, os.path.join(subdir, filename))
         finally:
             shutil.rmtree(tempdir)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paint/pypi.py	Fri Mar 30 11:41:04 2012 -0700
@@ -0,0 +1,25 @@
+"""
+functions for python package indices
+"""
+
+import os
+import pkginfo
+
+def pypi_path(path):
+    """
+    returns subpath 2-tuple appropriate for pypi path structure:
+    http://k0s.org/portfolio/pypi.html
+    """
+    sdist = pkginfo.sdist.SDist(path)
+
+    # determine the extension (XXX hacky)
+    extensions = ('.tar.gz', '.zip', '.tar.bz2')
+    for ext in extensions:
+        if sdist.filename.endswith(ext):
+            break
+    else:
+        raise Exception("Extension %s not found: %s" % (extensions, sdist.filename))
+
+    # get the filename destination
+    filename = '%s-%s%s' % (sdist.name, sdist.version, ext)
+    return sdist.name, filename