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