]> git.ipfire.org Git - people/jschlag/pbs.git/blame - src/buildservice/__init__.py
Don't iterate over deleted repositories
[people/jschlag/pbs.git] / src / buildservice / __init__.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
2c909128
MT
3from __future__ import absolute_import
4
085af6d4
MT
5import ConfigParser
6import logging
7import os
8import pakfire
9
10from . import arches
11from . import bugtracker
12from . import builders
13from . import builds
14from . import cache
15from . import database
16from . import distribution
d3e7a9fb 17from . import geoip
fd43d5e1 18from . import jobqueue
085af6d4
MT
19from . import keys
20from . import logs
21from . import messages
22from . import mirrors
23from . import packages
24from . import repository
25from . import settings
26from . import sessions
27from . import sources
28from . import updates
29from . import uploads
30from . import users
31
565ca1d1
MT
32log = logging.getLogger("backend")
33log.propagate = 1
34
455cd7d1
MT
35# Import version
36from .__version__ import VERSION as __version__
37
5c8b4bfd 38from .decorators import *
085af6d4
MT
39from .constants import *
40
57859ebc 41class Backend(object):
565ca1d1 42 def __init__(self, config_file=None):
085af6d4
MT
43 # Read configuration file.
44 self.config = self.read_config(config_file)
45
085af6d4
MT
46 # Global pakfire settings (from database).
47 self.settings = settings.Settings(self)
48
49 self.arches = arches.Arches(self)
50 self.builds = builds.Builds(self)
51 self.cache = cache.Cache(self)
d3e7a9fb 52 self.geoip = geoip.GeoIP(self)
085af6d4
MT
53 self.jobs = builds.Jobs(self)
54 self.builders = builders.Builders(self)
55 self.distros = distribution.Distributions(self)
fd43d5e1 56 self.jobqueue = jobqueue.JobQueue(self)
085af6d4
MT
57 self.keys = keys.Keys(self)
58 self.messages = messages.Messages(self)
59 self.mirrors = mirrors.Mirrors(self)
60 self.packages = packages.Packages(self)
61 self.repos = repository.Repositories(self)
62 self.sessions = sessions.Sessions(self)
63 self.sources = sources.Sources(self)
64 self.updates = updates.Updates(self)
65 self.uploads = uploads.Uploads(self)
66 self.users = users.Users(self)
67
68 # Open a connection to bugzilla.
69 self.bugzilla = bugtracker.Bugzilla(self)
70
71 # A pool to store strings (for comparison).
72 self.pool = pakfire.satsolver.Pool("dummy")
73
085af6d4
MT
74 def read_config(self, path):
75 c = ConfigParser.SafeConfigParser()
565ca1d1
MT
76
77 # Load default configuration file first
78 paths = [
79 os.path.join(CONFIGSDIR, "pbs.conf"),
80 ]
81
82 if path:
83 paths.append(path)
84
85 # Load all configuration files
86 for path in paths:
87 log.debug("Loading configuration from %s" % path)
88 c.read(path)
085af6d4
MT
89
90 return c
91
5c8b4bfd
MT
92 @lazy_property
93 def db(self):
fe1f59ca
MT
94 name = self.config.get("database", "name")
95 hostname = self.config.get("database", "hostname")
96 user = self.config.get("database", "user")
97 password = self.config.get("database", "password")
5c8b4bfd 98
fe1f59ca 99 log.debug("Connecting to database %s @ %s" % (name, hostname))
085af6d4 100
fe1f59ca 101 return database.Connection(hostname, name, user=user, password=password)
085af6d4
MT
102
103 def cleanup_files(self):
104 query = self.db.query("SELECT * FROM queue_delete")
105
106 for row in query:
107 if not row.path:
108 continue
109
110 path = os.path.join(PACKAGES_DIR, row.path)
111
112 try:
113 logging.debug("Removing %s..." % path)
114 os.unlink(path)
115 except OSError, e:
116 logging.error("Could not remove %s: %s" % (path, e))
117
118 while True:
119 path = os.path.dirname(path)
120
121 # Stop if we are running outside of the tree.
122 if not path.startswith(PACKAGES_DIR):
123 break
124
125 # If the directory is not empty, we cannot remove it.
126 if os.path.exists(path) and os.listdir(path):
127 break
128
129 try:
130 logging.debug("Removing %s..." % path)
131 os.rmdir(path)
132 except OSError, e:
133 logging.error("Could not remove %s: %s" % (path, e))
134 break
135
136 self.db.execute("DELETE FROM queue_delete WHERE id = %s", row.id)