]>
git.ipfire.org Git - people/jschlag/pbs.git/blob - backend/distribution.py
12 from repository
import Repository
, RepositoryAux
14 class Distributions(base
.Object
):
16 distros
= self
.db
.query("SELECT * FROM distributions ORDER BY name")
18 return [Distribution(self
.pakfire
, d
.id, d
) for d
in distros
]
20 def get_by_id(self
, id):
21 distro
= self
.db
.get("SELECT * FROM distributions WHERE id = %s LIMIT 1", id)
24 return Distribution(self
.pakfire
, distro
.id, distro
)
26 def get_by_name(self
, name
):
27 distro
= self
.db
.get("SELECT * FROM distributions WHERE sname = %s LIMIT 1", name
)
30 return Distribution(self
.pakfire
, distro
.id, distro
)
32 def get_by_ident(self
, ident
):
33 return self
.get_by_name(ident
)
35 def get_default(self
):
37 return self
.get_by_ident("ipfire3")
40 class Distribution(base
.Object
):
41 def __init__(self
, pakfire
, id, data
=None):
42 base
.Object
.__init
__(self
, pakfire
)
50 return "<%s %s>" % (self
.__class
__.__name
__, self
.name
)
54 if self
._data
is None:
55 self
._data
= self
.db
.get("SELECT * FROM distributions WHERE id = %s", self
.id)
59 def set(self
, key
, value
):
60 self
.db
.execute("UPDATE distributions SET %s = %%s WHERE id = %%s" % key
,
64 self
._data
[key
] = value
71 "slogan" : self
.slogan
,
72 "vendor" : self
.vendor
,
73 "contact" : self
.contact
,
74 "description" : self
.description
,
79 name
, release
= self
.name
.split()
87 "release = %s" % release
,
88 "slogan = %s" % self
.slogan
,
90 "vendor = %s" % self
.vendor
,
91 "contact = %s" % self
.contact
,
94 return "\n".join(lines
)
102 return self
.data
.sname
105 def identifier(self
):
110 return self
.data
.slogan
112 def get_arches(self
):
113 if self
._arches
is None:
114 _arches
= self
.db
.query("SELECT arch_id AS id FROM distro_arches \
115 WHERE distro_id = %s", self
.id)
119 arch
= arches
.Arch(self
.pakfire
, arch
.id)
120 self
._arches
.append(arch
)
122 # Sort architectures by their priority.
127 def set_arches(self
, _arches
):
128 self
.db
.execute("DELETE FROM distro_arches WHERE distro_id = %s", self
.id)
131 self
.db
.execute("INSERT INTO distro_arches(distro_id, arch_id) \
132 VALUES(%s, %s)", self
.id, arch
.id)
134 self
._arches
= _arches
136 arches
= property(get_arches
, set_arches
)
140 return self
.data
.vendor
142 def get_contact(self
):
143 return self
.data
.contact
145 def set_contact(self
, contact
):
146 self
.db
.execute("UPDATE distributions SET contact = %s WHERE id = %s",
150 self
._data
["contact"] = contact
152 contact
= property(get_contact
, set_contact
)
157 def set_tag(self
, tag
):
158 self
.db
.execute("UPDATE distributions SET tag = %s WHERE id = %s",
162 self
._data
["tag"] = tag
164 tag
= property(get_tag
, set_tag
)
167 def description(self
):
168 return self
.data
.description
or ""
171 def repositories(self
):
172 _repos
= self
.db
.query("SELECT id FROM repositories WHERE distro_id = %s", self
.id)
176 repo
= Repository(self
.pakfire
, repo
.id)
184 def repositories_aux(self
):
185 _repos
= self
.db
.query("SELECT id FROM repositories_aux \
186 WHERE status = 'enabled' AND distro_id = %s", self
.id)
190 repo
= RepositoryAux(self
.pakfire
, repo
.id)
197 def get_repo(self
, name
):
198 repo
= self
.db
.get("SELECT id FROM repositories WHERE distro_id = %s AND name = %s",
204 repo
= Repository(self
.pakfire
, repo
.id)
209 def get_build_repos(self
):
212 for repo
in self
.repositories
:
213 if repo
.enabled_for_builds
:
216 # Add all aux. repositories.
217 repos
+= self
.repositories_aux
222 def first_repo(self
):
223 repos
= self
.repositories
226 return self
.repositories
[-1]
229 def comprehensive_repositories(self
):
230 return [r
for r
in self
.repositories
if r
.comprehensive
]
232 def add_repository(self
, name
, description
):
233 return Repository
.new(self
.pakfire
, self
, name
, description
)
239 def has_package(self
, name
, epoch
, version
, release
):
240 #pkg = self.db.get("SELECT packages.id AS id FROM packages \
241 # JOIN builds ON packages.id = builds.pkg_id \
242 # JOIN sources_commits ON packages.commit_id = sources_commits.id \
243 # JOIN sources ON sources_commits.source_id = sources.id \
244 # WHERE builds.type = 'release' AND sources.distro_id = %s \
245 # AND packages.name = %s AND packages.epoch = %s \
246 # AND packages.version = %s AND packages.release = %s LIMIT 1",
247 # self.id, name, epoch, version, release)
249 pkg
= self
.db
.get("SELECT p.id AS id FROM packages p \
250 JOIN builds b ON p.id = b.pkg_id \
251 WHERE b.type = 'release' AND b.distro_id = %s AND \
252 p.name = %s AND p.epoch = %s AND p.version = %s AND p.release = %s \
253 LIMIT 1", self
.id, name
, epoch
, version
, release
)
256 logging
.debug("Package %s-%s:%s-%s does not exist, yet." % \
257 (name
, epoch
, version
, release
))
260 logging
.debug("Package %s-%s:%s-%s does already exist." % \
261 (name
, epoch
, version
, release
))
263 return packages
.Package(self
.pakfire
, pkg
.id)
265 def delete_package(self
, name
):
266 pass # XXX figure out what to do at this place
270 if self
._sources
is None:
273 for source
in self
.db
.query("SELECT id FROM sources WHERE distro_id = %s", self
.id):
274 source
= sources
.Source(self
.pakfire
, source
.id)
275 self
._sources
.append(source
)
281 def get_source(self
, ident
):
282 for source
in self
.sources
:
283 if not source
.identifier
== ident
: