About us | Join us | Hire us | Contact us | Google Group

root/egg/local.py

Revision 235, 2.2 kB (checked in by bjorn, 3 years ago)

Cosmetic changes.

Line 
1#!/usr/bin/env python
2# encoding: utf-8
3"""PythonEggs support for local (installed) eggs.
4"""
5
6import email
7import pkg_resources
8from cache import Egg
9
10
11def get_installed_eggs():
12    env = pkg_resources.Environment()
13    working_set = pkg_resources.WorkingSet()
14    for package_name in env:
15        # There may be multiple versions of same packages
16        for egg in env[package_name]:
17            md = {}
18            if egg.has_metadata('PKG-INFO'):
19                my_metadata = egg.get_metadata('PKG-INFO')
20                msg = email.message_from_string(my_metadata)
21                for header in [l for l in msg._headers]:
22                    md[header[0].lower()] = header[1]
23                # Better make sure my assumptions about names
24                # and versions being consistent is right...
25                assert egg.version == md.get("version")
26                if package_name.lower() != egg.project_name.lower():
27                    print "warning: %s is not %s" % (package_name, egg.project_name)
28            yield Egg(
29                installed = True,
30                active = egg in working_set,
31                name = unicode(egg.project_name),
32                fullname = unicode(egg.egg_name()),
33                location = unicode(egg.location),
34                license = unicode(md.get("license", "")),
35                author = unicode(md.get("author", "")),
36                home_page = unicode(md.get("home-page", "")),
37                summary = unicode(md.get("summary", "")),
38                platform = unicode(md.get("platform", "")),
39                description = unicode(md.get("description", "")),
40                # extras = egg.extras,
41                # slug = egg.key,
42                # platform = egg.platform,
43                # precedence = egg.precedence,
44                # py_version = egg.py_version,
45                # requires = egg.requires(),
46                version = unicode(egg.version),
47                source = u"local"
48                )
49
50
51def sync(store):
52    new_eggs = list(get_installed_eggs())
53    # delete old
54    for e in store.find(Egg, source=u"local"):
55        store.remove(e)
56    store.commit()
57    # add new
58    for egg in new_eggs:
59        store.add(egg)
60    store.commit()
Note: See TracBrowser for help on using the browser.