changeset 7:a7bf894c96c7

yet more stubbing
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 23 Feb 2012 17:41:54 -0800
parents 6a6da56314b1
children c1181e9c9ca2
files paint/package.py paint/utils.py
diffstat 2 files changed, 52 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/paint/package.py	Thu Feb 23 17:21:42 2012 -0800
+++ b/paint/package.py	Thu Feb 23 17:41:54 2012 -0800
@@ -2,9 +2,14 @@
 package model for python PAckage INTrospection
 """
 
+import os
+import tarfile
 import tempfile
+import urllib2
+import utils
 
 class Package(object):
+    # XXX much of this is generic resource stuff and should be split off
 
     def __init__(self, src):
         self.src = src
@@ -12,14 +17,43 @@
 
     def path(self):
         """filesystem path to package"""
+
+        # return cached copy if it exists
+        if self._tmppath:
+            return self._tmppath
+
+        # fetch from the web if a URL
+        tmpfile = None
+        src = self.src
         if utils.isURL(self.src):
-            if self._tmppath:
-                return self._tmppath
-            self.fetch()
+            tmpfile = self.fetch()
             return self._tmppath
+
+        # unpack if an archive
+        if self.is_archive(src):
+            self.unpack(src)
+            return self._tmppath
+
         return self.src
 
     def fetch(self):
         """fetch from remote source"""
-        self._tmppath = tempfile.mkdtemp()
-        raise NotImplementedError
+
+        fd, filename = tmpfile.mkstemp()
+        resource = urllib.urlopen(self.src)
+        os.write(fd, resource.read())
+        os.close(fd)
+        return filename
+
+    def unpack(self, archive):
+        """unpack the archive to a temporary destination"""
+        # TODO: should handle zipfile additionally at least
+        # Ideally, this would be pluggable, etc
+        assert tarfile.is_tarfile
+        tarfile.TarFile.open(
+
+    def is_archive(self, path):
+        """returns if the filesystem path is an archive"""
+        # TODO: should handle zipfile additionally at least
+        # Ideally, this would be pluggable, etc
+        return tarfile.is_tarfile(path)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paint/utils.py	Thu Feb 23 17:41:54 2012 -0800
@@ -0,0 +1,13 @@
+"""
+utility methods for PaInt
+"""
+
+# TODO: in general, these should be upstreamed to
+# python's standard library or equivalent methods
+# from python's standard library used instead of
+# having yet another utils.py file.
+
+# Until that magical day, we'll put them here
+
+def isURL(path_spec):
+    return '://' in path_spec