Mercurial > hg > PaInt
comparison paint/package.py @ 7:a7bf894c96c7
yet more stubbing
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 23 Feb 2012 17:41:54 -0800 |
parents | 5b74792d46e4 |
children | c1181e9c9ca2 |
comparison
equal
deleted
inserted
replaced
6:6a6da56314b1 | 7:a7bf894c96c7 |
---|---|
1 """ | 1 """ |
2 package model for python PAckage INTrospection | 2 package model for python PAckage INTrospection |
3 """ | 3 """ |
4 | 4 |
5 import os | |
6 import tarfile | |
5 import tempfile | 7 import tempfile |
8 import urllib2 | |
9 import utils | |
6 | 10 |
7 class Package(object): | 11 class Package(object): |
12 # XXX much of this is generic resource stuff and should be split off | |
8 | 13 |
9 def __init__(self, src): | 14 def __init__(self, src): |
10 self.src = src | 15 self.src = src |
11 self._tmppath = None | 16 self._tmppath = None |
12 | 17 |
13 def path(self): | 18 def path(self): |
14 """filesystem path to package""" | 19 """filesystem path to package""" |
20 | |
21 # return cached copy if it exists | |
22 if self._tmppath: | |
23 return self._tmppath | |
24 | |
25 # fetch from the web if a URL | |
26 tmpfile = None | |
27 src = self.src | |
15 if utils.isURL(self.src): | 28 if utils.isURL(self.src): |
16 if self._tmppath: | 29 tmpfile = self.fetch() |
17 return self._tmppath | |
18 self.fetch() | |
19 return self._tmppath | 30 return self._tmppath |
31 | |
32 # unpack if an archive | |
33 if self.is_archive(src): | |
34 self.unpack(src) | |
35 return self._tmppath | |
36 | |
20 return self.src | 37 return self.src |
21 | 38 |
22 def fetch(self): | 39 def fetch(self): |
23 """fetch from remote source""" | 40 """fetch from remote source""" |
24 self._tmppath = tempfile.mkdtemp() | 41 |
25 raise NotImplementedError | 42 fd, filename = tmpfile.mkstemp() |
43 resource = urllib.urlopen(self.src) | |
44 os.write(fd, resource.read()) | |
45 os.close(fd) | |
46 return filename | |
47 | |
48 def unpack(self, archive): | |
49 """unpack the archive to a temporary destination""" | |
50 # TODO: should handle zipfile additionally at least | |
51 # Ideally, this would be pluggable, etc | |
52 assert tarfile.is_tarfile | |
53 tarfile.TarFile.open( | |
54 | |
55 def is_archive(self, path): | |
56 """returns if the filesystem path is an archive""" | |
57 # TODO: should handle zipfile additionally at least | |
58 # Ideally, this would be pluggable, etc | |
59 return tarfile.is_tarfile(path) |