diff options
author | Ralph Bean <ralph.bean@gmail.com> | 2011-04-12 19:21:26 -0400 |
---|---|---|
committer | Ralph Bean <ralph.bean@gmail.com> | 2011-04-12 19:21:26 -0400 |
commit | 2aabeb571240760f015e306ef74dac13709b1b9e (patch) | |
tree | edbed881c6e05437f11e704d51a7d13aea506e38 | |
parent | cfa45253b6495622fbbe49e41a1cd86bc070098f (diff) | |
download | leafymiracle-2aabeb571240760f015e306ef74dac13709b1b9e.tar.gz leafymiracle-2aabeb571240760f015e306ef74dac13709b1b9e.tar.xz leafymiracle-2aabeb571240760f015e306ef74dac13709b1b9e.zip |
Package deps crawl/scrape
-rw-r--r-- | leafymiracle/populate.py | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/leafymiracle/populate.py b/leafymiracle/populate.py index cb3c7d4..9859d58 100644 --- a/leafymiracle/populate.py +++ b/leafymiracle/populate.py @@ -19,6 +19,9 @@ from kitchen.text.converters import to_unicode from models import Root, Category, Group, Package, DBSession, initialize_sql +from yum import YumBase +yumobj = YumBase() +yumobj.setCacheDir() def populate(comps='comps-f16', do_dependencies=True): from yum.comps import Comps @@ -60,22 +63,36 @@ def populate(comps='comps-f16', do_dependencies=True): session.flush() if do_dependencies: - yumobj = yum.YumBase() - yumobj.setCacheDir() for package in session.query(Package).all(): - deps = yumobj.pkgSack.searchNevra(name=package.name)[0] - deps_d = pkg.findDeps([pkg]) - deps = [tup[0] for tup in deps_d[deps_d.keys()[0]].keys()] + add_dependencies(package, session) - for dep in deps: - dep_as_package = session.query(Package)\ - .filter_by(name=dep).one() - if dep_as_package not in package.dependencies: - package.dependencies.append(dep_as_package) + session.commit() +def add_dependencies(package, session): + try: + pkg = yumobj.pkgSack.searchNevra(name=package.name)[0] + deps_d = yumobj.findDeps([pkg]) + deps = [tup[0] for tup in deps_d[deps_d.keys()[0]].keys()] + 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) - session.commit() + 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() + except Exception as e: + # TODO -- figure out why some stuff breaks here. + pass def build_comps(): import subprocess |