]> git.ipfire.org Git - ipfire.org.git/blame - src/backend/base.py
accounts: Do not try to resize when no avatar was uploaded
[ipfire.org.git] / src / backend / base.py
CommitLineData
a6dc0bad
MT
1#!/usr/bin/python
2
c5ddbd67 3import configparser
11347e46 4import io
c5ddbd67 5import tornado.gen
11347e46
MT
6
7from . import accounts
05e8c602 8from . import blog
11347e46
MT
9from . import database
10from . import geoip
11from . import fireinfo
12from . import iuse
e28b082e 13from . import memcached
d6df53bf 14from . import messages
11347e46
MT
15from . import mirrors
16from . import netboot
17from . import nopaste
18from . import releases
19from . import settings
20from . import talk
611adbfb 21from . import tweets
181d08f3 22from . import wiki
2c361abc 23from . import zeiterfassung
d6df53bf 24from .decorators import *
2c361abc 25
11347e46 26DEFAULT_CONFIG = io.StringIO("""
9ed02e3b
MT
27[global]
28debug = false
29
30data_dir =
31static_dir = %(data_dir)s/static
32templates_dir = %(data_dir)s/templates
33""")
34
a6dc0bad 35class Backend(object):
2cd9af74 36 def __init__(self, configfile, debug=False):
9068dba1
MT
37 # Read configuration file.
38 self.config = self.read_config(configfile)
9ed02e3b
MT
39
40 # Enable debug logging if configured
41 self.debug = debug or self.config.getboolean("global", "debug")
9068dba1
MT
42
43 # Setup database.
44 self.setup_database()
a6dc0bad 45
9068dba1
MT
46 # Initialize settings first.
47 self.settings = settings.Settings(self)
e28b082e 48 self.memcache = memcached.Memcached(self)
9068dba1
MT
49
50 # Initialize backend modules.
a6dc0bad 51 self.accounts = accounts.Accounts(self)
9068dba1 52 self.geoip = geoip.GeoIP(self)
66862195 53 self.fireinfo = fireinfo.Fireinfo(self)
9068dba1
MT
54 self.iuse = iuse.IUse(self)
55 self.mirrors = mirrors.Mirrors(self)
56 self.netboot = netboot.NetBoot(self)
66862195 57 self.nopaste = nopaste.Nopaste(self)
9068dba1 58 self.releases = releases.Releases(self)
66862195 59 self.talk = talk.Talk(self)
9068dba1 60
0a6875dc 61 self.blog = blog.Blog(self)
181d08f3 62 self.wiki = wiki.Wiki(self)
2c361abc
MT
63 self.zeiterfassung = zeiterfassung.ZeiterfassungClient(self)
64
9068dba1
MT
65 def read_config(self, configfile):
66 cp = configparser.ConfigParser()
9ed02e3b
MT
67
68 # Initialize configuration with some sensible defaults
69 cp.readfp(DEFAULT_CONFIG)
70
71 # Parse file
9068dba1
MT
72 cp.read(configfile)
73
74 return cp
75
76 def setup_database(self):
77 """
78 Sets up the database connection.
79 """
80 credentials = {
81 "host" : self.config.get("database", "server"),
82 "database" : self.config.get("database", "database"),
83 "user" : self.config.get("database", "username"),
84 "password" : self.config.get("database", "password"),
85 }
86
87 self.db = database.Connection(**credentials)
c5ddbd67
MT
88
89 @tornado.gen.coroutine
90 def run_task(self, task, *args, **kwargs):
91 tasks = {
b2059099 92 "check-mirrors" : self.mirrors.check_all,
d6df53bf 93 "cleanup-messages" : self.messages.queue.cleanup,
e136d583 94 "scan-files" : self.releases.scan_files,
d6df53bf 95 "send-all-messages" : self.messages.queue.send_all,
611adbfb 96 "tweet" : self.tweets.tweet,
c5ddbd67
MT
97 "update-blog-feeds" : self.blog.update_feeds,
98 }
99
100 # Get the task from the list of all tasks
101 func = tasks.get(task, None)
102 if not func:
103 raise ValueError("Unknown task: %s" % task)
104
105 # Run the task
106 r = yield func(*args, **kwargs)
107
108 # If any error code has been returned,
109 # we will end the program
110 if r:
111 raise SystemExit(r)
d6df53bf
MT
112
113 @lazy_property
114 def messages(self):
115 return messages.Messages(self)
611adbfb
MT
116
117 @lazy_property
118 def tweets(self):
119 return tweets.Tweets(self)