Mercurial > hg > PaInt
comparison paint/package.py @ 66:af7609457dc6
introduce a failing test; yay!
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Fri, 25 Jan 2013 13:50:40 -0800 |
| parents | 6d6f5c5c26d4 |
| children | d001017d5870 |
comparison
equal
deleted
inserted
replaced
| 65:6d6f5c5c26d4 | 66:af7609457dc6 |
|---|---|
| 122 | 122 |
| 123 __del__ = _cleanup | 123 __del__ = _cleanup |
| 124 | 124 |
| 125 ### python-package-specific functionality | 125 ### python-package-specific functionality |
| 126 | 126 |
| 127 def _egg_info(self): | |
| 128 """build the egg_info directory""" | |
| 129 | |
| 130 if self._egg_info_path: | |
| 131 # return cached copy | |
| 132 return self._egg_info_path | |
| 133 | |
| 134 directory = self._path() | |
| 135 setup_py = os.path.join(directory, 'setup.py') | |
| 136 if not os.path.exists(setup_py): | |
| 137 raise AssertionError("%s does not exist" % setup_py) | |
| 138 | |
| 139 # setup the egg info | |
| 140 exception = None | |
| 141 try: | |
| 142 code = call([sys.executable, 'setup.py', 'egg_info'], cwd=directory, stdout=subprocess.PIPE) | |
| 143 except Exception, exception: | |
| 144 pass | |
| 145 if code or exception: | |
| 146 message = """Failure to generate egg_info | |
| 147 - src: %s | |
| 148 - directory: %s | |
| 149 """ % (self.src, directory) | |
| 150 if exception: | |
| 151 sys.stderr.write(message) | |
| 152 raise exception | |
| 153 else: | |
| 154 raise Exception(message) | |
| 155 | |
| 156 # get the .egg-info directory | |
| 157 egg_info = [i for i in os.listdir(directory) | |
| 158 if i.endswith('.egg-info')] | |
| 159 assert len(egg_info) == 1, 'Expected one .egg-info directory in %s, got: %s' % (directory, egg_info) | |
| 160 egg_info = os.path.join(directory, egg_info[0]) | |
| 161 assert os.path.isdir(egg_info), "%s is not a directory" % egg_info | |
| 162 | |
| 163 # cache it | |
| 164 self._egg_info_path = egg_info | |
| 165 return self._egg_info_path | |
| 166 | |
| 167 def _pkg_info(self): | |
| 168 """returns path to PKG-INFO file""" | |
| 169 | |
| 170 if self._pkg_info_path: | |
| 171 # return cached value | |
| 172 return self._pkg_info_path | |
| 173 | |
| 174 try: | |
| 175 egg_info = self._egg_info() | |
| 176 except Exception, exception: | |
| 177 # try to get the package info from a file | |
| 178 path = self._path() | |
| 179 pkg_info = os.path.join(path, 'PKG-INFO') | |
| 180 if os.path.exists(pkg_info): | |
| 181 self._pkg_info_path = pkg_info | |
| 182 return self._pkg_info_path | |
| 183 raise Exception("Cannot find or generate PKG-INFO") | |
| 184 | |
| 185 pkg_info = os.path.join(egg_info, 'PKG-INFO') | |
| 186 assert os.path.exists(pkg_info) | |
| 187 self._pkg_info_path = pkg_info | |
| 188 return self._pkg_info_path | |
| 189 | |
| 190 def info(self): | 127 def info(self): |
| 191 """return info dictionary for package""" | 128 """return info dictionary for package""" |
| 192 # could use pkginfo module | 129 # could use pkginfo module |
| 193 | 130 |
| 194 self._log(">>> Getting the info") | 131 self._log(">>> Getting the info") |
| 195 | 132 return self.package_info(self._path())() |
| 196 pkg_info = self._pkg_info() | |
| 197 | |
| 198 # read the package information | |
| 199 info_dict = {} | |
| 200 for line in file(pkg_info).readlines(): | |
| 201 if not line or line[0].isspace(): | |
| 202 continue # XXX neglects description | |
| 203 assert ':' in line | |
| 204 key, value = [i.strip() for i in line.split(':', 1)] | |
| 205 info_dict[key] = value | |
| 206 | |
| 207 # return the information | |
| 208 return info_dict | |
| 209 | 133 |
| 210 def dependencies(self): | 134 def dependencies(self): |
| 211 """return the dependencies""" | 135 """return the dependencies""" |
| 212 # TODO: should probably have a more detailed dict: | 136 # TODO: should probably have a more detailed dict: |
| 213 # {'mozinfo': {'version': '>= 0.2', | 137 # {'mozinfo': {'version': '>= 0.2', |
