comparison paint/package.py @ 19:c54db80d6e7f

fix test
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 27 Feb 2012 12:58:08 -0800
parents 4c4d1e194bf7
children 11bc01a089e7
comparison
equal deleted inserted replaced
18:4c4d1e194bf7 19:c54db80d6e7f
2 package model for python PAckage INTrospection 2 package model for python PAckage INTrospection
3 """ 3 """
4 4
5 import os 5 import os
6 import shutil 6 import shutil
7 import subprocess
8 import sys
7 import tarfile 9 import tarfile
8 import tempfile 10 import tempfile
9 import urllib2 11 import urllib2
10 import utils 12 import utils
13
14 try:
15 from subprocess import check_call as call
16 except ImportError:
17 from subporcess import call
11 18
12 __all__ = ['Package'] 19 __all__ = ['Package']
13 20
14 class Package(object): 21 class Package(object):
15 # XXX much of this is generic resource stuff and should be split off 22 # XXX much of this is generic resource stuff and should be split off
58 # TODO: should handle zipfile additionally at least 65 # TODO: should handle zipfile additionally at least
59 # Ideally, this would be pluggable, etc 66 # Ideally, this would be pluggable, etc
60 assert tarfile.is_tarfile(archive), "%s is not an archive" % self.src 67 assert tarfile.is_tarfile(archive), "%s is not an archive" % self.src
61 tf = tarfile.TarFile.open(archive) 68 tf = tarfile.TarFile.open(archive)
62 self._tmppath = tempfile.mkdtemp() 69 self._tmppath = tempfile.mkdtemp()
63 tf.extractall(path=self._tmppath) 70 members = tf.getmembers()
71
72 # cut off the top level directory
73 assert not [i for i in members if not os.path.sep in i.name]
74 tld = set()
75 for member in members:
76 directory, member.name = member.name.split(os.path.sep, 1)
77 tld.add(directory)
78 assert len(tld) == 1
79
80 # extract
81 for member in members:
82 tf.extract(member, path=self._tmppath)
83 tf.close()
64 84
65 def is_archive(self, path): 85 def is_archive(self, path):
66 """returns if the filesystem path is an archive""" 86 """returns if the filesystem path is an archive"""
67 # TODO: should handle zipfile additionally at least 87 # TODO: should handle zipfile additionally at least
68 # Ideally, this would be pluggable, etc 88 # Ideally, this would be pluggable, etc
88 setup_py = os.path.join(directory, 'setup.py') 108 setup_py = os.path.join(directory, 'setup.py')
89 if not os.path.exists(setup_py): 109 if not os.path.exists(setup_py):
90 raise AssertionError("%s does not exist" % setup_py) 110 raise AssertionError("%s does not exist" % setup_py)
91 111
92 # setup the egg info 112 # setup the egg info
93 call([sys.executable, 'setup.py', 'egg_info'], cwd=directory, stdout=PIPE) 113 call([sys.executable, 'setup.py', 'egg_info'], cwd=directory, stdout=subprocess.PIPE)
94 114
95 # get the .egg-info directory 115 # get the .egg-info directory
96 egg_info = [i for i in os.listdir(directory) 116 egg_info = [i for i in os.listdir(directory)
97 if i.endswith('.egg-info')] 117 if i.endswith('.egg-info')]
98 assert len(egg_info) == 1, 'Expected one .egg-info directory in %s, got: %s' % (directory, egg_info) 118 assert len(egg_info) == 1, 'Expected one .egg-info directory in %s, got: %s' % (directory, egg_info)