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