Mercurial > hg > PaInt
comparison paint/package.py @ 13:0dd1f8f83be2
moving towards some sort of organization
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Fri, 24 Feb 2012 15:39:42 -0800 |
parents | ceb8c69a16f3 |
children | 6d27c2136163 |
comparison
equal
deleted
inserted
replaced
12:ceb8c69a16f3 | 13:0dd1f8f83be2 |
---|---|
14 class Package(object): | 14 class Package(object): |
15 # XXX much of this is generic resource stuff and should be split off | 15 # XXX much of this is generic resource stuff and should be split off |
16 | 16 |
17 def __init__(self, src): | 17 def __init__(self, src): |
18 self.src = src | 18 self.src = src |
19 | |
20 # ephemeral data | |
19 self._tmppath = None | 21 self._tmppath = None |
22 self._egg_info = None | |
20 | 23 |
21 def path(self): | 24 def path(self): |
22 """filesystem path to package""" | 25 """filesystem path to package""" |
23 | 26 |
24 # return cached copy if it exists | 27 # return cached copy if it exists |
70 shutil.rmtree(self._tmppath) | 73 shutil.rmtree(self._tmppath) |
71 self._tmppath = None | 74 self._tmppath = None |
72 | 75 |
73 __del__ = cleanup | 76 __del__ = cleanup |
74 | 77 |
78 ### python-package-specific functionality | |
79 | |
80 def egg_info(self): | |
81 """build the egg_info directory""" | |
82 | |
83 if self._egg_info: | |
84 # return cached copy | |
85 return self._egg_info | |
86 | |
87 directory = self.path | |
88 | |
75 def info(self): | 89 def info(self): |
76 """return info dictionary for package""" | 90 """return info dictionary for package""" |
77 path = self.path() | 91 directory = self.path() |
78 assert os.path.exists(os.path.join(path, 'setup.py')) | 92 assert os.path.exists(os.path.join(path, 'setup.py')) |
93 | |
94 # setup the egg info | |
95 call([sys.executable, 'setup.py', 'egg_info'], cwd=directory, stdout=PIPE) | |
96 | |
97 # get the .egg-info directory | |
98 egg_info = [i for i in os.listdir(directory) | |
99 if i.endswith('.egg-info')] | |
100 assert len(egg_info) == 1, 'Expected one .egg-info directory in %s, got: %s' % (directory, egg_info) | |
101 egg_info = os.path.join(directory, egg_info[0]) | |
102 assert os.path.isdir(egg_info), "%s is not a directory" % egg_info | |
103 | |
104 # read the dependencies | |
105 requires = os.path.join(egg_info, 'requires.txt') | |
106 if os.path.exists(requires): | |
107 dependencies = [i.strip() for i in file(requires).readlines() if i.strip()] | |
108 else: | |
109 dependencies = [] | |
110 | |
111 # read the package information | |
112 pkg_info = os.path.join(egg_info, 'PKG-INFO') | |
113 info_dict = {} | |
114 for line in file(pkg_info).readlines(): | |
115 if not line or line[0].isspace(): | |
116 continue # XXX neglects description | |
117 assert ':' in line | |
118 key, value = [i.strip() for i in line.split(':', 1)] | |
119 info_dict[key] = value | |
120 | |
121 # return the information | |
122 return info_dict['Name'], dependencies | |
79 | 123 |
80 def dependencies(self): | 124 def dependencies(self): |
81 info = self.info() | 125 info = self.info() |