def __init__(self, opts): """ @param opts: OptionParser's opts @type opts: OptionParser """ # list of files to remove at the end of processing self.cleanup = [] self.opts = opts self.outdir = os.path.join(opts.repodir, 'repoview') self.exclude = '1=1' self.state_data = {} #? self.written = {} #? self.groups = [] self.letter_groups = [] self.pconn = None # primary.sqlite self.oconn = None # other.sqlite self.sconn = None # state db self.setup_repo() self.setup_outdir() self.setup_state_db() self.setup_excludes() if not self.groups: self.setup_rpm_groups() letters = self.setup_letter_groups() repo_data = { 'title': opts.title, 'letters': letters, 'my_version': VERSION } group_kid = Template(file=os.path.join(opts.templatedir, GRPKID)) group_kid.assume_encoding = "utf-8" group_kid.repo_data = repo_data self.group_kid = group_kid pkg_kid = Template(file=os.path.join(opts.templatedir, PKGKID)) pkg_kid.assume_encoding = "utf-8" pkg_kid.repo_data = repo_data self.pkg_kid = pkg_kid count = 0 for group_data in self.groups + self.letter_groups: (grp_name, grp_filename, grp_description, pkgnames) = group_data pkgnames.sort() group_data = { 'name': grp_name, 'description': grp_description, 'filename': grp_filename, } packages = self.do_packages(repo_data, group_data, pkgnames) if not packages: # Empty groups are ignored del self.groups[count] continue count += 1 group_data['packages'] = packages checksum = self.mk_checksum(repo_data, group_data) if self.has_changed(grp_filename, checksum): # write group file self.say('Writing group %s\n' % grp_filename) self.group_kid.group_data = group_data outfile = os.path.join(self.outdir, grp_filename) self.group_kid.write(outfile, output='xhtml-strict') latest = self.get_latest_packages() repo_data['latest'] = latest repo_data['groups'] = self.groups checksum = self.mk_checksum(repo_data) if self.has_changed('index.html', checksum): # Write index.html and rss feed (if asked) self.say('Writing index.html...') idx_tpt = os.path.join(self.opts.templatedir, IDXKID) idx_kid = Template(file=idx_tpt) idx_kid.assume_encoding = "utf-8" idx_kid.repo_data = repo_data idx_kid.url = self.opts.url idx_kid.latest = latest idx_kid.groups = self.groups outfile = os.path.join(self.outdir, 'index.html') idx_kid.write(outfile, output='xhtml-strict') self.say('done\n') # rss feed if self.opts.url: self.do_rss(repo_data, latest) self.remove_stale() self.sconn.commit()