Author: hertzog Date: 2006-04-13 22:41:31 +0000 (Thu, 13 Apr 2006) New Revision: 112
Modified: lib/trunk/README lib/trunk/bin/update-db.py lib/trunk/etc/collab-maint.conf lib/trunk/lib/collabmaint/conf.py lib/trunk/lib/collabmaint/db.py lib/trunk/lib/collabmaint/web.py lib/trunk/templates/list-packages.kid Log: A bit of progress, the web interface displays the list of packages with basic meta-information. Modified: lib/trunk/README =================================================================== --- lib/trunk/README 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/README 2006-04-13 22:41:31 UTC (rev 112) @@ -1,4 +1,4 @@ - + Packages required : ------------------- pythonX.X-subversion Modified: lib/trunk/bin/update-db.py =================================================================== --- lib/trunk/bin/update-db.py 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/bin/update-db.py 2006-04-13 22:41:31 UTC (rev 112) @@ -9,32 +9,49 @@ import collabmaint.db from sqlobject import * -objects = collabmaint.repos.builder.getAllRepositories(Cnf) +# Handle verbose mode +def log_message(msg, level=1): + global Cnf + if int(Cnf["Options::Verbose"]) >= level: + print msg + +# Start of the code +repositories = collabmaint.repos.builder.getAllRepositories(Cnf) + # TODO: -# this script should insert everything in the DB and for some reasons, -# doesn't manage to handle the versions ... +# Synchronize list of repositories -for obj in objects: - mylist = obj.getPackageList() - for pkg_name in mylist: - meta = obj.getMetaInformation(pkg_name) +# Synchronize list of distributions / suite + +# Synchronize info from repository into database +for repo in repositories: # Loop on all repositories + mylist = repo.getPackageList() + for pkg_name in mylist: # Loop on all packages of this repo + # Retrieve information about the package from the repository + # and synchronize it to the database + meta = repo.getMetaInformation(pkg_name) + log_message ("Found %s/%s in %s" % (pkg_name, meta["version"], repo.id)) try: package = collabmaint.db.Package.byName(pkg_name) except SQLObjectNotFound: package = collabmaint.db.Package(name=pkg_name) try: - suite = collabmaint.db.Suite.byDistribution(meta["distribution"]) + suite = collabmaint.db.Suite.byName(meta["distribution"]) except SQLObjectNotFound: - suite = collabmaint.db.Suite(distribution=meta["distribution"]) - versions = list(collabmaint.db.Version.select( AND( - collabmaint.db.Version.q.packageID == package.q.id, - collabmaint.db.Version.q.source == obj.id))) - if len(versions) == 0: + suite = collabmaint.db.Suite(name=meta["distribution"]) + found_version = False + version = None + for v in package.versions: + if (v.version == meta["version"] and + v.source == repo.id): + found_version = True + version = v + if not found_version: version = collabmaint.db.Version(package=package, version=meta["version"], - suite=suite, source=obj.id) + suite=suite, source=repo.id) + log_message("New version created.", 2) else: - version = versions[0] - if version not in package.versions: - print package - print version + log_message("Good version already exists.", 2) + # Update the information on the version + version.suite = suite Modified: lib/trunk/etc/collab-maint.conf =================================================================== --- lib/trunk/etc/collab-maint.conf 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/etc/collab-maint.conf 2006-04-13 22:41:31 UTC (rev 112) @@ -36,3 +36,7 @@ type "svn-remote"; URI "svn://svn.debian.org/collab-maint/ext-maint"; }; + +Options { + Verbose 0; +} Modified: lib/trunk/lib/collabmaint/conf.py =================================================================== --- lib/trunk/lib/collabmaint/conf.py 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/lib/collabmaint/conf.py 2006-04-13 22:41:31 UTC (rev 112) @@ -8,17 +8,18 @@ def __init__(self): self.Cnf = apt_pkg.newConfiguration() - self.Cnf.Set("config-file","./etc/collab-maint.conf"); + self.Cnf.Set("Options::Config-file","./etc/collab-maint.conf"); if posixpath.exists("./etc/collab-maint.conf"): apt_pkg.ReadConfigFile(self.Cnf,"./etc/collab-maint.conf") else: - self.Cnf.Set("config-file","/etc/collab-maint.conf"); - if posixpath.exists(self.Cnf.FindFile("config-file")): + self.Cnf.Set("Options::Config-file","/etc/collab-maint.conf"); + if posixpath.exists(self.Cnf.FindFile("Options::Config-file")): apt_pkg.ReadConfigFile(self.Cnf,"/etc/collab-maint.conf") # Merge the command line arguments into the configuration space - Arguments = [('h',"help","help"), - ('c',"config-file","","ConfigFile"), + Arguments = [('h',"help","Options::Help"), + ('c',"config-file","Options::Config-file","ConfigFile"), + ('v',"verbose","Options::Verbose","IntLevel"), ('o',"option","","ArbItem")] self.Filenames = apt_pkg.ParseCommandLine(self.Cnf,Arguments,sys.argv); Modified: lib/trunk/lib/collabmaint/db.py =================================================================== --- lib/trunk/lib/collabmaint/db.py 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/lib/collabmaint/db.py 2006-04-13 22:41:31 UTC (rev 112) @@ -1,21 +1,49 @@ from collabmaint.conf import Cnf from sqlobject import * +import apt_pkg +import datetime __connection__ = Cnf["DB"] class Package(SQLObject): name = StringCol(alternateID=True) versions = MultipleJoin('Version') + + def getVersionsFromSource(self, source): + """pkg->getVersionsFromSource(src) -> [Version] + Returns all the known versions of the package in the indicated + source.""" + res = [] + for v in self.versions: + if v.source == source: + res.append(v) + return res + + def getLatestVersionFromSource(self, source): + """pkg->getLatestVersionFromSource(source) -> Version + + Returns the latest version object known in the indicated source.""" + cur_v = None + for v in self.getVersionsFromSource(source): + if cur_v == None: + cur_v = v + else: + if apt_pkg.VersionCompare(v.version, cur_v.version) > 0: + cur_v = v + return cur_v + class Suite(SQLObject): - distribution = StringCol(alternateID=True) + name = StringCol(alternateID=True) class Version(SQLObject): package = ForeignKey('Package') version = StringCol() source = StringCol() suite = ForeignKey('Suite') + timestamp = DateTimeCol(default=datetime.datetime.now()) + active = BoolCol(default=True) class Contributor(SQLObject): name = StringCol() Modified: lib/trunk/lib/collabmaint/web.py =================================================================== --- lib/trunk/lib/collabmaint/web.py 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/lib/collabmaint/web.py 2006-04-13 22:41:31 UTC (rev 112) @@ -3,6 +3,9 @@ import kid import collabmaint.conf +from sqlobject import * +from collabmaint import db + class WebInterface: def __init__(self): return @@ -14,10 +17,30 @@ return template.serialize(output='xhtml') index.exposed = True - def default(self, repository): + def default(self, *args): + if len(args) == 1: + return self.showRepository(args[0]) + elif len(args) == 2: + return "Package view: todo" + default.exposed = True + + def showRepository(self, repository): template = kid.Template(file="templates/list-packages.kid") template.repository = repository - template.list = [ "a", "b" ] + versions = db.Version.select( + AND(db.Version.q.source == repository, + db.Version.q.packageID == db.Package.q.id, + db.Version.q.active == True), + orderBy=db.Package.q.name) + packages = [] + for v in versions: + package = db.Package.get(v.packageID) + suite = db.Suite.get(v.suiteID) + desc = { "name": package.name, + "version": v.version, + "suite": suite.name } + packages.append(desc) + group = { "title": "Main group", + "packages": packages } + template.groups = [ group ] return template.serialize(output='xhtml') - default.exposed = True - Modified: lib/trunk/templates/list-packages.kid =================================================================== --- lib/trunk/templates/list-packages.kid 2006-04-13 22:39:56 UTC (rev 111) +++ lib/trunk/templates/list-packages.kid 2006-04-13 22:41:31 UTC (rev 112) @@ -12,9 +12,19 @@ <div py:match="item.tag == 'content'"> <h1>${repository}</h1> + + <div py:for="group in groups"> + <h2>${group["title"]}</h2> <table> - <!-- list all the packages --> + <!-- list all the packages --> + <tr><th>Package</th><th>Version</th><th>Distribution</th></tr> + <tr py:for="p in group['packages']"> + <td><a href="http://packages.qa.debian.org/${p['name']}">${p["name"]}</a></td> + <td>${p["version"]}</td> + <td>${p["suite"]}</td> + </tr> </table> + </div> </div> </html> _______________________________________________ Collab-maint-devel mailing list Collab-maint-devel@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/collab-maint-devel