]>
Commit | Line | Data |
---|---|---|
9137135a MT |
1 | #!/usr/bin/python |
2 | ||
2c909128 MT |
3 | from __future__ import absolute_import |
4 | ||
085af6d4 MT |
5 | import ConfigParser |
6 | import logging | |
7 | import os | |
8 | import pakfire | |
9 | ||
10 | from . import arches | |
11 | from . import bugtracker | |
12 | from . import builders | |
13 | from . import builds | |
14 | from . import cache | |
15 | from . import database | |
16 | from . import distribution | |
17 | from . import keys | |
18 | from . import logs | |
19 | from . import messages | |
20 | from . import mirrors | |
21 | from . import packages | |
22 | from . import repository | |
23 | from . import settings | |
24 | from . import sessions | |
25 | from . import sources | |
26 | from . import updates | |
27 | from . import uploads | |
28 | from . import users | |
29 | ||
455cd7d1 MT |
30 | # Import version |
31 | from .__version__ import VERSION as __version__ | |
32 | ||
5c8b4bfd | 33 | from .decorators import * |
085af6d4 MT |
34 | from .constants import * |
35 | ||
57859ebc | 36 | class 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) |