diff options
author | Luke Macken <lmacken@redhat.com> | 2011-04-12 21:35:04 -0400 |
---|---|---|
committer | Luke Macken <lmacken@redhat.com> | 2011-04-12 21:35:04 -0400 |
commit | ef0f36eee50df5081280edd069ff452573c0f679 (patch) | |
tree | 91fb6c62687d2c3c5107e3dc8c97cc2819768792 | |
parent | 79380e187bfa4b1ee5db7f017adb9c6fae3b13ad (diff) | |
parent | 13d9a8971b2a0113ee4535e5a6f3e644032cb8fe (diff) | |
download | leafymiracle-ef0f36eee50df5081280edd069ff452573c0f679.tar.gz leafymiracle-ef0f36eee50df5081280edd069ff452573c0f679.tar.xz leafymiracle-ef0f36eee50df5081280edd069ff452573c0f679.zip |
Merge branch 'dependencies'
Conflicts:
.gitignore
README.txt
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | leafymiracle/models.py | 18 | ||||
-rw-r--r-- | leafymiracle/populate.py | 40 | ||||
-rw-r--r-- | leafymiracle/widgets.py | 1 | ||||
-rwxr-xr-x | link_in_system_modules.sh | 10 |
5 files changed, 68 insertions, 4 deletions
@@ -1,9 +1,10 @@ *.pyc *.pyo -*.db +*.db* build dist env *.egg-info *.swp README.pdf +comps diff --git a/leafymiracle/models.py b/leafymiracle/models.py index 0e86aa1..0edbdd4 100644 --- a/leafymiracle/models.py +++ b/leafymiracle/models.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from sqlalchemy import Integer, Column, Unicode, UnicodeText, ForeignKey +from sqlalchemy import Integer, Column, Unicode, UnicodeText, ForeignKey, Table from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, scoped_session, sessionmaker @@ -115,6 +115,22 @@ class Package(Base): """.format(**self.__dict__) } +dependencies_mapping = Table( + 'packages_dependencies_mapping', Base.metadata, + Column('depender_id', Integer, + ForeignKey('packages.id'), primary_key=True), + Column('dependee_id', Integer, + ForeignKey('packages.id'), primary_key=True)) + +Package.__mapper__.add_property('dependencies', relationship( + Package, + primaryjoin=Package.id==dependencies_mapping.c.dependee_id, + secondaryjoin=dependencies_mapping.c.depender_id==Package.id, + secondary=dependencies_mapping, + doc="List of this packages' dependencies!", +)) + + def initialize_sql(engine): DBSession.configure(bind=engine) diff --git a/leafymiracle/populate.py b/leafymiracle/populate.py index 9f78fc5..87d578a 100644 --- a/leafymiracle/populate.py +++ b/leafymiracle/populate.py @@ -19,7 +19,11 @@ from kitchen.text.converters import to_unicode from models import Root, Category, Group, Package, DBSession, initialize_sql -def populate(comps='comps-f16'): +from yum import YumBase +yumobj = YumBase() +yumobj.setCacheDir() + +def populate(comps='comps-f16', do_dependencies=True): from yum.comps import Comps session = DBSession() @@ -58,8 +62,42 @@ def populate(comps='comps-f16'): session.flush() + if do_dependencies: + for package in session.query(Package).all(): + add_dependencies(package, session) + session.commit() +def add_dependencies(package, session): + deps = set() + pkg = yumobj.pkgSack.searchNevra(name=package.name) + if not pkg: + print "Cannot find package: %s" % package + return + + deps_d = yumobj.findDeps([pkg[0]]) + for dep in deps_d.itervalues(): + for req in dep.itervalues(): + deps.add(req[0].name) + + for dep in deps: + base_query = session.query(Package).filter_by(name=dep) + if base_query.count() == 0: + _new_package = Package(name=dep) + session.add(_new_package) + session.flush() + add_dependencies(_new_package, session) + + dep_as_package = base_query.one() + + if dep_as_package not in package.dependencies: + package.dependencies.append(dep_as_package) + + print "package: %s has (%i/%i) deps" % ( + package.name, len(package.dependencies), len(deps)) + + session.flush() + def build_comps(): import subprocess subprocess.call('git clone git://git.fedorahosted.org/comps.git', shell=True) diff --git a/leafymiracle/widgets.py b/leafymiracle/widgets.py index 9810fad..84cae34 100644 --- a/leafymiracle/widgets.py +++ b/leafymiracle/widgets.py @@ -41,7 +41,6 @@ class LeafyGraph(SQLARadialGraph): show_attributes = False imply_relations = True auto_labels = False - excluded_columns = ['group'] deep_linking = True #transition = JSSymbol(src='$jit.Trans.Back.easeInOut') duration = 400 diff --git a/link_in_system_modules.sh b/link_in_system_modules.sh new file mode 100755 index 0000000..36bd81c --- /dev/null +++ b/link_in_system_modules.sh @@ -0,0 +1,10 @@ +#!/bin/bash + + +ln -s /usr/lib/python2.*/site-packages/yum* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/rpm* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/urlgrabber* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/libxml2* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/pycurl* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/sqlitecache* $WORKON_HOME/leafymiracle/lib/python*/site-packages +ln -s /usr/lib/python2.*/site-packages/_sqlitecache* $WORKON_HOME/leafymiracle/lib/python*/site-packages |